AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

X-Spy

Ein Thema von Motzi · begonnen am 27. Sep 2002 · letzter Beitrag vom 5. Mai 2008
Antwort Antwort
Seite 6 von 8   « Erste     456 78      
Benutzerbild von Motzi
Motzi
Registriert seit: 6. Aug 2002
X-Spy ist ein Projekt, das sich zum Ziel gesetzt hat, die Programme Spy++ [Microsoft] und Winsight [Borland] in Möglichkeiten und Detailreichtum noch zu übertreffen!

Für Leute die sich beim Testen aktiv bewähren ist immer ein Platz im About-Fenster frei!

Weitere Infos gibt es hier: http://www.x-spy.net/
und der direkte Download-Link ist hier: Download

[edit=Sakura]Downloadlink korrigiert[/edit]
 
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#51
  Alt 25. Nov 2004, 18:07
Hi motzi

Habe gerade ein kleines Problem beim "Create FindWindow-Code" entdeckt.
Wenn der Titel/Text ein ' enthält, wird der FindWindow Code nicht richtig erstellt.
Es müsste also 2 '' haben.

Zitat:
var
wnd: HWND;
begin
wnd := FindWindow('MozillaWindowClass', 'Torry's Delphi Pages - Mozilla Firefox');

if wnd <> 0 then
begin

end;
end;
Dann eine andere Frage:

Beim Starten kommmt folgende Meldung:

Zitat:
Couldn't enable Debug-Privilege! Some informations won't be available!
Welche Infos betrifft das?

mfg
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#52
  Alt 25. Nov 2004, 19:04
Zitat von toms:
Habe gerade ein kleines Problem beim "Create FindWindow-Code" entdeckt.
Wenn der Titel/Text ein ' enthält, wird der FindWindow Code nicht richtig erstellt.
Es müsste also 2 '' haben.

Zitat:
var
wnd: HWND;
begin
wnd := FindWindow('MozillaWindowClass', 'Torry's Delphi Pages - Mozilla Firefox');

if wnd <> 0 then
begin

end;
end;
Stimmt, das hab ich nicht beachtet.. Danke, wird sofort ausgebesser!

Zitat:
Dann eine andere Frage:

Beim Starten kommmt folgende Meldung:

Zitat:
Couldn't enable Debug-Privilege! Some informations won't be available!
Welche Infos betrifft das?

mfg
Betrifft hauptsächlich Infos über Prozesse und Threads die nicht im Security-Kontext des jeweiligen Users laufen (zB Services). Infos die nicht ermittelt werden können werden immer als "(Unavailable)" dargestellt.

Als Admin solltest du aber das Debug-Privilege haben, aber falls du eben nicht mit dem Admin-Konto arbeitest kannst du über die Lokale Sicherheitsrichtlinie einstellen welche User das Debug-Privileg haben.

Das "Problem" mit dem Debug-Privilege wird aber irgendwann (in wahrscheinlich etwas fernerer Zukunft) ein Ende haben, da ich schon seit längerem ein neues Konzept plane, die Umsetzung wird nur leider doch noch etwas länger dauern..!
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#53
  Alt 25. Nov 2004, 19:14
Zitat:
Das "Problem" mit dem Debug-Privilege wird aber irgendwann (in wahrscheinlich etwas fernerer Zukunft) ein Ende haben, da ich schon seit längerem ein neues Konzept plane, die Umsetzung wird nur leider doch noch etwas länger dauern..!
Ok, bin gespannt darauf...
Dennoch sollte jetzt die "No Debug-Privilege" Meldung nicht bei jedem Start kommen, denn
nach der 1. Meldung weiss man's...

Habe noch einen weiteren Fehler im FindWindow Code gefunden:

Fensterstruktur:

Delphi-Quellcode:
1770508: TAppBuilder "Delphi 6 - Project1"
  1967222: TControlBar
    1311916: TDockToolBar "Standard"
Generierter FindWindow Code von XSpy:

Delphi-Quellcode:
var
  wnd: HWND;
begin
  wnd := FindWindow('TAppBuilder', 'Delphi 6 - Project1');
  wnd := FindWindowEx(wnd, 0, 'TControlBar', nil);
  wnd := FindWindowEx(wnd, 0, 'TDockToolBar', 'Standard');

  if wnd <> 0 then
  begin

  end;
end;
TDockToolBar wird nicht gefunden, warum?

Die Antwort auf die Frage überlasse ich dir...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#54
  Alt 25. Nov 2004, 23:05
Zitat von toms:
Ok, bin gespannt darauf...
Das ganze läuft dann über einen COM-Server.. dauert aber wie gesagt sicher noch länger..!

Zitat:
Dennoch sollte jetzt die "No Debug-Privilege" Meldung nicht bei jedem Start kommen, denn
nach der 1. Meldung weiss man's...
Ja, ich hab mir schon gedacht, dass ich eine Checkbox "Don't show this message again" einbau...

Zitat:
Habe noch einen weiteren Fehler im FindWindow Code gefunden:

Fensterstruktur:

Delphi-Quellcode:
1770508: TAppBuilder "Delphi 6 - Project1"
  1967222: TControlBar
    1311916: TDockToolBar "Standard"
Generierter FindWindow Code von XSpy:

Delphi-Quellcode:
var
  wnd: HWND;
begin
  wnd := FindWindow('TAppBuilder', 'Delphi 6 - Project1');
  wnd := FindWindowEx(wnd, 0, 'TControlBar', nil);
  wnd := FindWindowEx(wnd, 0, 'TDockToolBar', 'Standard');

  if wnd <> 0 then
  begin

  end;
end;
TDockToolBar wird nicht gefunden, warum?

Die Antwort auf die Frage überlasse ich dir...
Hab mal bisschen rumprobiert und festgestellt, dass das an den FindWindow(Ex)-APIs liegt.. hab mir jetzt mal meinen eigenen Ersatz geschrieben, mit dem gehts:
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;
PS: ich hab mal geschaut was dein WinSpy für einen Code für genau dieses Fenster produziert... der generierte Code findet zwar ein Fenster, aber das falsche..! Das gesuchte Fenster hat ChildNr 6 statt 5...
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#55
  Alt 26. Nov 2004, 05:41
Zitat von Motzi:
PS: ich hab mal geschaut was dein WinSpy für einen Code für genau dieses Fenster produziert... der generierte Code findet zwar ein Fenster, aber das falsche..! Wink Das gesuchte Fenster hat ChildNr 6 statt 5...
Oops, da muss ich wohl auch nochmals hinter die Bücher, äh den Code...

Zitat:
Hab mal bisschen rumprobiert und festgestellt, dass das an den FindWindow(Ex)-APIs liegt.. hab mir jetzt mal meinen eigenen Ersatz geschrieben, mit dem gehts:
Genau. Der FindWindowEx() Funktion sollte für lpszWindow nil übergeben, wenn sie
Childfenster in einem anderen Prozess (ausser explorer.exe) sucht.

Grund: FindWindowEx vergleicht bei Angabge von lpszWindow die Übereinstimmung des FensterNamens (lpszWindow) mittels GetWindowText, welche aber nicht zuverlässig ChildFenster Text in einem anderen Prozess ermitteln kann

Zu deiner "XSpy_FindWindowEx" Funktion:

Funktioniert so wohl sicher aber es man könnte es auch nur mit FindWindowEx() lösen, dann wäre der Source Code nur ein paar Zeilen lang.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#56
  Alt 26. Nov 2004, 10:48
Zitat von toms:
Genau. Der FindWindowEx() Funktion sollte für lpszWindow nil übergeben, wenn sie
Childfenster in einem anderen Prozess (ausser explorer.exe) sucht.

Grund: FindWindowEx vergleicht bei Angabge von lpszWindow die Übereinstimmung des FensterNamens (lpszWindow) mittels GetWindowText, welche aber nicht zuverlässig ChildFenster Text in einem anderen Prozess ermitteln kann
Genau genommen nicht nur FindWindowEx, sondern auch FindWindow:
Zitat von PSDK:
If the lpWindowName parameter is not NULL, FindWindow calls the GetWindowText function to retrieve the window name for comparison. For a description of a potential problem that can arise, see the Remarks for GetWindowText.
Daher werd ich wohl bei meinem FindWindow(Ex)-Ersatz bleiben, auch wenn der Code dadurch länger wird..
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#57
  Alt 1. Dez 2004, 23:38
Neue Release v0.6.5.215

Änderungen:
  • ein paar Window-Informationen hinzugefügt (Icons, Window Properties)
  • einige Prozess-Informationen hinzugefügt (Service-Liste)
  • Hot-Key-Unterstützung für Window-Finder-Tool
  • einige Bugs und Speicher-Lecks gefixt
  • ein paar Kleinigkeiten geändert/hinzugefügt
Download: klick


Und nachdem mehrmals die Frage aufgetaucht ist - Was ist X-Spy - hier jetzt mal eine Erklärung

X-Spy ist ein Projekt, das sich zum Ziel gesetzt hat, die Programme Spy++ [Microsoft] und Winsight [Borland] in Möglichkeiten und Detailreichtum noch zu übertreffen!

Für alle die diese beiden Programme nicht kennen - mit ihnen ist es möglich alle Fenster des Systems hierachisch mitsamt ihren Child-Fenstern aufzulisten und umfangreiche Informationen wie Handle, Text, Klassenname, etc. jedes einzelnen Fensters zu bekommen. Weiters kann man mit dem X-Spy alle Prozesse mit ihren abgespalteten Threads und den darin erzeugten Fenstern auflisten. Ebenso gibt es eine reine Thread-Liste, eine Modul-Liste mit allen im System geladenen Modulen und eine Service-Liste. Zu jedem Objekt-Art (Fenster, Prozess, Thread, Modul, Service) kann man sich umfangreiche Informationen anzeigen lassen - man erhält also einen recht guten Überblick was sich im System so alles tut.

Und für alle die gerne fremde Steuerelemente manipulieren kann man sich für jedes beliebige Fenster den FindWindow-Code generieren lassen (dieses Feature ist leider noch nicht 100%ig ausgereift).

Bitte um Feedback!!
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#58
  Alt 6. Dez 2004, 10:11
*push*

Kommt schon Leute, gibt es denn wirklich keinen den das Prog interessiert? Auch Leute die von älteren verbuggten Versionen entsetzt waren könnten sich ruhig mal an die neue Version rantrauen - es hat sich einiges getan..!

Ich will doch nur ein bisschen Feedback - ihr seid doch sicher auch froh wenn sich jemand eure Progs anschaut!
Manuel Pöter
  Mit Zitat antworten Zitat
perle

 
Delphi 7 Enterprise
 
#59
  Alt 6. Dez 2004, 10:58
also ich fand die Alte Version schon nicht schlecht, ich guck mir mal die neue an jetz

  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#60
  Alt 6. Dez 2004, 11:48
Hi Motzi,

hab mir die Version mal angeschaut und habe 2 kleine Bugs gefunden
  • Man kann ein Fenster in das X-Spy Fenster reinschieben (das ist nicht gewollt oder?) [s. Anhang]
  • Wenn ich auf der Taskleiste rechtsklicke und "Desktop anzeigen" wähle verschwindet das X-Spy Fenster und tauch nicht von alleine wieder auf, aber der Platz oben bleibt besetzt (Man muss im Taskleistenmenü "Alle geöffneten Fenster anzeigen" wählen, um das X-Spy Fenster wieder anzuzeigen.

Ansonsten wirklich ein super Programm

mfG
mirage228
Miniaturansicht angehängter Grafiken
xspy_ueberlappend.jpg  
David F.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 8   « Erste     456 78      


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 03:56 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