Hallo.
Ich hatte bisher noch nie das Vergnügen, eine fremde Anwendung fernsteuern zu müssen, und ich habe auch kein Problem das umzusetzen. Fast alles funktioniert auch bestens, mit einer kleinen aber wichtigen Ausnahme: um die Fensterposition einer bestimmten Anwendungsinstanz herauszufinden verwende ich GetWindowRect(), allerdings ist der Rückgabewert dabei stets 0. Mit dem korrekten Anwendungshandle kann ich die Fensterposition selbst setzen (SetWindowPos()) oder den Prozess töten (.Kill()), nur mit dem Auslesen habe ich Probleme. Ich glaube auch nicht, dass mein Code einen Fehler enthält, aber natürlich lasse ich mich gerne eines besseren belehren. Hier jedenfalls der auf das Wesentliche gekürzte Quellcode, mit dem Ergebnis, dass xc.Left, .Top, .Bottom und .Right jeweils eine 0 enthalten:
Ich habe übrigens auch mehrere verschiedene Programme getestet, nicht nur das von mir fernzusteuernde sondern auch weitere wie den Windows Rechner, das Notepad und einige weitere mit demselben Ergebnis.
Ich hatte bisher noch nie das Vergnügen, eine fremde Anwendung fernsteuern zu müssen, und ich habe auch kein Problem das umzusetzen. Fast alles funktioniert auch bestens, mit einer kleinen aber wichtigen Ausnahme: um die Fensterposition einer bestimmten Anwendungsinstanz herauszufinden verwende ich GetWindowRect(), allerdings ist der Rückgabewert dabei stets 0. Mit dem korrekten Anwendungshandle kann ich die Fensterposition selbst setzen (SetWindowPos()) oder den Prozess töten (.Kill()), nur mit dem Auslesen habe ich Probleme. Ich glaube auch nicht, dass mein Code einen Fehler enthält, aber natürlich lasse ich mich gerne eines besseren belehren. Hier jedenfalls der auf das Wesentliche gekürzte Quellcode, mit dem Ergebnis, dass xc.Left, .Top, .Bottom und .Right jeweils eine 0 enthalten:
VB.NET-Quellcode
- Private Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As IntPtr, ByVal lpRect As RECT) As Integer
- Structure RECT
- Public Left As Integer
- Public Top As Integer
- Public Right As Integer
- Public Bottom As Integer
- End Structure
- Dim xapp() As Process = Process.GetProcessesByName("calc")
- Dim xc As RECT
- GetWindowRect(xapp(0).MainWindowHandle, xc)
Ich habe übrigens auch mehrere verschiedene Programme getestet, nicht nur das von mir fernzusteuernde sondern auch weitere wie den Windows Rechner, das Notepad und einige weitere mit demselben Ergebnis.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „flash“ () aus folgendem Grund: Ein Tippfehler hatte sich in den Quellcode eingeschlichen.