Unter XP fremde Applikation fernsteuern

Leute, das ist ein nicht ganz einfaches Unterfangen, und zwar wegen der getrennten Speicherbereiche im Protected Mode.

Mir ist es zwar gelungen, Dialoge von Fremdprogrammen aufzurufen und zu steuern, aber nicht Einstellungen in Dialogen, z.B. das Lesen und Schreiben des Zustands einer Check Box OHNE DIALOG zu bewerkstelligen. Nun gut, Tools wie WinHex Forensic bieten z.B. die Möglichkeit, Programmspeicher direkt im RAM zu editieren. Bislang habe ich noch keine Zeit gefunden, dies nachzubauen, da der Aufwand erheblich ist.
Entscheidend ist dabei, KEINE Programmiertools zu verwenden, die von MS stammen, da diese auf MS Bibliotheken beruhen. Ich verwende der Klarheit der Sprache wegen PowerBasic.
Es wäre gut, hier jemanden zu finden, der sowas schon mal ernsthaft versucht hat.

Norbert
 
z.B. das Lesen und Schreiben des Zustands einer Check Box OHNE DIALOG zu bewerkstelligen
Diesen Satz verstehe ich irgendwie nicht :)

Windows bietet hier ganz bequeme Möglichkeiten per API die Sachen zu ändern:
Zuerst braucht man einen Handle auf das Fenster (Dialog ist ja auch ein Fenser). Das kann man z.B mit FindWindow bewerkstelligen, es gibt auch noch mehr Möglichkeiten wie CreateToolhelp32Snapshot /Process32First/Process32Next. Dann braucht man die ID der zu ändernden Ressource (man muss sie nur "einmal" herausfinden): dafür gibt es verschiedene Programme wie Spy++ oder "Get&Set" (http://win32assembly.online.fr/source1.html)
Jetzt schickt man nur noch gewünschte Nachrichten:

Beispielcode
Code:
handle= FindWindow,0, "FensterTitel"
SendDlgItemMessage,handle,RESSOURCE_ID,BM_SETCHECK,BST_CHECKED,0
Wobei ich das gerade getestet habe und es funktioniert ;)
Statt SendDlgItemMessage kann man auch SendMessage nehmen, muss aber den Handle zur Ressource rauskriegen: (GetDlgItem,ID)
Auf dieselbe Weise kann man nahezu alles steuern - es sei denn das Programm benutzt eigene Controls.

Dann gibt es noch andere Methoden in den Speicher einzugreifen: vornehmlich mit
OpenProcess,PROCESS_ALL_ACCESS
und WriteProcessMemory.
Solange man hier klare Ziele hat, ist es auch nicht wirklich aufwendig.

Oder gar durch Code-injection (damit kann man auch schnell eigene Dialoge hinzufügen), wobei ich hier DLL-Injection als "unproblematischste" Lösung empfehlen würde (es lässt sich sicherlich jede Menge bei Google dazu finden, aber emfpehlen würde ich http://scifi.pages.at/yoda9k/Articles/ForceLibrary.htm

Entscheidend ist dabei, KEINE Programmiertools zu verwenden, die von MS stammen, da diese auf MS Bibliotheken beruhen
Wenn Du Dich auf die WinAPI beziehst: dann kommst Du unter XP nicht ums Treiberschreiben herum ;), ansonsten bleiben wie erwänt im groben zwei Möglichkeiten: Nachrichten an das Fenster schicken oder in den Speicher schreiben, wobei Du wegen den getrennten Speicherbereichen entweder auf das OS angewiesen bist oder eben "alles selber" machen musst.


EDIT: was mir gerade so eingefallen ist: eventuell solltest Du mehr schreiben und die Situation detailierter schildern - manchmal denkt man eben zu kompliziert und sieht den Wald vor lauter Bäumen nicht :) - vielleicht ist es in diesem Fall schon alles mit einem guten Macrorecorder getan.
 
Zurück
Oben