Mit VB den Arbeitsspeicher auslesen/überwachen

Hallo Wissende,
wenn man in Excel eine Dialogbox aufruft, z.B. Sortieren so erscheint ein Fensterchen wo man bis zu 3 Sortierschlüssel eingeben/auswählen kann und für jeden Schlüssel auch die Reihenfolge (aufsteigend/absteigend).
Wenn man dies tut und dann sortiert usw. und diesen Dialog nochmals aufruft so sind diese "Voreinstellungen noch eingestellt, also Excel hat sich das „gemerkt“.
Nun kann ich mittels VBA auch diesen Dialog aufrufen und dabei gleich diese Vorgaben eintragen lassen, da ich die Argumente:
orientation, key1, order1, key2, order2, key3, order3, header, custom, case
festlegen kann bei Aufruf :
Application.Dialogs(xlDialogSort).show orientation:=xlTopToBottom , key1:= Range(„A1“), …

Mein Problem ist nun, wie/wo merkt sich Excel diese Vorgaben?
Mit den Freewareprogrammen Regmon.exe und Filemon.exe habe ich Excel „überwacht“, wenn ich da "Vorgaben " ändere schreibt Excel weder in eine Datei noch in die Registry.
Also merkt Excel sich das irgendwie/irgendwo im Arbeitsspeicher.
Nun hat Excel geschätzte 250 Dialogboxen wie z.B. Sortierung. Ich mutmaße, bei allen weden die Vorgaben auf die gleiche Art verwaltet.

Es ist wünschenswert in manchen Fällen diese Vorgaben nicht nur festzulegen sondern auch auszulesen. Nur, wie mache ich das.

Nun meine Frage, kann VB überwachen was Excel wohin im Arbeitsspeicher ablegt und dies dann ggfs. auch auslesen?
Mangels Kenntnssen des Arbeitsspeichers und sytemnaher programme wie Assembler und C usw weiß ich gar nicht ob mein Vorhaben überhaupt realisierbar ist.

Ich hoffe ich konnte mich ausreichend erkären was mein Zel ist, ich möchte die Vorgaben von Dialogboxen auslesen.
Danke für das Interesse und Gruß
Reinhard

Hallo Reinhard,

Mein Problem ist nun, wie/wo merkt sich Excel diese Vorgaben?
Mit den Freewareprogrammen Regmon.exe und Filemon.exe habe ich
Excel „überwacht“, wenn ich da "Vorgaben " ändere schreibt
Excel weder in eine Datei noch in die Registry.
Also merkt Excel sich das irgendwie/irgendwo im
Arbeitsspeicher.

wenn Du Excel beendest und das Dokument neu aufrufst, sind die Einstellunegn dann noch erhalten? Wenn ja spricht das gegen den Arbeitsspeicher als Ort.

Nun hat Excel geschätzte 250 Dialogboxen wie z.B. Sortierung.
Ich mutmaße, bei allen weden die Vorgaben auf die gleiche Art
verwaltet.

Es ist wünschenswert in manchen Fällen diese Vorgaben nicht
nur festzulegen sondern auch auszulesen. Nur, wie mache ich
das.

Nun meine Frage, kann VB überwachen was Excel wohin im
Arbeitsspeicher ablegt und dies dann ggfs. auch auslesen?

Nur, wenn Du den Namen der Variablen kennst, mit der bekommst Du die Speicheradresse. Im Arbeitsspeicher ‚suchen‘ geht nicht, dann stürzt Dir Windows ab. Und wenn Du die Variablen kennst, mußt Du nicht mehr mit dem Speicher spielen.

Du willst Kenntnisse über Excel mit dieser Funktion ersetzen, das geht IMHO so nicht. Um die Werte, die Du möchtest aus dem Speicher zu bekommen benötigst Du genau die Informationen, die Dir fehlen, wenn ich mich nicht heftig irre.

Gruß, Rainer

Hallo Rainer,

wenn Du Excel beendest und das Dokument neu aufrufst, sind die
Einstellunegn dann noch erhalten? Wenn ja spricht das gegen
den Arbeitsspeicher als Ort.

danke, gute Idee, kam ich nicht drauf, probiere ich, danach weiß ich ja oder nein. Andreseits, jetzt ungeteset, gehe ich davon aus, es kommt die StandardVoreinstellungen und die ist die erste Spalte des markierten Bereiches. Also doch Arbeitsspeicher während einer Instanz. Wie auch immer, ich werds herausfinden.

Nur, wenn Du den Namen der Variablen kennst, mit der bekommst
Du die Speicheradresse. Im Arbeitsspeicher ‚suchen‘ geht
nicht, dann stürzt Dir Windows ab. Und wenn Du die Variablen
kennst, mußt Du nicht mehr mit dem Speicher spielen.

Wieso stürzt Windows ab wenn ich im Arbeitsspeicher nur „suche“ bzw lese?

Du willst Kenntnisse über Excel mit dieser Funktion ersetzen,
das geht IMHO so nicht. Um die Werte, die Du möchtest aus dem
Speicher zu bekommen benötigst Du genau die Informationen, die
Dir fehlen, wenn ich mich nicht heftig irre.

Also meine Idee, vielleicht zu naiv, aber kenne mich halt nicht aus, ist diese, ich starte eine Exe, jetzt egal mit VB erzeugt oder mit C oder assembler. Diese Exe schreibt alle Änderungen des Arbeitsspeichers in ein Logfile. Dann gehe ich in Excel hin und ändere die Sortiereinstellungen.
Dann stoppe ich die Exe und schau mir das Logfile an. Sofern Excel die „Vorgabne“-Ibfos im Arbeitsspeicher speichert werde ich doch dann entdecken in welche Bytes des Arbeitsspeicher es die Änderungen schreibt.
Wenn ich dies mehrmals mache krieg ich doch raus ob es immer verschiedene Speicheradressen sind, dann habe ich „verloren“ oder ob es immer das 27567te Byte des von Windowws zugewiesenen Arbeitsspeichers von Excel ist, dann habe ich „gewonnen“.
Im zweiten Fall brauche ich doch nur noch ein Programm was mir das 27567te Byte des Arbeitsspeichers von Excel liefert und ich kann auslesen was Argument1 vom Dialog Sortierung ist.
Natürlich habe ich keinen Plan wie man den Arbeitsspeicherbereich von Excel ermittelt:frowning:
Danke ^ Gruß
Reinhard

Gruß, Rainer

Hallo Reinhard,

Wieso stürzt Windows ab wenn ich im Arbeitsspeicher nur
„suche“ bzw lese?

weil Du nur bestimmte, frei gegebene Speicher lesen darfst.

Wenn ich dies mehrmals mache krieg ich doch raus ob es immer
verschiedene Speicheradressen sind, dann habe ich „verloren“
oder ob es immer das 27567te Byte des von Windowws
zugewiesenen Arbeitsspeichers von Excel ist, dann habe ich
„gewonnen“.

Das war unklar? Natürlich ist es immer eine andere Speicheradresse. Das Programm fordert bei Windows an, Speicher zu reservieren, die Adresse legt Windows fest. Feste Adressen gibt es seit Multitasking nicht mehr. Das war beim C64 noch so, ab Amiga oder Windows gibt es das nicht mehr. Der Speicher wird immer dynamisch verwendet.

Prüf das doch einfach, dann siehst Du es.

Option Explicit

Private Sub Command1\_Click()
 Dim txt As String
 txt = "Test"
 Me.Caption = Hex$(StrPtr(txt))
End Sub

Das Programm zeigt Dir die Speicheradresse der Variablen. Starte es. stoppe es wieder, starte ein weiteres Programm und starte das Programm noch ein mal …

Wenn Du angenommen hast, daß Du mit festen Speicheradressen rechnen kannst, ist Dein Projekt gestorben. Speicher wird immer beim Betriebssystem angefordert. Die Adresse ist nicht vorhersehbar.

Gruß, Rainer

Hallo!

Wieso stürzt Windows ab wenn ich im Arbeitsspeicher nur
„suche“ bzw lese?

weil Du nur bestimmte, frei gegebene Speicher lesen darfst.

Aber normalerweise stürzt das Betriebsystem (Windows) nicht ab, sondern beendet sofort den Task („Allgemeine Schutzverletzung“).

mfg
chris

Moin Rainer,

Wieso stürzt Windows ab wenn ich im Arbeitsspeicher nur
„suche“ bzw lese?

weil Du nur bestimmte, frei gegebene Speicher lesen darfst.

Hätte ich jetzt nicht vermutet, „Schreiben“ verboten okay, aber nur „Lesen“. Naja, ist halt so.

Wenn ich dies mehrmals mache krieg ich doch raus ob es immer
verschiedene Speicheradressen sind, dann habe ich „verloren“
oder ob es immer das 27567te Byte des von Windowws
zugewiesenen Arbeitsspeichers von Excel ist, dann habe ich
„gewonnen“.

Das war unklar? Natürlich ist es immer eine andere
Speicheradresse. Das Programm fordert bei Windows an, Speicher
zu reservieren, die Adresse legt Windows fest. Feste Adressen
gibt es seit Multitasking nicht mehr. Das war beim C64 noch
so, ab Amiga oder Windows gibt es das nicht mehr. Der Speicher
wird immer dynamisch verwendet.

Prüf das doch einfach, dann siehst Du es.

Option Explicit

Private Sub Command1_Click()
Dim txt As String
txt = „Test“
Me.Caption = Hex$(StrPtr(txt))
End Sub

Das Programm zeigt Dir die Speicheradresse der Variablen.
Starte es. stoppe es wieder, starte ein weiteres Programm und
starte das Programm noch ein mal …

Wenn Du angenommen hast, daß Du mit festen Speicheradressen
rechnen kannst, ist Dein Projekt gestorben. Speicher wird
immer beim Betriebssystem angefordert. Die Adresse ist nicht
vorhersehbar.

StrPtr gibt es in Excel-Vba nicht.
Danke für deine Mühen. Ich gebe mein Vorhaben auf. Wenn ich alles richtig verstanden habe, müßte eine Funktion „GetDialogsArguments()“ folgendes tun

  • es müßte schon ab Start von Excel mitlaufen
  • aus excel.exe oder wo immer das steht die Vorgaben für Dialogboxen herauslesen (wenn man z.B Dialogbox Sortierung erstmals startet nimmt Excel immer die erste Spalte des markierten Bereichs als erstes Sortierkriterium)
  • Anforderungen von Speicherplatz von Excel an Windows protokollieren
  • überwachen ob eine Dialogbox gestartet wird, die geänderten Vorgaben protokollieren
  • Bei Aufruf der Funktion werden dann die Vorgaben mitgeteilt

Mit meinen Kenntnisssen kann ich nicht definitiv sagen dass das alles überhaupt möglich ist, ich vermute es. Aber, und das ist der Punkt, mit viel zu riesigem Aufwand, also ist das Projekt gestorben.
Danke ^ Gruß
Reinhard

Gruß, Rainer