![]() |
Vom Hauptprogramm aus handle zu neu geöffnetem Fenster
Hallo,
also ich bin jetzt schon ne ganze Zeit lang am probieren, aber irgendwie klappt das nicht ganz. Ich besorge mir den Handle von meinem Hauptprogramm folgend:
Delphi-Quellcode:
Nun habe ich den handle zum Hauptprogramm. Das Hauptprogramm öffnet nun ein komplett neues Fenster.
procedure TForm1.Button1Click(Sender: TObject);
var myHandle : hwnd; begin myHandle := FindWindowByTitle('Programm xy'); end; function FindWindowByTitle(WindowTitle: string): HWND; var NextHandle: HWND; NextTitle: array[0..260] of char; begin //Get the first window NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); while NextHandle > 0 do begin // retrieve its text GetWindowText(NextHandle,NextTitle, 255); if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then begin Result := NextHandle; Exit; end else // Get the next window NextHandle := GetWindow(Nexthandle, GW_HWNDNEXT); end; Result := 0; end; So wie ich das gesehen habe ist dies nicht bei den ChildWindows vom Hauptprogramm aufgeführt. Ich bin mir da nicht sicher, aber viell. sind beide in einem Thread. Ich wollte nachschauen. Aber ein
Delphi-Quellcode:
scheitert daran das GetDlgCtrlID immer 0 zurück gibt.
EnumThreadWindows(GetDlgCtrlID(myHandle), @EnumerateThreadWindows, 0)
Nun hoffe ich doch ganz stark das mir jemand sagen kann wie ich mir die Handle aller neu geöffneten (es können auch mehrere Fenster sein) Fenster des Hauptprogramms besorgen kann. Danke schonmal. Robert |
Re: Vom Hauptprogramm aus handle zu neu geöffnetem Fenster
Hi,
du hast doch einfach nur Childwindows erstellt und geöffnet? Das sind doch (imho) keine Dialoge. Hast du mal getWindow(DEIN_PARENT_HANDLE, GW_CHILD) versucht? Ungetesteter Weise würde ich sagen kommt das dem was du suchst sehr nahe. Gruß Der Unwissende |
Re: Vom Hauptprogramm aus handle zu neu geöffnetem Fenster
Also, ich habe das jetzt mal folgend getestet
Delphi-Quellcode:
Wenn kein Fenster geöffnet ist bekomme ich folgendes ausgegeben
childHandle := getWindow(myHandle, GW_CHILD);
GetClassName(childHandle, buf, Sizeof(buf)-1); SendMessage(childHandle, WM_GETTEXT, 256, Integer(@Caption)); ListBox2.Items.Add(Format('ID: %d, ClassName: %s, Caption: %s', [GetDlgCtrlID(childHandle), buf, Caption])); Zitat:
Zitat:
Nun habe ich mal zum weiteren überprüfen
Delphi-Quellcode:
probiert, es hat sich jedoch nichts getan - also is da noch irgendwas faul.
ShowWindow(childHandle, SW_SHOW);
Weiß noch jemand Rat? |
Re: Vom Hauptprogramm aus handle zu neu geöffnetem Fenster
Ich habe mir jetzt noch folgend alle Top-Level Fenster angesehen:
Delphi-Quellcode:
Hier wird sowohl das Hauptfenster als auch die neu geöffneten Fenster angezeigt.
EnumWindows(@EnumWindowsProc,Integer(ListBox1));
... function EnumWindowsProc(wHandle: HWND; lb: TListBox): Bool; stdcall; export; var Title, ClassName: array[0..255] of char; begin Result := True; GetWindowText(wHandle, Title, 255); GetClassName(wHandle, ClassName, 255); if IsWindowVisible(wHandle) then lb.Items.Add(string(Title) + '-' + string(ClassName)); end; Beide besitzen den ClassName #32770 Jedoch habe ich ja, wie im Post zuvor bereits geschrieben, als mit getWindow ein Handle mit dem ClassName Shell Embedding zurück bekommen. Also kann das wohl nicht das neue Fenster sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz