Probleme mit SetWindowPos
-
MoveWindow oder SetWindowPlacement produzieren das selbe Ergebnis. Findwindow liefert mir aber ein gültiges Handle, das sollte doch stimmen, oder?
-
Dann kann es nur am Handle liegen.
-
dann hast du wohl ein fensterchen, dass auf sehr unkonventionelle weise seinen inhalt malt

-
Ich habe ja nicht gesagt das das Handle ungültig ist, sondern es auf ein anderes Fenster zeigt.
Welches Programm willst du denn steueren?
-
Hm irgendwie scheint doch das Handle falsch zu sein, denn GetWindowPlacement liefert ungültige Werte.
-
Nimm mal das Programm:
http://assarbad.net/stuff/eda_preview270.exe
Um dich über das Fenster zu informieren.
-
Erstaunlicherweise kann man das MSM-Fenster auf die Art verschieben lassen, beim BCB oder der Anwendung selbt geht das nicht. Liegt das an gewissen Fenstereigenschaften?
-
Kannst du mal eine Anwendung hochladen, wo sich das Fenster nicht in der Position ändern lässt?
-
So, Test-Anwendung liegt bei: WindowInfo.
Wenn man zum Beispiel das Fenster von WindowInfo selbst auswählt wird von FindWindow ein anderes handle zurückgegeben als von dem eda-preview-tool.

-
Ok. Ich weis jetzt wo der Hund begraben liegt. Der Anwendungsname in der Taskbar und die Fenster-Caption müssen gleich sein.
Meine TestAnwendung hat als Namen in der Taskbar "Window Killer" stehen, das Formular selbst heißt aber "Test". Meine CallBackFunktion zum Enumerieren der Fenster liefert nicht die Caption des Hauptfensters sondern den Anwendungsnamen zurück:
BOOL CALLBACK EnumWindowsProc (HWND hwnd, LPARAM lParam) { WINDOWPLACEMENT wp; char Caption[255]; if(!GetWindow(hwnd, GW_OWNER) && IsWindowVisible(hwnd)) { GetWindowText(hwnd, Caption, 255); GetWindowPlacement(hwnd, &wp); if (wp.showCmd != SW_HIDE && strcmp("", Caption) != 0) { frmMain->lbGetWindows->Items->Add(Caption); } } return true; }Klar, dass dann aufgrund des falschen Namens in der Listbox ein inkorrektes handle erzeugt wird.
Trotzdem danke an alle, die sich wegen mir eine Birne gemacht haben.