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 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?

Tyrael Y. 7. Okt 2003 15:58

Re: Titel von versteckten Fenstern ermitteln
 
Zitat:

hast dus schonmal mit findwindow probiert??
ich will doch den Fenstertitel und Findwindow brauhct ein Fenstertitel

..FindWindow(Classname, WindowTitle)....


Zitat:

hast Du auch schon daran gedacht die Fenster ohne Titel mit zu berücksichtigen?
hm, ein Fenster ohne Titel nutzt mir ja nix, ich versuhc doch grad den Fenstertitel zu bekommen.
mir ist klar das es noch mehr Fenster gibt, die unter anderem keine Titel haben...
aber mit denen kann ich ja nix anfangen

SirThornberry 7. Okt 2003 16:35

Re: Titel von versteckten Fenstern ermitteln
 
du kannst findwindow auch den Klassennamen übergeben. Um den rauszubekommen gibts genug programme (mit maus drüber and klassennamen des fenster anzeigen lassen (war glaube getwindowfrompoint))

Christian Seehase 7. Okt 2003 16:54

Re: Titel von versteckten Fenstern ermitteln
 
Moin Tyrael,

sollte das Fenster keinen Titel haben, könntest Du es aber über folgenden Weg versuchen:
Passt der Klassenname?
Enthält das Fenster Unterfenster, mit denen man es eindeutig indentifizieren kann (Klasse/Titel)?

Tyrael Y. 9. Okt 2003 09:10

Re: Titel von versteckten Fenstern ermitteln
 
Morgen zusammen,
sry das ich mich nicht gemeldet habe, war aber nicht mehr online.

Zitat:

du kannst findwindow auch den Klassennamen übergeben. Um den rauszubekommen gibts genug programme (mit maus drüber and klassennamen des fenster anzeigen lassen (war glaube getwindowfrompoint))
Kannst du mir einen Link zu solch einem Programm geben?


Zitat:

sollte das Fenster keinen Titel haben, könntest Du es aber über folgenden Weg versuchen:
Passt der Klassenname?
Enthält das Fenster Unterfenster, mit denen man es eindeutig indentifizieren kann (Klasse/Titel)?
Ok werde ich gleich mal testen.


Grüße Tyrael

Motzi 9. Okt 2003 09:28

Re: Titel von versteckten Fenstern ermitteln
 
Zitat:

Zitat von Tyrael Y.
Zitat:

du kannst findwindow auch den Klassennamen übergeben. Um den rauszubekommen gibts genug programme (mit maus drüber and klassennamen des fenster anzeigen lassen (war glaube getwindowfrompoint))
Kannst du mir einen Link zu solch einem Programm geben?

Spy++, gibts aber erst ab der Prof Version des Visual Studios...
Alternativ gibt es aber auch noch genug andere Programme zB EDA von Assarbad oder mein X-Spy...

Tyrael Y. 9. Okt 2003 09:54

Re: Titel von versteckten Fenstern ermitteln
 
Zitat:

Alternativ gibt es aber auch noch genug andere Programme zB EDA von Assarbad oder mein X-Spy...
ich habe grad das Tool von assarbad runtergeladen, leider funtioniert es nicht unter Win95/98,
weil ich auf diesen Betriebssystemen gucken müsste wie der Klasenname ist, da das Program
unter Win NT Systemen anders heißt und reagiert.

und außerdem.. das für mich interessante Program ist im SysTray und Assarbads Program, kann nciht jedes
Program im Systray einzeln ansprechen sondern immer den gesamten Systray

ich such jetzt mal nach X-Spy

Gruß Tyrael

Tyrael Y. 9. Okt 2003 09:57

Re: Titel von versteckten Fenstern ermitteln
 
@Motzi ähm X-Spy gibt es unter Google 10000000000000000000000 Stück

könntest du den Link zu dem X-Spy posten, das du meinst?

Tyrael Y. 9. Okt 2003 09:59

Re: Titel von versteckten Fenstern ermitteln
 
habs gefunden :)

Motzi 9. Okt 2003 10:20

Re: Titel von versteckten Fenstern ermitteln
 
Also wenn du nach "X-Spy" suchst bin ich in Google ganz oben, und außerdem hättest du bei meinem Post nur mal unten auf die kleine Grafik mit dem "www" (dahinter verbirgt sich meistens eine Homepage ;)) klicken müssen, dann wärst du sofort auf der X-Spy Seite gewesen! ;)

Dass das Programm von Assarbad immer nur den gesamten SysTray erfasst ist richtig, und das kann mein X-Spy auch nicht besser, da der SysTray eben nur _ein_ einziges Fenster ist das eben mehrere Symbole beinhaltet!

Aber du kannst im X-Spy das Fenster auch in der Prozess-Liste raussuchen, vielleicht hilft dir das ein bisschen...

Tyrael Y. 9. Okt 2003 10:30

Re: Titel von versteckten Fenstern ermitteln
 
@Motzi dein Tool ist super :hello:
habe jetzt den Klassennamen


danke dir nochmal

Gruß Tyrael

The-X 18. Feb 2004 17:12

Re: Titel von versteckten Fenstern ermitteln
 
Mit WinForce von www.donutstudios.de hätt's auch funktioniert, da werden alle Programme mitsamt ihren Fenstern aufgelistet (im Treeview) ... kann ich nur empfehlen, zumal es noch vieeele andere Funktionen beinhaltet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:34 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