Entwickler-Ecke

Sonstiges (FPC / Lazarus) / Linux API - Von Kylix proggi zu Linux schreiben


bolli - Mi 17.09.03 14:10
Titel: Von Kylix proggi zu Linux schreiben
Hi, ich will ein programm schreiben, mit dem ich aus meinen Editfenster in das Programm(Ultima Online) schreiben kann.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure StringToUO(zeile: string);
var hUO: THandle;
i: byte;
begin
hUO := Libc.system('Ultima Online');
if hUO <> 0 then
begin
for i := 1 to Length(zeile) do 
begin
Sendmessage(hUO,WM_CHAR,Ord(zeile[i]),0);
end;
Sendmessage(hUO,WM_CHAR,13,0);
end
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
StringToUO('Edit1.Edit');
end;


unter windows würde es gehen, aber unter Linux gibt es keine Sendmessage, und WM_CHAR erkennt er auch nicht. Was muss ich da eingeben?

FindWindow hab ich durch libc.system ersetzt das geht doch oder?

Wäre nett wenn mir einer weiterhelfen könnte.

<==noob

Moderiert von user profile iconUGrohne: Delphi-Tags eingefügt und Code gekürzt


AndyB - Mi 17.09.03 14:53

Zitat:
Libc.system('Ultima Online');

Damit startest du ein Programm "Ultima" mit dem Parameter "Online".

Zitat:
Sendmessage(hUO,WM_CHAR,Ord(zeile[i]),0);

Man könnte das zwar für Linux anpassen (XEvent), aber das wird nicht funktionieren. Unter Linux gibt es kein einheitliches System für Botschaften. Da kocht jedes Programm sein eigenes Süppchen. Somit kannst du nur Standard Events an die Fenster schicken.


bolli - Mi 17.09.03 14:54

wie standart events? kannst du es mir genauer erklären?
Ultima online ist ein windows programm, welches unter linux mit wine ausgeführt wird.


AndyB - Mi 17.09.03 15:11

bolli hat folgendes geschrieben:
welches unter linux mit wine ausgeführt wird.

Na dann viel Spaß. Dann hast du noch weniger Chancen, da Wine seine eigenen Fenster hat, von denen selbst der XWindows (X86Free) nichts weiß, da sie für X nur gezeichnete Linien/Bilder sind und somit kein Handle besitzen.


bolli - Mi 17.09.03 15:15

praktisch unmöglich oder wie?

da ja gott sei dank immer der textcursor offen ist, muss es doch möglich sein, das fenster manuell anzuwählen oder? also das das proggi doppelklick in den bereich den ich festgelegt hab macht, und dann schreibt?


AndyB - Mi 17.09.03 17:43

1. Möglichkeit: Du musst in den Adressraum der Wine-Anwendung eindringen. Das erlaubt Linux aber nicht so ohne weiteres. Du brauchst, wenn das überhaupt geht schon root Rechte.

2. Möglichkeit: Du schickst ein XEvent an das richtige Handle. Nun ist wine aufgefordert, dass richtige Control zu finden. Hierfür kenne ich aber die Befehle nicht. Und die gesamte Xlib Unit zu durchforsten ist mir ehrlich gesagt zu aufwendig um ein Problem zu lösen, das nicht mal mein eigenes ist.


pHew - Do 15.01.04 18:42

Da ich selbst schon genug Programme unter Delphi geschrieben habe, um in UO powergaming zu betreiben, kann ich vielleicht etwas helfen.

In Ultima Online ist egal was man tut ständig der Textcursor offen, wie schon geschrieben. Es würde also theoretisch reichen wenn das Programm eine Sekunde wartet damit man UO Fensterchen aktiviert, und dann einfach Tastendrücke simuliert. Geht das?


JoelH - Do 15.01.04 20:03
Titel: hmm,
mal 'ne naive Frage, warum schreibst du nicht ein Delphiprogramm und lässt es auch unter wine laufen ? Das sollte dann wieder gehen da ja WINE die Win Api imitiert und du dich im 'selben' System befindest wie UO sollte wine den Rest für dich Regeln.