Fenster maximieren, Klicks ausführen, alles automatisch ...

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Fenster maximieren, Klicks ausführen, alles automatisch ...

Beitrag von brandelh »

Hi,

ich will eine Art von Makrorecorder programmieren.
Die die ich bis jetzt gesehen habe taugen nicht für mein Problem.

1. Ist es möglich ein anderes Programm am Bildschirm zu maximieren,
egal wie es vorher angezeigt wurde (das Programm läuft auf jeden Fall und die Titelleiste ist bekannt).

2. Wenn es nun maximiert ist sollen Mausclicks an verschiedenen Stellen erfolgen (die Positionen sich wiederum bekannt).

3. Eventuell sollen noch Texte in Felder eingegeben werden.
Also klick in des Textfeld und Texteingabe simulieren.

Das Programm selbst ist nicht von mir und auch nicht in Xbase++ geschrieben.
Gruß
Hubert
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Hubert,
1. Ist es möglich ein anderes Programm am Bildschirm zu maximieren,
egal wie es vorher angezeigt wurde (das Programm läuft auf jeden Fall und die Titelleiste ist bekannt).
Das geht ganz ähnlich wie das In-den-Vordergrund-holen einer Anwendung.

Code: Alles auswählen

#define SW_MAXIMIZE 3

/*
Ist der Name der Fensterklasse nicht bekannt, kann man als 1. Parameter NIL übergeben. Der Fenstertitel im 2. Parameter sollte komplett übergeben werden.
*/

FUNCTION MaximizeApp( cClass, cTitle )

Local nHwndFind, nHwndLast

DEFAULT cClass TO 0
DEFAULT cTitle TO 0

nHwndFind := FindWindowA( cClass, cTitle )

If nHwndFind = 0
  Return FALSE
Endif

nHwndLast := GetLastActivePopup( nHwndFind )
ShowWindow( nHwndLast, SW_MAXIMIZE )
BringWindowToTop( nHwndLast )
SetForegroundWindow( nHwndLast )

Return TRUE

DLLFUNCTION FindWindowA( ClassName, WinName ) USING STDCALL FROM user32.dll
DLLFUNCTION GetLastActivePopup( hWnd ) USING STDCALL FROM user32.dll
DLLFUNCTION ShowWindow( hWnd, nCmdShow ) USING STDCALL FROM user32.dll
DLLFUNCTION BringWindowToTop( hWnd ) USING STDCALL FROM user32.dll
DLLFUNCTION SetForegroundWindow( hWnd ) USING STDCALL FROM user32.dll
2. Wenn es nun maximiert ist sollen Mausclicks an verschiedenen Stellen erfolgen (die Positionen sich wiederum bekannt).

3. Eventuell sollen noch Texte in Felder eingegeben werden. Also klick in des Textfeld und Texteingabe simulieren.
Das geht mit SendInput() bzw. keybd_event() und mouse_event(). Dieser Thread hilft vielleicht weiter.

Viele Grüße,
Günter
Antworten