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 Menüeinträge "virtuell" anklicken (https://www.delphipraxis.net/27752-menueeintraege-virtuell-anklicken.html)

MaOfDe 15. Aug 2004 12:24


Menüeinträge "virtuell" anklicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Alo und salut!
Hab grad ein Programm geschrieben, das das Hauptmenü eines ausgewählten Fensters auflistet.
Die Idee dahinter ist sone Art Videorecorder für WinTV2000, sodass man nur Ort und Zeit eingeben müsste, und das eigene Programm automatisch auf die entsprechenden Menüeinträge "Start Recording" und "Stop Recording" klickt.
Leider fehlt mir zurzeit noch das Know-How dazu, auf einen Menüeintrag per SendMessage zu klicken . Zudem wär es auch nützlich, wie man auch die ganzen andren in der Anwendung herumschwirrenden PopUpMenus auflisten kann.
Kennt sich jemand von euch aus?!

c113plpbr 15. Aug 2004 12:28

Re: Menüeinträge "virtuell" anklicken
 
Zitat:

Zitat von MaOfDe
Leider fehlt mir zurzeit noch das Know-How dazu, auf einen Menüeintrag per SendMessage zu klicken.

guggst du hier ... hatt ich grad offen, aber die suche hilft sonst immer ... ^^

ciao, Philipp

MaOfDe 15. Aug 2004 12:47

Re: Menüeinträge "virtuell" anklicken
 
THANX!!!
Scheint zu funktionieren :-D .
Jetzt steht nur noch offen, wie ich PopUpMenus aufliste... *ausprobier**tüfftel**tüfftel*

c113plpbr 15. Aug 2004 13:01

Re: Menüeinträge "virtuell" anklicken
 
Zitat:

Zitat von MaOfDe
Jetzt steht nur noch offen, wie ich PopUpMenus aufliste ...

Warscheinlich garnicht, da sie nicht dauerhaft vorhanden sind. Es gibt allerdings eine methode den aufruf eines popupenmenüs abzufangen, ist aber recht kompliziert.

ciao, Philipp

MaOfDe 15. Aug 2004 21:15

Re: Menüeinträge "virtuell" anklicken
 
Zitat:

Warscheinlich garnicht, da sie nicht dauerhaft vorhanden sind. Es gibt allerdings eine methode den aufruf eines popupenmenüs abzufangen, ist aber recht kompliziert.
Wer wird denn hier gleich pessimistisch?! Wieso kompliziert?! Wenn's ne Methode gibt, immer raus damit! Das ich jetzt etwas von der Existenz einer solchen Methode Kenntnis genommen habe, bringt mich nicht wirklich weiter, ich brauch was konkretes :wink: .

c113plpbr 15. Aug 2004 21:22

Re: Menüeinträge "virtuell" anklicken
 
Ich weis nicht wie oft ich diese 3 worte heut noch in den mund nehmen will, aber egal: API/Function Hooking. Du kannst theoretisch jedes popupmenü über z.B. TrackPopupMenü (bzw. die -Ex version) abfangen. Da kannst du dann feststellen was sich im menü befindet, aber dazu musst du es erst einmal von hand aufrufen ...

Gemacht habe ich das z.B. in meinem projekt inettime, dass ich hier in der dp gepostet hab.

Diese Methode ist für dein Problem allerdings nicht gerade die beste Lösung.

Eine weitere Methode wäre z.B. die exedatei wie mit dem ResourceHacker auseinanderzunehmen, und versuchen so die menüs zu finden, was allerdings noch komplizierter und warscheinlich weniger effektiv wäre ...

ciao, Philipp

MaOfDe 16. Aug 2004 20:47

Re: Menüeinträge "virtuell" anklicken
 
Ich werd' mal sehen, was sich mit diesem Wissen anfangen lässt.
Den ResHacker hab ich schon vorher benutzt... allerdings fehlt genau das Untermenu was ich brauche, was heißt, dass einige Einträge erst zur Laufzeit erzeugt werden :( .

c113plpbr 16. Aug 2004 20:52

Re: Menüeinträge "virtuell" anklicken
 
Wie gesagt, die einzig mir bekannte Methode wäre einmaliges manuelles aufrufen der popupmenüs, die dann über den hook registriert und geloggt werden.

Die Methode die dem ResourceHacker ähnlich ist, ist eigentlich keine alternative, da sich hier noch viel mehr probleme auftun, angefangen von dem problem exepacker, bis hin zum auseinandernehmen des programms.

ciao, Philipp

MaOfDe 17. Aug 2004 16:49

Re: Menüeinträge "virtuell" anklicken
 
Letztendlich brauch ich ja nur die ID von dem benötigten Menüeintrag, da wäre ResHacker schon die ideale Lösung gewesen, wenn das Menü tatsächlich in den Resourcen der EXE abgelegt gewesen wäre...
So könnte man, um für dieses Thema einmal zu rekapitulieren, einfach folgendes machen:
Delphi-Quellcode:
SendMessage(<Fenster-Handle>, WM_COMMAND, <Menüeintrags-ID>, 0);
@c113plpbr: Kennst du einige API/Function-Hooking-Tutorials? Will mich hier nicht kaputtsuchen ^^. Solange eine Lösung zu existieren scheint, ist's mir egal, wie schwierig es sein mag.

c113plpbr 17. Aug 2004 20:52

Re: Menüeinträge "virtuell" anklicken
 
So richtige Tutorials kenn ich nicht, ich hab das meiste aus beispielen gelernt. Ein beispiel, wie gesagt, findest du hier in der dp in meinem 'programm' inettime. In diesem programm wird die funktion trackpopupmenu abgefangen, und somit alle damit angezeigten popupmenüs ... und das sind fast alle ... ^^, bis auf die, die per trackpopupmenuex aufgerufen werden, aber das kann man sich davon auch noch ableiten ... ich habe für das hooken der funktionen madshi's madCodeHook library verwendet, die für den nicht-kommerziellen gebrauch kostenlos ist. Diese Library ist recht gut, und es sind auch ne menge beispiele dabei.

Ich hoffe, das hilft dir weiter, und ich denke, es ist die einzige, wirklich einigermaßen sinnmachende, lösung für dein problem. Wenn du es ned hinkriegst, kannste mich ja kontaktieren, per pn, oder email, und wenns sein muss, auch per icq ... ^^ ...

ciao, Philipp


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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 by Thomas Breitkreuz