AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Vom Hauptprogramm aus handle zu neu geöffnetem Fenster
Thema durchsuchen
Ansicht
Themen-Optionen

Vom Hauptprogramm aus handle zu neu geöffnetem Fenster

Ein Thema von robert23 · begonnen am 16. Aug 2006 · letzter Beitrag vom 16. Aug 2006
Antwort Antwort
robert23

Registriert seit: 16. Aug 2006
20 Beiträge
 
#1

Vom Hauptprogramm aus handle zu neu geöffnetem Fenster

  Alt 16. Aug 2006, 17:38
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
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
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Vom Hauptprogramm aus handle zu neu geöffnetem Fenster

  Alt 16. Aug 2006, 17:47
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
  Mit Zitat antworten Zitat
robert23

Registriert seit: 16. Aug 2006
20 Beiträge
 
#3

Re: Vom Hauptprogramm aus handle zu neu geöffnetem Fenster

  Alt 16. Aug 2006, 19:05
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
ShowWindow(childHandle, SW_SHOW); probiert, es hat sich jedoch nichts getan - also is da noch irgendwas faul.

Weiß noch jemand Rat?
  Mit Zitat antworten Zitat
robert23

Registriert seit: 16. Aug 2006
20 Beiträge
 
#4

Re: Vom Hauptprogramm aus handle zu neu geöffnetem Fenster

  Alt 16. Aug 2006, 19:41
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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