SendMessage() BM_CLICK funktioniert nicht immer
-
Abend, ich schicke ne BM_CLICK Message an nen Button auf ner VB6 Form. Nur leider wird dann das Click Event des Buttons nicht immer ausgelöst.
Mein Code:h = FindWindow(NULL,"Form1"); printf("h: %i\n",h); s = FindWindowEx(h,NULL,NULL,"Test"); printf("s: %i\n",s); SendMessage(s,BM_CLICK,0,0L);
Der Handle des Buttons ist richtig...
Nur leider wird der Button halt machnmal nicht geklickt.
Wer weiß weiter?
-
Auch die Doku gelesen zu BM_CLICK:
http://msdn.microsoft.com/en-us/library/bb775985(VS.85).aspxIf the button is in a dialog box and the dialog box is not active, the BM_CLICK message might fail. To ensure success in this situation, call the SetActiveWindow function to activate the dialog box before sending the BM_CLICK message to the button.
-
Also der Button ist nicht in einer "Dialog Box",aber auch wenn ich es mit SetActiveWindow() probiere klappt es nicht immer.
-
Wenn der Button in einer anderen Anwendung liegt, kannst Du nicht einfach SetActiveWindow ausführen.
-
Wenn der Button in einer anderen Anwendung liegt, kannst Du nicht einfach SetActiveWindow ausführen.
Was muss ich den jetzt machen damit alles korrekt läuft?
Bin grade etwas verwirrt...
-
Du hast bisher nicht gesagt, dass es hier um einen anderen Prozess geht oder?
Also war mein Kommentar ein Schuß/Vermutung ins Blaue!Wie wäre es wenn Du einfach mal die Doku liest?
SetActiveWindow
http://msdn.microsoft.com/en-us/library/ms646311(VS.85).aspxBy using the AttachThreadInput function, a thread can attach its input processing to another thread. This allows a thread to call SetActiveWindow to activate a window attached to another thread's message queue.
-
Du hast bisher nicht gesagt, dass es hier um einen anderen Prozess geht oder?
Also war mein Kommentar ein Schuß/Vermutung ins Blaue!Abend, ich schicke ne BM_CLICK Message an nen Button auf ner VB6 Form.
Habe ich mich wohl falsch ausgedrückt. ^^
Habe ein Problem mit der AttachThreadInput Funktion. Was für Parameter muss ich den der Funktion übergeben verstehe das was in der MSDN steht nicht so wirklich.
-
Hallo,
du benötigst Thread-IDs, die man mit GetWindowThreadProcessId bzw. GetCurrentThreadId erhalten kann.
MfG,
Probe-Nutzer
-
idAttach = Programmthreadid?
idAttachTo = Threadid des Fensters an den die Message geschickt wird?
fAttach = Auf TRUE setzen
-
Zwei Möglichkeiten gibt's ja hier nur (denn fAttach = TRUE ist logisch), wahrscheinlich hast du es schon längst herausgefunden, der Vollständigkeit halber, es ist genau anders herum:
idAttach = Threadid des Fensters an den die Message geschickt wird
idAttachTo = ProgrammthreadidMfG,
Probe-Nutzer
-
Mache es jetzt mit AttachThreadInput() aber SetActiveWindow() liefert trotzdem immer 0.
-.-
-
Und was "sagt" GetLastError?
MfG,
Probe-Nutzer
-
The parameter is incorrect.
o.O
Dabei ist eigentlich der Parameter richtig und zwar das Handle des Fensters.
Und das Handle ist korrekt.