Problem mit SetCapture
-
Ich starte aus meinem c++ Programm einen Prozess und will nun mit SetCapture die Mauscapturefunktionen auf den neuen Prozess legen.
SetCapture liefert mir jedoch NULL zurück und ich weiß nicht warum.
Mein Code:
HWND cap_test; STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); si.wShowWindow=SW_HIDE; si.lpDesktop=NULL; si.lpTitle=NULL; CreateProcess( NULL, // No module name (use command line). "setup.exe", // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi ); // Pointer to PROCESS_INFORMATION structure. ReleaseCapture(); cap_test = SetCapture(pi.hProcess);cap_test ist immer NULL, ich weiß nicht warum, hat mir jemand einen Tipp?
Vielen Dank für eure Hilfe.
Grüße Benny
-
Versuch es doch mal mit dem Lesen der Doku!
SetCapture will ein Window handle und kein Prozesshandle!
-
Ich habe die Doku mehr als nur einmal gelesen, ich bin ganz frisch in der WinAPI Welt.
Wie bekomme ich dann ohne Probleme das Windowhandle von einem Prozess den ich starte?
-
Das einzige was ich jetzt gefunden habe ist findwindow(), wobei diese Funktion kein Child Window Handle zurückliefert.
Ebenso kann ich SetCapture nur auf ChildWindows anwenden, wenn ich das richtig verstanden habe.
Bin über Tipps sehr dankbar.
mfg
Benny
-
Also an sich ist ein HWND halt ein HWND da ist es erstmal egal ob es das Parent Window ist oder Child. Und wenn du ein Child von einem Parent willst dann holst dir erst mit FindWindow das Parent und dann mit GetWindow ein Child.
MfG schirrmie
-
@BennyB:
Was willst Du eigentlich mit diesem Aufruf?Wenn Du neu bist versuch eher zu erklären was Du machen möchtest als zu Fragen wie man eine Funktion verwendet, deren Funktion Du nicht verstehst!

SetCapture aus einem anderen Programm für ein fremdes Fenster aufzurufen macht gar keinen Sinn. Wer soll denn bitte ReleaseCapture aufrufen.
-
OK, entschuldige bitte.
Mein Plan ist folgender.
Ich möchte einen Pluginrekorder programmieren. Ich habe ein Tool erstellt welches mit Hilfe von Plugins Programme selbstständig installieren kann. Diese Plugins basieren auf .vbs Dateien und können über einen bereits programmierten Plugingenerator erstellt werden.
Da sich nicht jeder mit dem Plugingenerator auseinandersetzen will möchte ich ein Programm dass im Hintergrund läuft und die Installation mitschneidet.
Und zwar brauche ich den Namen oder die ID des Buttons welcher vom User per Maus gedrückt wird.
Ich möchte aber nur, dass die Mausklicks welche in dem Setup gemacht werden aufgezeichnet werden.
Ich kann aber nicht mit einem bestehenden Produkt das ganze aufzeichnen, da ich die Informationen in einer bestimmten Form weiterverarbeiten muss.
D.h.:
Ich habe ein C-Programm, welches ein Setup startet. Alle Mausklicks in diesem Setup muss ich abfangen und verwerten. Vorallem brauch ich den aktuellen Fenstertitel und Inhalt des Setups und den Buttonnamen oder die ID des Buttons welcher gerade mit der Maus angeklickt wurde.
Ich hoffe jetzt etwas mehr Klarheit in die Sache gebracht zu haben.
Vielen Dank für die konstruktive Kritik!
Grüße Benny