winapi, wincontrols finden,remote,fernsteurung

Antworten
arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

winapi, wincontrols finden,remote,fernsteurung

Beitrag von arturx »

Gibt es die Möglichkeit, alle aktiven Wincontrols zu ermitteln ? (auch die der anderen Anwendungen)
Für die Formulare gibt es GetWindow(hWnd:HWND; uCmd:UINT):HWND;
gibt es etwas Entsprechendes auch für für die wincontrols ?

Grund der Frage : Ich möchte via simuliertem Tastenbefehle ein fremdes Programm fernsteuern.
Bis jetzt habe ich nur die Möglichkeit gefunden, das Formular zu finden (s.o) und mit dessen Handle
per GetWindowRect(hWnd,rect) die Größe des Formulars zu bestimmen.
Nun kann ich natürlich auf rein geometrischem Weg die Lage der einzelnen Eidts, Buttons etc errechnen und
per mousemove und keyinput bearbeiten. Vielleicht gehts ja noch besser.... ?!

(Auf diesem Weg auch noch ein riesengroßer Dank an den Verfasser des mouseandkeyinput packages !!)

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: winapi, wincontrols finden,remote,fernsteurung

Beitrag von Antrepolit »

Hat es einen bestimmten Grund, das Rad neu zu erfinden?
Es gibt Remotedesktop, Teamviever, VNC und was noch alles, um Computer fernzusteuern. Und diese Programme sind sicherer als alles, was du selbst programmierst. Hast du dir mal Gedanken gemacht, wie du dein Control finden willst, wenn das Fenstert minimiert ist? Hast du malwas von Window Messages gehört? Evtl. sollte man diesen Ansatz verfolgen, und nicht auf gut Glück geometrisch Controls ermitteln.
Grüße, Antrepolit

care only if your os is really burning

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: winapi, wincontrols finden,remote,fernsteurung

Beitrag von arturx »

Antrepolit hat geschrieben:1. Remotedesktop, Teamviever, VNC und was noch alles, um Computer fernzusteuern. Hast du dir mal Gedanken gemacht, wie du dein Control finden willst, wenn das Fenstert minimiert ist?
2. Hast du malwas von Window Messages gehört?
3.Evtl. sollte man diesen Ansatz verfolgen, und nicht auf gut Glück geometrisch Controls ermitteln.

Zunächst einmal Dank für die Antwort !
zu 3.Auf "Gut Glück" ist bis jezt nichts passiert. Bis jetzt ist das die einzige Möglichkeit, die ich zum Laufen gebracht habe.
       Selbstverständlich freue ich mich über jede Anregeung, wie es besser gemacht werden könnte,
      (Vorwürfe usw. bringen mich irgendwie garnicht weiter)
zu 1. Remotedesktop etc. helfen mir nicht weiter, da ich die Werte programmgesteuert setzen will und nicht manuell per Keyboard.
      Klar kann ich mir die Probleme vorstellen, wenn das Fenster minimiert oder in Größe verändert ist.
      Wenn das nicht so wäre, hätte ich die Umfrage nicht gestartet.
zu2. Man mag es kaum glauben, von Windows messages habe ich gehört..
      Ich habe damit bis heute nur selten zu tun gehabt. Deshalb ja auch meine Anfrage : s.o.
Zuletzt geändert von arturx am So 1. Jul 2012, 21:17, insgesamt 1-mal geändert.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: winapi, wincontrols finden,remote,fernsteurung

Beitrag von mschnell »

arturx hat geschrieben:da ich die Werte programmgesteuert setzen will und nicht manuell per Keyboard.


Es gibt diverse "Macro recorder" und "Script" Programme, die (nach einem Training) Programnme (lokal) mit einer automatisierten Bedienung beschicken.

Mein Sohn hat vor ein paar Jahren auch mal sowas (in Delphi) geschrieben. Es konnte z.B. Windows anhand der Headline finden, aktivieren und Tasten-Events schicken. Und z.B. im Script verzweigen, wenn eine Headline (noch) nicht existierte.

-Michael

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: winapi, wincontrols finden,remote,fernsteurung

Beitrag von Bora4d »

Wenn du Handle von Fenster (HWND bei WinApi, HAndle bei vcl/lcl) hast kannst du alles mögliche machen.
Suche in Winapi nach Findwindow alles weitere erfährst du dort.
Das klappt aber nur bei Programmen die Windows-Controls verwenden. Bei Programmen die alles selbst zeichnen ist nur Hauptfenster windows-Control z.B. bei FireFox und QT-Programme.

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: winapi, wincontrols finden,remote,fernsteurung

Beitrag von arturx »

Bora4d hat geschrieben:Suche in Winapi nach Findwindow alles weitere erfährst du dort.
1.Nun mal eine ganz dumme Frage : Wie komme ich ans WINAPI ?
bis jetzt habe ich mir mit   functions.h   bzw.   func.inc  aus windows.pas beholfen,
mir Etliches dazugereimt und manchmal... auch Ergebnisse erzielt.
Systematisch war das natürlich nicht.
Bitte hilf mir durch die anfänglichen Schritte mit dem WINAPI. Ich denke, dass das auch viele andere interessieren würde.
Bora4d hat geschrieben:.Das klappt aber nur bei Programmen die Windows-Controls verwenden. Bei Programmen die alles selbst zeichnen ist nur Hauptfenster windows-Control z.B. bei FireFox und QT-Programme.
Ich hatte schon erwartet, dass die Grenze der Ansprechbarkeit durch Windows messages bei den twincontrols liegt.
Ich denke, dass ich die dann via findwindow oder GetWindow organisieren und filtern kann.
(Tieferliegende Einflussmöglichkeiten - auf tcontrols etc. - wird es dann tatsächlich wohl nur über die Simulation von mouse und keyboard geben)

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: winapi, wincontrols finden,remote,fernsteurung

Beitrag von Socke »

arturx hat geschrieben:1.Nun mal eine ganz dumme Frage : Wie komme ich ans WINAPI ?
bis jetzt habe ich mir mit   functions.h   bzw.   func.inc  aus windows.pas beholfen,
mir Etliches dazugereimt und manchmal... auch Ergebnisse erzielt.
Systematisch war das natürlich nicht.
Bitte hilf mir durch die anfänglichen Schritte mit dem WINAPI. Ich denke, dass das auch viele andere interessieren würde.

Schau dir doch bitte einmal ein grundlegendes Delphi Tutorial an, damit du weißt, was du mit der Datei windows.pas alles machen kannst außer Textteile herauszukopieren.

WINAPI steht für (Microsoft) Windows application programming interface. Das ist die Menge aller Funktionen, Konstanten, Variablen (und so weiter) die das Betriebssystem Microsoft Windows einem Anwendungsentwickler bereitstellt. Die offizielle Dokumentation dazu findest du im Microsoft Developer Network (MSDN). Sollte dir die Windows.pas nicht ausreichen, bringt der FPC auch die Units des JEDI-Projektes mit.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: winapi, wincontrols finden,remote,fernsteurung

Beitrag von Bora4d »

WinApi genau genommmen Win32Api (Win64Api) weil WinApi für Windows 3.1 war Windows Programmier Schnittstelle, also das was LCL für dich erledigt.
Genaues kannst du Wikipedia lesen. http://de.wikipedia.org/wiki/Windows_Application_Programming_Interface
Für Windows-Api zu verwenden brauchst du Windows.pas. In Windows.pas sind fast alle Funktionen definiert die reichen für dich.
Mit GetWindow verwendest du schon API-Funktion. Du brauchst die Dokumentation von diesen Funktionen. Die sind immer mit Delphi mitgeliefert wenn du irgend ein Delphi Version hast kannst du von da nehmen oder einfach hier herunterladen:
http://www.carabez.com/downloads.html (Ganz unten win32api.zip oder win32api_big.zip)
Wenn du Zip-DAtei entpackst findest du Help-Datei. Da stehst wie du GetWindow oder andere Funktionen benutzen kannst.
Oder du kannst bei MSN-Nachschauen:
http://msdn.microsoft.com/de-de/library/ee663266.aspx

Mit GetWindow und GetNextWindow oder EnumWindows kannst du alle Fenster-Handles holen.
Lade einfach von oben Die Help-Datei öffnet die Seite mit GetWindow und klicke oben [Overview] dann siehst du alle Befehle die ähliche Funktionen haben.

Du brauchst nicht um von Buttons usw. Handles zu erhalten positionen zu berechnen. Du kannst das einfach mit FindWindow/FindWindowEx machen.
1. Lade ein Programm runter womit du Fensterklassenname von allen Windows-Controls finden kannst. z.B. das:
http://assarbad.net/stuff/eda_preview270.exe

2. Dann benutze Findwindow/FindwindowEx funktion um Handle von deinem Button zu erhalten.

3. Wenn du Handle hast kannst du mit SendMessage Nachrichten zum diesem Fenster schicken.
Z.B.:
WM_GETTEXT/WM_SETGET um Text zu erhalten oder zu ändern
WM_KEYDOWN für Tastendruck usw...

4.
Hier ist ein Beispiel für Handle suchen.
http://www.swissdelphicenter.ch/de/showcode.php?id=327

Sorry ich habe nicht mehr Lust weiterzuschreiben, Ich glaube damit mußtest du weiterkommen. Wenn nicht schreib nochmal.

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: winapi, wincontrols finden,remote,fernsteurung

Beitrag von arturx »

Hey Bora (und auch Socke),
Vielen..usw...vielen Dank ! Genau das habe ich gesucht.
Infos, die mir einen sinnvollen Anfang/Suche ermöglichen. :idea:

(Natürlich vermeide ich Betriebssystem Aufrufe wenn es irgendwie geht, aber manchmal gehts halt nicht)
Bis jetzt klappt die Übertragung per Mouse & Tastatursimulation recht gut, vielleicht finde ich jetzt noch Besseres !
In diesem Fall hänge ich später weitere Infos an.

Antworten