Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Titel von versteckten Fenstern ermitteln (https://www.delphipraxis.net/9902-titel-von-versteckten-fenstern-ermitteln.html)

Tyrael Y. 7. Okt 2003 13:24


Titel von versteckten Fenstern ermitteln
 
Hallo zusammen,

wie kann man die Fenstertitel von versteckten Fenstern rausfinden?

EnumWindows liefert leider nicht alle Fenstertitel.


Grüße Tyrael

Christian Seehase 7. Okt 2003 13:28

Re: Titel von versteckten Fenstern ermitteln
 
Moin Tyrael,

Zitat:

Zitat von Tyrael Y.
EnumWindows liefert leider nicht alle Fenstertitel.

:shock:

Kannst Du mal genauer angeben welche fehlen, bzw. wie Du die suchst?

Tyrael Y. 7. Okt 2003 13:35

Re: Titel von versteckten Fenstern ermitteln
 
also das hier ist ein Testprojekt und leifert leider
nicht alle Fenstertitel

Code:
program wndTitle;
uses
  windows, sysutils;

var
  s, ctext, cctext: string;
{$APPTYPE CONSOLE}


function myEnumcChildWindows(ccHWnd: HWnd; ccLParam:integer): BOOL; stdcall;
var
  ccl, ccln : integer;
  ccClass:String;
begin
  ccl := GetWindowTextLength(ccHwnd);
  if (ccl > 0) then
  begin
    SetLength(cctext, ccl+1);
    GetWindowText(ccHwnd, PChar(cctext), ccl+1);
    SetLength(ccClass, 1025);
    ccln := GetClassName(ccHwnd, PChar(ccClass), 1024);
    Setlength(ccClass, ccln);

    writeln('--------------------------------------------');
    writeln('cChildTitle: ' +ccText);
    writeln('cChildHandle: ' + IntToStr(ccHwnd));
    writeln('cChildClassname: ' + ccClass);
    writeln('--------------------------------------------');
    Readln;
  end;
  result := true;
end;



function myEnumChildWindows(cHWnd: HWnd; cLParam:integer): BOOL; stdcall;
var
  cl, cln : integer;
  cClass:String;
begin
  cl := GetWindowTextLength(cHwnd);
  if (cl > 0) then
  begin
    SetLength(ctext, cl+1);
    GetWindowText(cHwnd, PChar(ctext), cl+1);
    SetLength(cClass, 1025);
    cln := GetClassName(cHwnd, PChar(cClass), 1024);
    Setlength(cClass, cln);

    writeln('--------------------------------------------');
    writeln('ChildTitle: ' +cText);
    writeln('ChildHandle: ' + IntToStr(cHwnd));
    writeln('ChildClassname: ' + cClass);
    writeln('--------------------------------------------');

    EnumChildWindows(cHwnd, @myEnumcChildWindows, 0);
    Readln;
  end;
  result := true;
end;

function myEnumProc(aHWnd: HWnd; aLParam: integer): BOOL; stdcall;
var
  tl, aln: integer;
  aClass:string;
begin

  tl := GetWindowTextLength(aHWnd);
  if (tl > 0) then
  begin
    //für Fenster
    SetLength(s, tl+1);
    GetWindowText(aHWnd, PChar(s), tl+1);
    SetLength(aClass, 1025);
    aln := GetClassName(aHwnd, PChar(aClass), 1024);
    Setlength(aClass,aln);




    writeln('Title: ' +s);
    writeln('Handle: ' + IntToStr(aHwnd));
    writeln('Classname: ' + aClass);

    EnumChildWindows(aHWnd, @myEnumChildWindows, 0);

   
    writeln('*************************************************');
    writeln('*************************************************');
    readln;
  end;
  result := true; // To continue enumeration.
end;

begin
  EnumWindows(@myEnumProc, 0);
end.

Tyrael Y. 7. Okt 2003 13:45

Re: Titel von versteckten Fenstern ermitteln
 
also letztendlich geht es mir darum ein ganz bsetimmtes Program
unter Win95/98 zu beenden,...

...jetzt sagt ja nicht TerminateProcess, das klappt nämlich nicht


... ich mach mal einen neuen Thread auf und erklär da was ich ganz genau
möchte und um welches Programm es sich handelt

Christian Seehase 7. Okt 2003 13:49

Re: Titel von versteckten Fenstern ermitteln
 
Moin Tyrael,

GetWindowText und GetWindowTextLength solltest Du mal gegen SendMessage mit WM_GETTEXT, WM_GETTEXTLENGTH austauschen.
Z.B. mit
Delphi-Quellcode:
if (tl > 0) then
lässt Du schon mal alle Fenster samt deren Unterfenster aus, die keine Caption haben.

Nur um auf Nummer sicher zu gehen, würde ich übrigens hier auch keine Strings, sondern PChar verwenden, die dann mittels AllocMem initialisiert, und später mit FreeMem wieder freigegeben werden.
AllocMem, da hier der reservierte Speicher auf #00 initialisiert wird.

Tyrael Y. 7. Okt 2003 14:17

Re: Titel von versteckten Fenstern ermitteln
 
ich wollte das mal probieren, aber wieso will er

Code:
SendMessage(ccHwnd, WM_GETTEXT, ccl+1, PChar(ccText));
nicht

,obwohl WM_Gettext in wParam einen int und in lParam ne Adresse erwartet ??

Code:
WM_GETTEXT
wParam = (WPARAM) cchTextMax;  // number of characters to copy
lParam = (LPARAM) lpszText;    // address of buffer for text

Christian Seehase 7. Okt 2003 14:28

Re: Titel von versteckten Fenstern ermitteln
 
Moin Tyrael,

Du musst aus dem PChar ein lParam machen

Delphi-Quellcode:
lParam(PChar(...))

Tyrael Y. 7. Okt 2003 15:04

Re: Titel von versteckten Fenstern ermitteln
 
ich kriege jetzt wesenntlich mehr Fenstertitel, aber das Fenster, das ich suche ist nicht
dabei :(

SirThornberry 7. Okt 2003 15:05

Re: Titel von versteckten Fenstern ermitteln
 
hast dus schonmal mit findwindow probiert??

Christian Seehase 7. Okt 2003 15:27

Re: Titel von versteckten Fenstern ermitteln
 
Moin Tyrael,

hast Du auch schon daran gedacht die Fenster ohne Titel mit zu berücksichtigen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 Uhr.
Seite 1 von 3  1 23      

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