Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Vom Hauptprogramm aus handle zu neu geöffnetem Fenster (https://www.delphipraxis.net/75255-vom-hauptprogramm-aus-handle-zu-neu-geoeffnetem-fenster.html)

robert23 16. Aug 2006 17:38


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:
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;
Nun habe ich den handle zum Hauptprogramm. Das Hauptprogramm öffnet nun ein komplett neues Fenster.
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:
EnumThreadWindows(GetDlgCtrlID(myHandle), @EnumerateThreadWindows, 0)
scheitert daran das GetDlgCtrlID immer 0 zurück gibt.

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

Der_Unwissende 16. Aug 2006 17:47

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

robert23 16. Aug 2006 19:05

Re: Vom Hauptprogramm aus handle zu neu geöffnetem Fenster
 
Also, ich habe das jetzt mal folgend getestet
Delphi-Quellcode:
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]));
Wenn kein Fenster geöffnet ist bekomme ich folgendes ausgegeben
Zitat:

ID: 0,ClassName: ShellEmbedding, Caption:
Mit geöffnetem Fenster folgendes
Zitat:

ID: 720,ClassName: Static, Caption:
Da Frage ich mich schon als erstes warum keine Caption angezeigt wird.
Nun habe ich mal zum weiteren überprüfen
Delphi-Quellcode:
ShowWindow(childHandle, SW_SHOW);
probiert, es hat sich jedoch nichts getan - also is da noch irgendwas faul.

Weiß noch jemand Rat?

robert23 16. Aug 2006 19:41

Re: Vom Hauptprogramm aus handle zu neu geöffnetem Fenster
 
Ich habe mir jetzt noch folgend alle Top-Level Fenster angesehen:
Delphi-Quellcode:
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;
Hier wird sowohl das Hauptfenster als auch die neu geöffneten Fenster angezeigt.
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 08:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz