| Autor |
Beitrag |
energyx
      
Beiträge: 33
|
Verfasst: Mo 21.02.05 13:54
Hi!
Also, ich hab hab folgendes nettes Problem:
Ich arbeite an einem ASUS W1N Notebook. Bei diesem Notebook ist eine Fernbedienung mit dabei, die aber nur mit der dazugehörigen Softer ( die is für'n *popo*) funktioniert. Allerdings läuft nebenbei im Systemtray ein Programm namens: Remote Controler 2.1. von ITE Tech ( oder auch Remotecontrolservice genannt) ... Diese Programm reagiert auch auf die Fernbedienung und gibt einen Code auf dessen "Form" aus um welche Taste es sich handelt.
Nun zu meinem Problem: Ist es möglich diese Information aus dem Fremdprogramm abzufragen/tasten um mir darauss, einen eigenen universal Handler zu bauen, über den ich dann Tastendrücke emullieren kann, um damit dann windows mit der tastatur zu steuern? oder kann man evtl. den code ...öhm..  ... das ich weiß wie der aufgebaut ist? ...is aber so wie ich die jung von asus kenn mit VS.Net geproggt...
Nunja, vielleicht hat ja wer eine idee =)
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Mo 21.02.05 14:57
Musst du mal schauen ob du an das Handle des Textes kommst. Müsste eigentlich ein Static sein.
FINDWINDOW um das Parentwindow zu suchen.
FINDWINDOWEX um das Static zu finden.
Lass mal WINSPY schauen ob du überhaupt an das Handle kommst.
Wenn das Control nicht vom Typ TWinConrol ist kommst du nicht dran.
Dann haste noch die Möglichkeit, mit ner PIPE direkt auszulesen was das Programm für Nachrichten bekommt. (Sehr schwer).
leichter dürfte es sein die Textinformationen in einer Array of Char direkt aus dem RAM auszulesen. Dafür musste aber die Adresse wissen und beten dass keine DMA verwendet wird. Schau dir dafür READPROCESSMEMORY, ist im Grunde relativ einfach dann. Um die Adresse zu finden empfehle ich TSEARCH.
Geschickter wäre es natürlich wenn du wüsstest welche Messages verschickt werden wenn eine Taste auf der Ferbedinung gedrückt wird. Wie du daran kommst habe ich keine Ahnung
Ne dokumentierte DLL ist nicht zufällig dabei?
Eine Idee hätte ich noch: Bei der Fernbedinung meiner TV Karte ist das ziemlich geschickt gemacht. Wird z.B. Play gedrückt, drückt der Handler des Treibers virtuell die Taste 180.
Nimm dir mal den Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure Timer; var i : integer; begin timer1.interval := 1; for i := 1 to 200 do if boolean(GetAsyncKeyState(i)) then showmessage(inttostr(i)); end; |
Mit dem Code kann ich dann auch abfragen ob die Taste 180 gedrückt ist, und in meinem eigenem Programm dementsprechend handeln.
Zuletzt bearbeitet von Karlson am Mo 21.02.05 23:48, insgesamt 1-mal bearbeitet
|
|
energyx 
      
Beiträge: 33
|
Verfasst: Mo 21.02.05 20:45
Okay, cool.... also an die Handles komm ich ran!
Ist eine Aboutbox und die Daten werden in eien TStatusbar geschrieben!!
Bekomm dann diese tolle Handle Nummer $000D03DE ... und über die kann ich nun versuchn die Daten auszulesen?!
Das guuuut =)
Muss ich mal schauen wie das funzt!
Danke für deine dicke Antwort! Sehr fein!!!
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Mo 21.02.05 23:47
Pass auf! $000D03DE kann doch niemals ein Handle sein! Wenn dann 852958. Ein Handle ist immer von Typ Cardinal (das ist eine abart des Integers). Dein $000D03DE ist ein Hexwert...wo hast du den denn her?
Ist im grunde egal, weil das so eh nicht funktioniert.
Handle ist kein fixer Wert. Es ist vielmehr irgendeine Zahl, die Windows jedem Fenster zuteilt, damit windows auch weiss wo es irgendwas hinschicken muss. Vergeben wird diese Zahl im grunde willkürlich, und zwar jedes mal aufs neue, wenn das Fenster gestartet wird.
Lade dir WINSPY von TomS hier aus dem Forum herunter.
Suche das Handle der Statusbar.
Dann klickst du auf FindWindowCode generieren.
Den Code kannste übernehmen.
Der Wert des Handles hat dich garnicht zu intessieren, du musst nur wissen das er dann in der Variable hwnd gespeichert ist.
Auslesen kannste das dann mit WM_GETTEXT
|
|
energyx 
      
Beiträge: 33
|
Verfasst: Di 22.02.05 00:39
richdiisch!! is der Hexwert, bekomm ich über X-Spy raus...und auch den Handle: von der Form : About, von der Komponente, wo dann die daten drinstehn is die TStatusbar! Haste wunderbar erkannt =)
Das WinSpy versuch ich mal noch.
Ein Problem hät ich noch:
In dem Andern Fenster, wo der Code in die Statusbar geschrieben wird, wird nur sehr kurz eingeblendet...also muss ich das programm also immer abtasten lassen....am besten mit nem timer mit niedriger Frequenz, oder?
thx, Kris
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Di 22.02.05 00:41
ist dir jetzt wenigstens klar das du mit dem hexwert von xspy nichts anfangen kannst?
zu dem anderem: Ja ist zwar hoffnungslos schlechter stil, aber wird mit der Lösung anders wohl nicht gehen.
|
|
schlumpf70
      
Beiträge: 21
|
Verfasst: Di 22.02.05 00:43
| energyx hat folgendes geschrieben: | Ein Problem hät ich noch:
In dem Andern Fenster, wo der Code in die Statusbar geschrieben wird, wird nur sehr kurz eingeblendet...also muss ich das programm also immer abtasten lassen....am besten mit nem timer mit niedriger Frequenz, oder?
thx, Kris |
nein solange das fenster nicht zerstört wird ist der wert trotzdem noch da denke es wird nur unsichtbar
|
|
energyx 
      
Beiträge: 33
|
Verfasst: Di 22.02.05 01:33
hmmm...das will noch nicht so richtig....fehler bekomm ich ich keine, aber er ließt mir immer einen leerstring aus....muss ich irgendwas beachten wenn es sich um eine Statusbar handelt?!
Hab das Prinzip mit Handles usw. nun schon verstanden, konnte auch das notepad beispiel nachvollziehen....schon komisch das ganze....irgendwie ist da meine Delphi Hilfe auch wenig zu gebrauchen...wie kommt das denn zustande? Wo bekomm ich den da mehr infos in Form einer Hilfe ?!
|
|
Gothicware
      
Beiträge: 77
Win 98, Win 2000, Win XP, BeOs-R5, Zeta 1.0(war nicht gut, also verkauft), KnoppiX, VM-Ware
D4 Client/Server, Turbo Basic, QBasic, Atari-Basic
|
Verfasst: Di 22.02.05 02:36
Mal ne Blöde Frage, ist das ne Funk, oder eine IR-Fernbedienung???
Infarot, läuft meist über ein Serial-Bus. Das heisst, Programm was auf die Serielle zugreift, beeenden, und eigenes dranhängen. Dann musst du nur noch die passende
Baud Geschwindigkeit rausfinden und dir einen Datensatz Tabelle zu Taste, und Übermittellter Code erstellen.
Ansonsten würde ich mal verschiedene HOOKS ausprobieren, und sehen, wo ich was vom Programm abfangen kann. Dann brauche ich keinen Timer der meine System Leistung Missbraucht, da meine HOOK Procedure nur dann aufgerufen wird,
wenn eine Nachricht vom Selben Typ, durch das System geschossen wird. 
|
|
energyx 
      
Beiträge: 33
|
Verfasst: Di 22.02.05 13:43
aha...HOOKS also...muss ich mich da auch mal reinlesen... Hab davon ja Null Ahnung, durfte mich die ganze Zeit immer nur mit Grids, SQL und so'n Zeugs rumschlagen... (Praxissemester
UNd ja das ne Infrarot Fernbedienung...läuft über CIR, oder wie das heißt, also nicht der "normalo" Infrarotport wo du dein Handy z.B. anbindest...und das läuft wohl über ein eigenes Interface...ich hab nu auch schonmal ne Mail an die entwickler von der anderen SOftware geschrieben, vielleicht rücken die ja ein bischen was raus... Die netten Asiaten *ggg*
Also, ich werd dann bei Gelegenheit mal weiter berichten, wie es denn so vorran geht!
Ach und noch eins: Das Programm über das ich da versuch zu gehen läuft eigentlich nur in der SystemTray...das sollte auch noch ein Problem darstellen oda? So wie ich das gelesen habe, ist das dann nimmer so "einfach" =)
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 22.02.05 15:42
@Karlson: wieso kann $000D03DE kein Handle sein? $000D03DE und 852958 sind genau dasselbe, nur dass die eine Zahl zur Basis 16 und die andere eben zu Basis 10 angeschrieben ist... und wenn du das Handle hardcodest (was zwar nicht sehr sinnvoll ist, aber egal), dann akzeptiert Delphi sowohl die hexadezimale als auch die dezimale Schreibweise, also sag mir nicht mehr eine Hex-Zahl kann kein Handle sein!
@energyx: ich weiß nicht welche Version meines X-Spys du hast, aber seit dem 28.05.04 kann auch der X-Spy FindWindowCode automatisch erzeugen...
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
energyx 
      
Beiträge: 33
|
Verfasst: Di 22.02.05 20:37
hmmm...also irgendwie will das nicht so ganz...inder statusbar steht definitiv was drin (fernbedienungkaputtdrück) aber ich bekomm immer nur nen leerstring raus....
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var text:array[0..255] of char;
SendMessage(wnd2,WM_GETTEXT,100,Integer(@Text)); memo1.Lines.Add(String(Text)); |
so sollte das doch gehen...das Fenster is auch und die Handles die Delphi ermittelt stimmen auch mit dem, was Xspy raus gibt überein! ( und danke für den Tip, Xspy kann auch Code erstellen!  )
aber kommt nix bei raus... is immer leer... mal weiter Tut's und MSDN lesen
Moderiert von raziel: Code- durch Delphi-Tags ersetzt.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 22.02.05 20:48
Stimmt denn der Text den X-Spy anzeigt mit dem überein, was in der Statusbar steht..?
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Di 22.02.05 21:08
hi,
Den Text der Statusbar kannst du so nur auslesen, wenn
es sich um den ersten Panel handelt.
Alle anderen Panels lassen sich mit WM_GETTEXT nicht auslesen,
resp. es muss zuerst Speicher reserviert werden.
|
|
energyx 
      
Beiträge: 33
|
Verfasst: Di 22.02.05 21:56
so, also: wenn ich z.B. Miranda mit WinSpy "begutachte" und mir da z.b. die Statusbar anschaue steht der inhalt der statusbar auch bei winspy unter Titel/Text....wenn ich das mit dem ollen Tool mache, das auf meine Fernbedienung reagiert betrachte steht da nix drinne.
im meinem Bsp. ists auch so das in dem RCTool Klasse TStatusBar bei Miranda ists diese msctls_statusbar32 Statusbar.
Das doch alles shice....
@toms: Hä?! *gg*
ich mach meine Statusbars nie in ein Panel XD
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Mi 23.02.05 15:22
Eine TStatusbar kann sehr wohl Panels enthalten.
|
|
energyx 
      
Beiträge: 33
|
Verfasst: Mi 23.02.05 15:30
ach sorum meinst du das  dann hat ich da ein verständnisproblem.... ja und wie komm ich dann nu da dran 
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Mi 23.02.05 15:39
| energyx hat folgendes geschrieben: | ach sorum meinst du das dann hat ich da ein verständnisproblem.... ja und wie komm ich dann nu da dran  |
So: www.swissdelphicente.../showcode.php?id=935
|
|
energyx 
      
Beiträge: 33
|
Verfasst: Mi 23.02.05 16:05
merci.... "wer hats erfunden?" ... =)
Aber woher weiß ich denn in welchem anderen Panel das Statusbar stehen soll bzw, in welchem Panel der Statusbar der zu suchen Text steht?!
SB_GETTEXT <-> WM_GETTEXT ...  Sollt ich es vielleicht mal damit versuchen?!
-UPDATE-
SB_Gettext funzt nid...: [Error] asus_rc.pas(44): Undeclared identifier: 'SB_GETTEXT'
-DONE- SB_GETTEXT hat mir nur ne USES KLausel gefehlt... aber geht trotzdem nicht 
|
|
energyx 
      
Beiträge: 33
|
Verfasst: Do 24.02.05 16:43
So...gibt News
Hab mal ein bischen rumgesucht in meinem System und hab dann rasubekommen, das es im Grunde 2 DLL's sind über die die ganze Sache abläuft....und so wie es aussieht wurde das ganze in C oder C++ geproggt...zumindest sieht es schwer dannach aus.... Bin auch beim durchstöbern auf eine Textpassage gestoßen wo von "TITECIRService" die rede ist...denke mal wenn ich die irgendwo herbekommen sollte es nicht mehr all zu schwer sein oda?!
Des weiteren geht das ganze wohl über ne ACPI- Schnittstelle: ACPI\ITE8704\3 hab auch IRQ und Speicherraum dazu (s.h. Geräte Manager )
Dann noch ein bischen weiter rumgespielt und hab mal mit WinSight32 versucht mehr infos von meinem tollen Fensterchen herauszubekommen...ohne erfolg, der bekommt nichtmal die Handles raus...
schon schade...nochmal ITE Tech anmailen....vielleicht rücken die ja was raus...*grml*
|
|