| Autor |
Beitrag |
error
      
Beiträge: 64
|
Verfasst: Do 31.10.02 22:19
Hi,
wie mache ich folgende Sachen:
a) Ein Programm ausführen
b) ein Programm aktivieren
c) einem Programm Tastendrücke simulieren
und was muss ich beachten?
thxia error
|
|
CenBells
      
Beiträge: 1547
Win 7
Delphi XE5 Pro
|
Verfasst: Fr 01.11.02 01:00
ein programm ausführen machst du per
shellexecute in der unit shellApi
gruß
Ken
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 01.11.02 01:18
a) Shellexecute oder CreateProcess
b) SetForeWindow, SetFocus oder ein WM_ACTIVATE an das Fenster schicken
c) Koimmt darauf an, werd mal etwas genauer.
|
|
error 
      
Beiträge: 64
|
Verfasst: Fr 01.11.02 12:43
*genauerwerd*
Also... ich möchte ein Programm mit Parametern starten ("C:\Programm.exe -parameter1"). Wenn das Programm fertig geladen hat möchte ich ihm bestimmte Tasteneingabe simulieren (wie z.B. Alt+D um das D&atei-Menü zu öffnen). Dann möchte ich noch ein anderes Programm starten und diesem Programm auch Tastendrücke senden. Danach soll alles wieder beendet werden.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Fr 01.11.02 20:30
| error hat folgendes geschrieben: | wie mache ich folgende Sachen:
a) Ein Programm ausführen
b) ein Programm aktivieren
c) einem Programm Tastendrücke simulieren |
Bitte in Zukunft für jede Frage ein Topic erstellen!
Gruß
TINO
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 02.11.02 05:02
Sorry bei b) muß es natürlich SetFore groundWindow heißen.
So das mit den Tastendrücken. Man muß sich erstmal davon lösen andere Programme per Code so steuern zu wollen, wie als wenn man es tut, wen man vor dem Bildschirm sitzt.
Beispiel: Button-Klicken
Man könnte natürlich per Programmcode die Maus über den Button bewegen und dann an dieser Stelle einen Klick mit der Maus simulieren. Einfacher ist es allerdings, wenn man sich das Handle (die Kennziffer des Buttons - wird von Windows vergeben) besorgt und dann an diesen Button ein BM_CLICK schickt. Also genau die Nachricht auslöst, die auch ausgelöst wird, wenn man per Maus auf den Button klickt.
So folgender Code startet Notepad, "aktiviert" es (wie du dich ausdrückst) und öffnet den Dateiöffnen-Dialog vom Editor:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var hWnd, hMenu, hSubmenu, MenuItemID: Cardinal; begin Shellexecute(Handle, 'open', PChar('notepad.exe'), nil, nil, SW_SHOW); Sleep(500); hWnd := FindWindow('Notepad', 'Unbenannt - Editor'); SetForeGroundWindow(hWnd); hMenu := GetMenu(hWnd); hSubmenu := GetSubmenu(hMenu, 0); MenuItemID := GetMenuItemID(hSubMenu, 1); SendMessage(hWnd, WM_COMMAND, MenuItemID, 0); end; |
Sonst noch irgendwelche Wünsche? 
|
|
error 
      
Beiträge: 64
|
Verfasst: Sa 02.11.02 11:36
Danke Luckie... das war genau das was ich wollte...
Du bist (m)ein Gott 
|
|
error 
      
Beiträge: 64
|
Verfasst: Mo 04.11.02 21:01
Ok..Luckie hat ja gesagt ich kann dem Programm Events per "SendMessage(hWnd, WM_COMMAND, MenuItemID, 0);" senden. Meine Frage dazu: Wie kann ich etwas klickbares "klicken" und wie finde ich den Namen raus? Wo bekomm ich zum 'rausfinden Programme?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 04.11.02 21:09
Wie, "was anklickbares" ???
Bei Windows ist alles anklickbar: Checkboxen, Radion-Buttons, Listboxen, Comboboxen, Edits, Buttons, ...
Aber wie man auf einen Button klickt habe ich dir schon gesagt.
|
|
error 
      
Beiträge: 64
|
Verfasst: Mo 04.11.02 21:25
| Luckie hat folgendes geschrieben: | Wie, "was anklickbares" ???
Bei Windows ist alles anklickbar: Checkboxen, Radion-Buttons, Listboxen, Comboboxen, Edits, Buttons, ...
Aber wie man auf einen Button klickt habe ich dir schon gesagt. |
Also... es ist ein Button.
Wie man Buttons an sich klickt hast du mir ja gesagt, klar. Aber mein Problem als etwas vertrottelter Delphi-Anfänger ist dieses:
a) Wo bekomm ich ein Beispiel her?
b) Wie finde ich raus welche Bezeichnung ein Button hat (welche ID ode r so) und bleibt diese bei jedem Programmstart gleich?
Anders gesagt:
Ich will einen Button in einem fremden Programm klicken. (kann auch ein klickbares Label oder so sein. Es bewirkt bloss bei einem Klick was...)
Tut mir leid wenn ich zu ungenau bin...
mfg error
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 04.11.02 22:00
Also. Informier dich mal über FindWindiw, EnumWindows, EnumChildWindows, WM_GETTEXT, GetDlgItem, FindWindowEx, WM_COMMAND, BM_CLICK.
Quelle: MSDN
Und noch ein hilfreiches Tool: EDA
Und am sichersten ist noch das Handle über die ID zu bekommen, da sich diese nicht ändert, im Gegensatz zum Text. Und um Gottes Willen das Handle nicht statisch einprogrammieren, denn das vergibt Windows bei jedem Start des Programmes neu.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 04.11.02 22:26
Und hier www.auq.de/viewtopic.php?t=3677 findest du Code von mir, der einen Button klickt. Ist zwar in der selben Anwendung, was das ganze etwas einfacher macht), aber wie du an das Handle kommst, habe ich dir ja gesagt. (Siehe oben.)
Dieser Thread ist auch noch interessant wegen der Links, die ich gepostet habe: www.auq.de/viewtopic.php?t=3353
|
|