Einzelnen Beitrag anzeigen

Jappa

Registriert seit: 19. Sep 2017
9 Beiträge
 
#1

PostMessage an FindWindow

  Alt 22. Sep 2017, 22:03
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 = 'Szene1then fSzene1;
end;
wie gesagt, bis auf das PostMessage problem, funktioniert das alles Einwandfrei


Hoffe es war etwas verständlich erklärt


Gruss Jappa

Geändert von Jappa (22. Sep 2017 um 22:13 Uhr)
  Mit Zitat antworten Zitat