Autor Beitrag
energyx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mo 21.02.05 14:57 
Musst du mal schauen ob du an das Handle des Textes kommst. Müsste eigentlich ein Static sein.

Suche in: Delphi-Forum, Delphi-Library FINDWINDOW um das Parentwindow zu suchen.
Suche in: Delphi-Forum, Delphi-Library FINDWINDOWEX um das Static zu finden.

Lass mal Suche in: Delphi-Forum, Delphi-Library 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 Suche in: Delphi-Forum, Delphi-Library 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 Suche in: Delphi-Forum, Delphi-Library READPROCESSMEMORY, ist im Grunde relativ einfach dann. Um die Adresse zu finden empfehle ich Suche bei Google 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: 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 Suche in: Delphi-Forum, Delphi-Library 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 Suche in: Delphi-Forum, Delphi-Library WM_GETTEXT
energyx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 21



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
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
BeitragVerfasst: 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 Suche in: Delphi-Library HOOKS ausprobieren, und sehen, wo ich was vom Programm abfangen kann. Dann brauche ich keinen Timer der meine System Leistung Missbraucht, da meine Suche in: Delphi-Library HOOK Procedure nur dann aufgerufen wird,
wenn eine Nachricht vom Selben Typ, durch das System geschossen wird. :)
energyx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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....

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var text:array[0..255of 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 user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Mi 23.02.05 15:22 
Eine TStatusbar kann sehr wohl Panels enthalten.
energyx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mi 23.02.05 15:30 
ach sorum meinst du das :roll: dann hat ich da ein verständnisproblem.... ja und wie komm ich dann nu da dran :?:
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Mi 23.02.05 15:39 
energyx hat folgendes geschrieben:
ach sorum meinst du das :roll: dann hat ich da ein verständnisproblem.... ja und wie komm ich dann nu da dran :?:


So: www.swissdelphicente.../showcode.php?id=935
energyx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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 :cry:
energyx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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*