Autor Beitrag
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

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

WinXP
Delphi 2007
BeitragVerfasst: Do 22.03.07 22:40 
Eventuell irgendwo zwischenspeichern und dann wieder abrufen :gruebel:
Marc. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Do 22.03.07 22:44 
Wie stellst du dir das vor?
stigge
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: Do 22.03.07 22:46 
user profile iconMarc. 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 :zustimm:
Marc. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

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

WinXP
Delphi 2007
BeitragVerfasst: Do 22.03.07 22:52 
user profile iconMarc. 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 :mahn:
Und zur Frage: Klar ist es egal, aber so würde es prinzipiell gehen
Marc. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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.:roll:
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Do 22.03.07 22:57 
hey marc!

Mach mal Gebrauch von Suche in der Entwickler-Ecke 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: Do 22.03.07 23:00 
user profile iconMarc. 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.:roll:

Ich kann noch kaum was, also von handles hab ich praktisch null ahnung weshalb ich jetzt lieber ruhig bin^^
Marc. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 25.03.07 22:35 
Inwiefern soll mir X-Spy weiterhelfen? Ich finde dort nichts, um meine Eingabeleiste zu lokalisieren. :roll:
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 26.03.07 00:13 
user profile iconZeitGeist87 hat folgendes geschrieben:
Mach mal Gebrauch von Suche in der Entwickler-Ecke X-SPY und geh auf das Edit im Spiel :)

IMHO ist das Eingabefeld von WC III kein Fenster und hat dementsprechend auch kein Handle. Du wirst also kaum per FindWindow an das Handle des Eingabefelds kommen. Viel eher musst du über den Weg, den du bereits eingeschlagen hast, Tastendrücke simulieren. Dabei könnte es sein, dass du eine kleine Verzögerung zwischen den einzelnen Tastendrücken einbauen musst. Wie auch immer, genauer weiß ich nix dazu, also kann ich dir nur weiterhin viel Erfolg wünschen... :|

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: 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 user profile iconJayEff 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 user profile iconJayEff angesprochene Suche in: Delphi-Forum, Delphi-Library DELAY zwischen den Tastendrücken.