Hallo zusammen,
nachdem ich jetzt ca 5 Tage lang die Suche sowie google durchgeforstet habe, bin ich immernoch nicht auf ein, für mich gutes, endergebniss gekommen.
Ich benutze für LiveStreams und Gameplays OBS Studio, das auf HotKeys im Minimierten und Maximierten zustand reagiert.
Dafür gibt es das Elgato Stream Dreck zu kaufen, was befehle an OBS sendet und OBS führt diese dann aus, da ich aber experimentier freudig bin und keine lust habe für ein Stream Deck 150€ zu Zahlen, dachte ich mir, ich baue mir mehr oder weniger selbst eins.
Zu meiner überlegung:
Ich benutze ein Windows Tablet zum steuern von OBS und meinen PC, zum streamen. Habe nun eine TServerConnection Anwendung programmiert die auf meinem Tablet läuft und per Touch auf die Buttons befehle an meinen Computer sendet und diese ausführt. Klappt wunderbar!
Jetzt zu meinem problem:
Wie oben beschrieben, reagiert OBS Studio auf HotKeys....
Auf meinem TClient, auf meinem PC, wird der befehl z.B. Szene 1 empfangen und führt momentan eine ShowMessage mit Szene1 als Text aus, Funktioniert auch wunderbar. (Maximiert und Minimiert)
Wie ist es mir aber jetzt mit PostMessage möglich, einen HotKey an OBS zu senden, der dann auf diesen HotKey reagieren soll?
Mit KeyDB_Event, funktioniert das ganze wunderbar, aber: auch nur, wenn OBS im vordergrund ist.
Mein derzeitiger Code fürs Szenenwechsel (Szene1):
Delphi-Quellcode:
procedure TForm1.fSzene1;
var
wnd: HWND;
lParam: LongInt;
begin
// ETS2
wnd := FindWindow(nil, 'OBS 20.0.1 (64bit, windows) - Profil: Twitch - Szenen: Unbenannt');
if wnd <> 0 then
begin
PostMessage(wnd, WM_KEYDOWN, VK_CONTROL, lParam);
PostMessage(wnd, WM_KEYDOWN, VK_MENU, lParam);
PostMessage(wnd, WM_KEYDOWN, VK_NUMPAD1, lParam);
PostMessage(wnd, WM_KEYUP, VK_NUMPAD1, lParam);
PostMessage(wnd, WM_KEYUP, VK_MENU, lParam);
PostMessage(wnd, WM_KEYUP, VK_CONTROL, lParam);
end
else
begin
ShowMessage('Fenster NICHT gefunden: ');
end;
end;
Szene1 ist die function die ausgeführt wird, beim drücken des Szene1 Buttons auf dem Tablet.
Delphi-Quellcode:
procedure TForm1.serverClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
Nachricht:AnsiString;
begin
Nachricht:=Socket.ReceiveText;
if Nachricht = 'Szene1' then fSzene1;
end;
wie gesagt, bis auf das PostMessage problem, funktioniert das alles Einwandfrei
Hoffe es war etwas verständlich erklärt
Gruss Jappa