Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String in Fremder Anwendung finden (https://www.delphipraxis.net/193138-string-fremder-anwendung-finden.html)

jacky213 25. Jun 2017 13:57

String in Fremder Anwendung finden
 
Hallo,

ich suche nach einer Möglichkeit einen String in einer Fremden Anwendung zu suchen und auszuwählen. Ich habe es bereits hinbekommen einen ListBox Eintrag zu suchen und zu markieren aber der Code funktioniert in einem anderen bereich der selben Anwendung nicht (Könnte sein, dass es dort keine Listbox sondern eine Listview ist).

Das ist der Code der bisher mit der Listbox funktioniert hat.

Delphi-Quellcode:
Procedure TitelAusw(fname, suchstring:string);
var
  wnd: HWND;
begin
  wnd := FindWindow('TAudioManager', 'AudioManager');
  wnd := FindWindowEx(wnd, 0, 'TAlbListe', nil);
sleep(250);
if SendMessage(wnd, lb_selectstring, -1,
longint(PChar(suchstring)))<>LB_ERR then begin
SendMessage(wnd, WM_LBUTTONDOWN, -1, longint(PChar(suchstring)));
SendMessage(wnd, WM_LBUTTONUP, -1, longint(PChar(suchstring)));
end;
end;
Die Liste sieht aus wie eine Listview und der String den ich suche befindet sich in den SubItems.

Danke schonmal

himitsu 25. Jun 2017 14:18

AW: String in Fremder Anwendung finden
 
Dass dein Code überhaupt halbwegs funktioniert, ist fast schon ein Wunder, wo doch die Parameter für MSDN-Library durchsuchenWM_LBUTTONDOWN und MSDN-Library durchsuchenWM_LBUTTONUP nicht wirklich richtig sind.

Zitat:

Könnte sein, dass es dort keine Listbox sondern eine Listview ist
Dann mußt du eben auch die API für eine Listview verwenden, wenn es eine Listbox ist.

mensch72 25. Jun 2017 14:26

AW: String in Fremder Anwendung finden
 
bemühe mal die Googlesuche nach (Win)Spy...


Diese Art von Tools zeigen dir, ob es überhaupt ein auslesbares Anzeigeelement gibt.
Wenn OwnerDraw nur eine Grafik "gemalt" wirst, hast du ohne eine eigene "ScreenOCR" Logik kaum eine Möglichkeit.

Da es aber seitens WindowsSecurity eh immer schwerer wird auf fremde Fenster und deren Elemente Zugriff zu bekommen, solltest du liebe gleich den Weg per ScreenOCR gehen.

- hier mach es einer "kostenlos" per Zugriff auf eine freies MS-Interface
http://blog.m-ri.de/index.php/2010/0...omment-page-1/

-das Tool ist ein SDK und kostet Geld, funktioniert aber auf eigenen vollautomatisierteb Systemen zu 100%, wenn man ClearType abstellt
http://www.screenocrsdk.com/screen-ocr-library.htm

jacky213 25. Jun 2017 14:35

AW: String in Fremder Anwendung finden
 
danke für die Ansätze,

@himitsu

hättest du ein Beispiel dafür?

Luckie 25. Jun 2017 17:37

AW: String in Fremder Anwendung finden
 
An einen Listview in einer fremden Anwendung kommst du nicht so einfach dran, da es kein Kontrollelemente aus der 16-Bit Zeit ist.
Sehe dazu mein Programm 'LuckieDIPS': http://michael-puff.de/Programmierung/Delphi/Programme/
Letztendlich musst du Speicher im fremden Prozess reservieren mit der Listview-Strucktur, dort die Daten vom Listview reinschreiben und dann den Speicher mit der Listview-Strucktur zurück in deinen eigenen Speicherbereich kopieren. Dann hast du die Infos. Nicht unbedingt trivial.

Was hast du denn eigentlich vor?

EWeiss 25. Jun 2017 17:51

AW: String in Fremder Anwendung finden
 
Zitat:

Was hast du denn eigentlich vor?
Cheaten?

gruss

Zacherl 25. Jun 2017 18:26

AW: String in Fremder Anwendung finden
 
Zitat:

Zitat von EWeiss (Beitrag 1375317)
Zitat:

Was hast du denn eigentlich vor?
Cheaten?

Eher unwahrscheinlich, dass du eine standard Win32 ListBox in einem Game findest :D Spiele reagieren auch in der Regel nicht auf Window Messages, sondern verwenden DirectInput für die Tastatur/Maus-Eingaben.

EWeiss 25. Jun 2017 19:36

AW: String in Fremder Anwendung finden
 
Zitat:

Zitat von Zacherl (Beitrag 1375318)
Zitat:

Zitat von EWeiss (Beitrag 1375317)
Zitat:

Was hast du denn eigentlich vor?
Cheaten?

Eher unwahrscheinlich, dass du eine standard Win32 ListBox in einem Game findest :D Spiele reagieren auch in der Regel nicht auf Window Messages, sondern verwenden DirectInput für die Tastatur/Maus-Eingaben.

JO ;)
Aber man kann es ja mal versuchen. :)

gruss

jacky213 27. Jun 2017 17:14

AW: String in Fremder Anwendung finden
 
Es geht um eine Musik und Alben Verwaltung und ich bin da bis jetzt nicht weiter gekommen.

Der schöne Günther 27. Jun 2017 17:20

AW: String in Fremder Anwendung finden
 
Nimm doch erst einmal das genannte Tool "WinSpy", damit kannst du genau die Elemente deiner Ziel-Anwendung untersuchen, welchen Klassennamen das Element hat das du haben willst, ...

himitsu 27. Jun 2017 17:39

AW: String in Fremder Anwendung finden
 
Zitat:

Zitat von jacky213 (Beitrag 1375476)
Es geht um eine Musik und Alben Verwaltung und ich bin da bis jetzt nicht weiter gekommen.

Deine Anwendung oder von jemand Anderem?

Luckie 27. Jun 2017 23:13

AW: String in Fremder Anwendung finden
 
Also wenn es die eigene Anwendung ist, dann hat er da aber ziemlich was vermurkst, wenn er nur noch so an seine eigene Daten kommt. :?

jacky213 27. Jun 2017 23:54

AW: String in Fremder Anwendung finden
 
Nein es geht um ein anderes Programm (Das andere Programm ist nicht von mir)

MSpy sagt folgendes:

Delphi-Quellcode:
var
  wnd: HWND;
begin
  wnd := FindWindow('TAudioManager', 'AudioManager');
  wnd := FindWindowEx(wnd, 0, 'TMonitor', nil);

  if wnd <> 0 then
  begin

  end;
end;

himitsu 28. Jun 2017 02:34

AW: String in Fremder Anwendung finden
 
MSpy generiert nur den Code, um an das Handle des sichtbaren Controls ran zu kommen.
Was du dann mit diesem Handle machst, ist deine Sache und gehört in das letzte IF-THEN rein.

@Luckie: Drum ja dir Frage ... es hätte auch zu einfach zu lösen sein können. :stupid:
Aber natürlich könnte man auch den anderen Entwickler fragen, ob es eine Schnittstelle gibt (oder bald gibt).

jacky213 5. Jul 2017 16:28

AW: String in Fremder Anwendung finden
 
ich komm da nicht weiter und die Ansätze sind mir noch zu hoch.:pale:

Neutral General 5. Jul 2017 17:02

AW: String in Fremder Anwendung finden
 
Zitat:

Zitat von jacky213 (Beitrag 1376060)
ich komm da nicht weiter und die Ansätze sind mir noch zu hoch.:pale:

Wie Luckie schon sagte: Im Speicher des anderen Prozesses rumzufummeln ist die einzige Möglichkeit.
Das ist nicht so leicht, aber wenn du Code hast bei dem du nicht weiter kommst dann können wir bestimmt helfen.


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