FindWindow und SendMessage?
-
Ja danke. Das mit FindWindowEx hab ich schon rausbekommen.
Aber wie kann ich einen Buttondruck simulieren? Ich kann einen Button aktivieren/deaktivieren. Aber wie mit SendMessage oder so? Habt ihr ne Idee? Hier mein Code:
HWND x,y; x = ::FindWindow(TEXT("TWizardForm"), "Setup - Hot CPU Tester Pro 4"); y = ::FindWindowEx(x, NULL, TEXT("TButton"), "&Next >"); ::EnableWindow(y,true);
-
Schau dir mal mouse_event bzw. SendInput an
-
flenders schrieb:
Schau dir mal mouse_event bzw. SendInput an
Und was, wenn das Fenster verdeckt ist? Ich denke, SendMessage() ist besser.
SendMessage(y, WM_LBUTTONDOWN, MK_LBUTTON, 0); SendMessage(y, WM_LBUTTONUP, 0, 0);
-
MEGAFREU!!
Endlich geht es!!! Danke Euch!
-
Vielleicht bekommt einer raus welche Nachricht an RadioButtons (TRadioButton) und Checkboxen zum Aktivieren gesendet werden muß.
Gruß Ronny
-
Das findest du bitte selber raus. Nicht umsonst gibt es über diesem Forum einen Link auf die MSDN. Und wenn du keine Flatrate hast, reicht auch die win32.hlp für den Anfang. Diese Datei kannst du z.B. auf der lcc-win-Seite runterleaden: http://www.cs.virginia.edu/~lcc-win32/index.html
-
hronny schrieb:
Vielleicht bekommt einer raus welche Nachricht an RadioButtons (TRadioButton) und Checkboxen zum Aktivieren gesendet werden muß.
Sind auch nur Buttons.
-
Ich hab die Dateien geladen, aber ich finde nur folgendes (geht trotzdem net):
SendMessage(y,BM_SETCHECK,BST_CHECKED,0);
An application sends a BM_SETCHECK message to set the check state of a radio button or check box.
-
Was ist y
-
Ups. hier:
y = ::FindWindowEx(x, NULL, TEXT("TRadioButton"), "I &accept the agreement");
-
Und das Handle, das du bekommst ist gültig?
-
Ja schon (Rückgabewert: HWND). Aktivieren des Fensters/RadioButtons ist Problemlos möglich. Nur ich krieg das mit den Messages nicht hin, damit es "gechecked" wird.
-
Komisch. Bei mir im C++Builder funzt
SendMessage(RadioButton1->Handle, BM_SETCHECK, BST_CHECKED, 0);
wunderbar.
-
SendMessage(WM_SETFOCUS,0,0);
geht ohne prob. Aber dein Befehl (obwohl logischer) geht bei mir net. Oder vielleicht ist das bei verschiedenen Programmen unterschiedlich.
-
Hi. Ich habe zu meinem älteren Beitrag noch eine Frage, die mir Kopfzerbrechen bereitet: Wie finde ich eine Edit-Box (mit FindWindowEx)? Denn eine EditFeld hat eigentlich keine Bezeichnung, wie z.B. ein Fenster oder so. Deswegen komme ich mit
newwin = ::FindWindowEx(findwin, NULL, TEXT(""), "Edit");
immer nur an das erste EditFeld. Mit
::SendMessage(findwin, WM_NEXTDLGCTL, 0, 0);
komm ich auch net weiter.
-
EnumChildWindows oder bei FindWindowEx eifanch jeweils für hwndChildAfter den Fenster-Handle des vorhergehenden Aufrufs einsetzen
-
Irgendwie steh ich aufn Schlauch! Das ich irgendwie mit EnumChildWindow rankomme, hab ich schon halbwegs begriffen. Aber ich habe keine Vorstellung wie das gehen soll.?
-
Du müsstest eben wissen, das wievielte Child es ist, oder evtl. hilft dir GetDlgCtrlID weiter
-
Na ja, mit Spy sehe ich welche SteuerelementID welches EditFeld hat. Ich weis nur nicht, wie ich das programmieren soll, damit ich global auf ein gefundenes Element zugreifen kann. Meine HWND-Variable die aus FindWindow entsteht, ist global angelegt, um damit in verschiedenen Befehlen darauf zugreifen zu können - Local wäre es ja am Ende des Befehls weg.
Also brauche ich eine Möglichkeit irgendwie meine Variable auf das neue Fenster zu verweisen. Die Frage ist nur wie?
Das mit GetDlgCtrlID habe ich schon versucht, aber irgendwie kommt immer Programmabsturz. Die Nummer vom ChildWindow - mmmh - kann ich die mit Spy irgendwie selbst ausrechnen?
-
Also eine Zugriffsverletzung solltest du bei GetDlgCtrlID eigentlich nicht bekommen
- wie hast du es denn versucht?