Autor Beitrag
error
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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



BeitragVerfasst: Sa 02.11.02 05:02 
Sorry bei b) muß es natürlich SetForegroundWindow 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:
ausblenden 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? :wink:
error Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: Sa 02.11.02 11:36 
Danke Luckie... das war genau das was ich wollte...

Du bist (m)ein Gott :D
error Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: 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



BeitragVerfasst: 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



BeitragVerfasst: 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