Autor Beitrag
Martek
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 20.11.07 08:50 
Hallo,

ich programmiere im Moment an einem Programm, das hauptsächlich dazu da ist, einen Dedicated Server von Crysis bei Absturz neuzustarten. Das ganze habe ich auch sehr schnell hinbekommen, musste aber feststellen, dass die RCON Verbindung des Server sehr oft abbricht. Um das zu vermeiden, würde ich gerne mein Programm, welches sowieso im LowPriority Modus im Hintergrund läuft, um zu überwachen, ob der Server noch läuft, dazu animieren jede 20 Minuten einen "rcon_startserver" Befehl zu senden, damit der Server auch immer eine Rcon Verbindung bereitstellen kann.

Der Dedicated Server ist ja nicht direkt eine Dosanwendung, sieht aber im Grunde so aus, und jetzt frag ich mich, wie man diesem Fenster Befehle übermitteln kann.

Da ich den Server selber immer im HIGHPriority Modus starte habe ich auch die PID der Anwendung zB, nur kenne ich kein Script, welches diese nutzt um Befehle daran zu senden. Die Ausgabe muss ich nicht zurückbekommen, es soll also eine einwegrichtung sein.

Vielen Dank
Marcel Wlotzka


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am Di 20.11.2007 um 14:08
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Di 20.11.07 09:08 
[vermutung]
Ich befürchte, dass das nicht geht. Die Ausgabe, die Du siehst, ist eine eigenständige Anwendung. Du könntest vielleicht eine eventuell vorhandene Schnittstelle vom Herstellter des Servers verwenden, aber sowas wie SendTextMsg(ServerAnwendung,'neustart') wirst Du nicht erreichen. Wenn die Ausgabe Deiner kleinen Anwendung ebenfalls in einen solchen Fenster wäre, wie sollte zum Beispiel eine andere Anwendung dort Text reinschreiben, wenn Du es in Deiner Anwendung nicht vorsiehst? Informiere Dich zunächst über vorhandene Schnittstellen zum Server des Spiels.
[/vermutung]

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 20.11.07 09:30 
Ich verstehe das so, dass es sich um in normales Control handelt, sowas wie ein Memo, und das man dort Befehle eingeben kann, oder?
Du kannst ja mal mit X-Spy die nötigen Parameter für FindWindow suchen, um das Handle des Controls zu bekommen:
www.x-spy.net/index....ng=de&site=index
Martek Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 20.11.07 15:04 
Erstmal vielen Dank für die zwei konstruktiven schnellen Antworten.

Also ich habe das Programm mal benutzt und den Quelltext in mein Programm eingefügt. Die beiden dafür wichtigen Prozeduren mal hier aufgelistet:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure SendTextMsg(Handle: THandle; Text: String);
var
  dwChars : DWORD;
  pBuffer : Pointer;
begin
  pBuffer := PChar(text);
  WriteFile(Handle, pBuffer^, Length(text), dwChars, nil);
  pBuffer := PChar(#13#10);
  WriteFile(Handle, pBuffer^, 2, dwChars, nil);
end;

procedure rcon_refresh;
var
  wnd: HWND;
begin
  wnd :=  FindWindow('ConsoleWindowClass', PChar(serverexe));

  if wnd <> 0 then
  begin
    SendTextMsg(wnd,'sv_say test');
    ShowMessage('Ok ^^ + '+inttostr(wnd));
  end;
end;


Das PChar(serverexe) entsteht durch das auswählen einer EXE mit dem OpenDialog.

Als Ausgabewert der ShowMessage() bekomme ich dann ein "OK ^^ + 1945762" zum Beispiel.
Wenn ich aber das Serverfenster anschaue, wird nicht "sv_say test" hinzugefügt.

Ich vermute, dass meine SendTextMsg Prozedur nicht mit dem HWND arbeitet(es ist ja dort ein Handle, oder dass der Dedicated Server wirklich soetwas nicht unterstützt.

Habe ich einen Fehler im Ansatz gemacht?

Also ich kann mit meiner Tastatur in das Programm manuell Befehle eingeben, will das aber automatisieren. Ich habe schon überlegt Tastendrücke zu simulieren und das Fenster zuerst nach vorne zu holen, aber ich denke, dass ist nicht der geschickteste Ausweg für dieses Problem...

Gruß
Marcel