AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem mit FindWindowEx - Klasse #32770 macht Probleme
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit FindWindowEx - Klasse #32770 macht Probleme

Ein Thema von Totti · begonnen am 1. Dez 2004 · letzter Beitrag vom 1. Dez 2004
 
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Problem mit FindWindowEx - Klasse #32770 macht Probleme

  Alt 1. Dez 2004, 18:19
Man kann bei FindWindowEx aber auch einfach 0 als Handle für das Parent-Fenster angeben, dann verhält sich FindWindowEx genauso wie FindWindow.. falls du trotzdem noch Probleme haben solltest probiers mal mit der Ersatz-Funktion die ich mir gebastelt hab - FindWindow(Ex) ermitteln den Window-Text nämlich per GetWindowText und das kann Probleme geben.. (siehe PSDK)

Delphi-Quellcode:
function XSpy_FindWindowEx(WndParent: HWND; WndChildAfter: HWND;
  lpszClass: PChar; lpszWindow: PChar): HWND;

type
  TEnumWndRec = record
    lpszClass: PChar;
    lpszWindow: PChar;
    Wnd: HWND;
    WndParent: HWND;
    WndChildAfter: HWND;
    bChildFound: Boolean;
  end;

var
  aEnumWndRec: TEnumWndRec;

  function GetClassName(Wnd: HWND): String;
  var
    szBuffer: array [0..255] of Char;
  begin
    ZeroMemory(@szBuffer, SizeOf(szBuffer));
    Windows.GetClassName(Wnd, szBuffer, SizeOf(szBuffer));
    Result := String(szBuffer);
  end;

  function GetWindowText(Wnd: HWND): String;
  var
    dwResult: DWord;
    pBuffer: PChar;
  begin
    dwResult := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0) + 1;
    pBuffer := GetMemory(dwResult);
    try
      SendMessage(Wnd, WM_GETTEXT, dwResult, Integer(pBuffer));
      Result := String(pBuffer);
    finally
      FreeMemory(pBuffer);
    end;
  end;

  function EnumCallBack(Window: HWND; var aRec: TEnumWndRec): Boolean; stdcall;
  var
    bMatches: Boolean;
  begin
    Result := True;

    if (aRec.WndParent <> 0) and
      (aRec.WndParent <> GetAncestor(Window, GA_PARENT)) then
      Exit;
      
    if (aRec.WndChildAfter <> 0) and not aRec.bChildFound then
    begin
      aRec.bChildFound := aRec.WndChildAfter = Window;
      Exit;
    end;

    bMatches := True;
    if Assigned(aRec.lpszClass) then
      bMatches := String(aRec.lpszClass) = GetClassName(Window);

    if bMatches and Assigned(aRec.lpszWindow) then
      bMatches := String(aRec.lpszWindow) = GetWindowText(Window);

    if bMatches then
    begin
      aRec.Wnd := Window;
      Result := False;
    end;
  end;

begin
  Result := 0;
  if (WndParent <> 0) and not IsWindow(WndParent) then
    Exit;

  aEnumWndRec.lpszClass := lpszClass;
  aEnumWndRec.lpszWindow := lpszWindow;
  aEnumWndRec.Wnd := 0;
  aEnumWndRec.WndParent := WndParent;
  aEnumWndRec.WndChildAfter := WndChildAfter;
  aEnumWndRec.bChildFound := False;
  if WndParent = 0 then
    EnumWindows(@EnumCallBack, Integer(@aEnumWndRec))
  else
    EnumChildWindows(WndParent, @EnumCallBack, Integer(@aEnumWndRec));

  Result := aEnumWndRec.Wnd;
end;
Manuel Pöter
  Mit Zitat antworten Zitat
 


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 10:44 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