| Autor |
Beitrag |
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 22.03.07 22:38
Heyho,
ich schreibe gerade einen Chatbot für ein Spiel (genauer wc3).
Das Handle des Programmes zu finden ist kein Problem, sowie einen Tastendruck zusenden.
Aber nun liegt hier schon das Problem: mit dem einen Tastendruck meine ich, dass nur "vk_escape", andere Zeichen jedoch nicht, bei diesem Programm ankommen.
Mein bisheriger Ansatz schaut so aus: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure typemessage; var wc3: THandle; begin wc3 := findwindow(0,'Warcraft III'); if wc3 <> 0 then begin beep; SetForeGroundWindow(wc3); keybd_event(vk_escape,MapVirtualKey(vk_escape,0),0,0); end; end; |
Das Chatinterface des Programmes schaut wie jedes andere auch aus: Eine Zeile zum eingeben der Nachricht und ein Feld, in dem die gesendeten Texte angezeigt werden.
Um nocheinmal zusammen zufassen:
Problemstellung ist: • Zeichen und Texte an das Programm senden zu können
mit freundlichen grüßen
marc
Zuletzt bearbeitet von Marc. am Do 22.03.07 22:42, insgesamt 1-mal bearbeitet
|
|
stigge
      
Beiträge: 426
WinXP
Delphi 2007
|
Verfasst: Do 22.03.07 22:40
Eventuell irgendwo zwischenspeichern und dann wieder abrufen 
|
|
Marc. 
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 22.03.07 22:44
Wie stellst du dir das vor?
|
|
stigge
      
Beiträge: 426
WinXP
Delphi 2007
|
Verfasst: Do 22.03.07 22:46
Marc. hat folgendes geschrieben: | | Wie stellst du dir das vor? |
Text in einer Textdatei an einem speziellen Ort speichern, mit anderem Programm laden(Timer? und Fileexists?)
Und übrigens: Lies dir mal das hier durch, bevor es zu spät ist 
|
|
Marc. 
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 22.03.07 22:49
Ich spiele kein World of Warcraft, sondern das Echtzeit-Strategiespiel Warcraf 3 TFT.
Aber back to topic: Ob ich den Text, den ich senden will, nun irgendwo aus einer Datei lade oder direkt aus meinem Programm (Memo etc.) beziehe, ist doch schnuppe oder nicht?
|
|
stigge
      
Beiträge: 426
WinXP
Delphi 2007
|
Verfasst: Do 22.03.07 22:52
Marc. hat folgendes geschrieben: | Ich spiele kein World of Warcraft, sondern das Echtzeit-Strategiespiel Warcraf 3 TFT.
Aber back to topic: Ob ich den Text, den ich senden will, nun irgendwo aus einer Datei lade oder direkt aus meinem Programm (Memo etc.) beziehe, ist doch schnuppe oder nicht? |
Hätte gedacht das ist das gleiche Spiel. Na egal, dann bist du trotzdem vorgewarnt
Und zur Frage: Klar ist es egal, aber so würde es prinzipiell gehen
|
|
Marc. 
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 22.03.07 22:54
Und wie würdest du den Text senden?
Oder kennst du eine möglichkeit speziell auf die Eingabeleiste im Programm zuzugreifen? Vllt besitzt diese ein eigenens Handle. 
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Do 22.03.07 22:57
hey marc!
Mach mal Gebrauch von X-SPY und geh auf das Edit im Spiel
vielleicht hilft dir das weiter!
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
stigge
      
Beiträge: 426
WinXP
Delphi 2007
|
Verfasst: Do 22.03.07 23:00
Marc. hat folgendes geschrieben: | Und wie würdest du den Text senden?
Oder kennst du eine möglichkeit speziell auf die Eingabeleiste im Programm zuzugreifen? Vllt besitzt diese ein eigenens Handle. |
Ich kann noch kaum was, also von handles hab ich praktisch null ahnung weshalb ich jetzt lieber ruhig bin^^
|
|
Marc. 
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: So 25.03.07 22:35
Inwiefern soll mir X-Spy weiterhelfen? Ich finde dort nichts, um meine Eingabeleiste zu lokalisieren. 
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 26.03.07 00:13
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Mo 26.03.07 03:00
Sofern es in einem Programm nicht vorgesehen ist, ist das Text senden nur über Tricks zu bewerkstelligen. Das Problem, dass es bei Wc3 dann noch gibt ist, dass es, wie JayEff schon sagte bei der Gui nicht um Windows-Elemente handelt, sondern um eine, bei Spielen typische, DirectX o. Ogl Zeichnung. Folglich gibt es auch kein Handle das zu finden wäre. Wäre es der Fall könnte man via GetText o.ä. dem Edit den Text übergeben.
Ergo wirst du den unsauberen, dafür aber praktikablen Weg über die das Keybd_event gehen müssen. Die grösste Schwierigkeit ist dann allerdings das dass Eingabefeld von Wc3 den Focus haben muss. Sonst landen die Tastendrücke im Nirvana oder bei irgendeinem Hotkey (Schnelles Spiel, Eigenes Spiel usw.).
Höchstwahrscheinlich ist das bei deinem Beispielcode auch der Fall.
Dein Code macht momentan nichts anderes als Wc3 in den Vorgergrund zu holen und die ESC-Taste zu drücken - das gleiche kannst du reproduzieren indem du den Warcraft3 Taskleisteneintrag anklickst und dann ESC drückst.
Zusammenfassend: Es wird wohl so sein, dass dein Eingabefeld nicht den Fokus hat. Wenn doch probierst du am besten mal das von JayEff angesprochene DELAY zwischen den Tastendrücken.
|
|