Tastaturbefehle über Script an Windows übergeben

Guten Abend,

zu dem folgenden Anliegen habe ich nach langer suche im Netz und hier im Forum nichts gefunden.

Gibt es über Mairlist die Möglichkeit einen Tastaurbefehl (Alt+Bildauf und Alt+Bildab) an Windows zu übergeben, vielleicht sogar über ein Script?
Hintergrund ist, daß ich mit Mairlist von D&R ein Airlite nutze. Über das Airlite habe ich die Möglichkeit VoIP zu nutzen und das Airlite stellt auch die Funktionalität zur Verfügung über einen Connectbutton einen VoIP-Anruf zu starten, anzunehmen und zu beenden. Dafür gibt es von D&R ein Tool, was an die VoIP-Software Windowstastenbefehle (Shortcuts) übergibt. Das funktioniert auch, aber manchmal mag das Tool von D&R nicht den den Windows Shortcut übergeben. Wenn dann ein Anruf ins Studio kommt muss ich die Tastenkombination unter Windows selber drücken.

Daher dachte ich mir, daß ich vieleicht in Mairlist selber einen erweiterten Button einbaue, über den dann vielleicht per script der Tastaturbefehl an das VoIP-Program übergeben werden kann.

Schonmal jetzt vielen Dank für Eure Hilfe!

Frage am Rande: Was sagt denn der Support von D&R zu dieser vereinzelt auftretenden Fehlfunktion?

Da hat es bisher noch keinen Lösungsansatz gegeben. Es hatte auch sehr lange gedauert, bis es überhaupt auch einmal ein Update der VoIP Komponente gegeben hat, so daß es auch mit neuen Skype Versionen und auch anderen VoIP Programmen funktionierte. Da ich jetzt nicht wieder ewig warten möchte, dachte ich mir wenigsten einmal zu versuchen das VoIP Programm über Mairlist anzusprechen. Es gibt von D&R auch einen Virtuel Key Mapper, mit dem kann man genauso die Windows Shortcuts festlegen, so wie es das VoIP Connect Tool nur für den Connect Button macht. Wenn ich den aber laufen lasse, dann setzt mir das Tool andere Funktionalitäten ausser Kraft.

Okay, eine Frage noch zum Verständnis:
Die Fernsteuerung von mAirList mit dem Airlite funktioniert aber problemlos?

Ja, die Kommunikation zwischen Mairlist und dem Airlite funktioniert super.

Kannst Du uns mehr zur VoIP Software sagen?
Reagiert die überhaupt auf Hotkeys, wenn sie den Fenster Fokus nicht hat? Das könnte auch das Problem sein, was die D&R Software hat. Die meisten Windowsanwendungen nutzen keine Globalen Hotkeys.
Du musst also mindestens, das Programmfenster einmal mit der Maus selektieren.

Tastaturkommandos direkt aus mairlist heraus zu senden, würde also gar nicht ohne weiteres funktionieren, weil Du die Anwendung direkt adressieren musst.

Es gibt also verschiedene Ansätze, die man hier wählen kann.
Anwendungen wie Phoner haben z.B. Fernsteuer-Möglichkeiten.
Hat Deine Anwndung so etwas nicht, hilft vermutlich nur noch Autohotkey.
Es ist schon eine Weile her, dass ich damit gearbeitet habe, ich bin da also nicht 100% im Thema.

In Autohotkey ist es möglich, dass Du erst das Programmfenster Deiner VoIP Anwendung selektierst und erst dann die Hotkeys abfeuerst. Das müsste sich also so bauen lassen, dass Du dann über ein mAirlist Script, Deine Autohotkey Anwendung startest und die schickt das Kommando und beendet sich wieder.

Ich muss dazu mal ein paar Leute befragen, wie das genau funktioniert mit AHK. Alle Anwendungsfälle, die ich bisher hatte, da läuft AHK im Hintergrund und wartet auf bestimmte Ereignisse. Damit könnte man so wirre Dinge tun, wie: Reagiere auf einen bestimmten Begriff der im mAirlist Programmfenstertitel steht (den man auch aus eine Script heraus ändern könnte). Finde ich aber äusserst unsauber.

Vielen lieben Dank für Deine sehr ausführlichen Erläuterungen. Ich nutze tatsächlich Phoner und das Programm läuft permanent im Hintergrund und lauscht auch auf die vorgegebenen Hotkeys wie z.b. ALT+Bildrauf oder ALT+Bildab. Das Tool von D&R hat offenbar manchmal Probleme zu erkennen, das am Airlite der Connect Button gedrückt wurde und somit reagiert das Tool dann auch nicht, um den Hotkey zu aktivieren bzw. auszulösen. Ich kann aber jederzeit über die Tastatur mit dem Hotkey Phoner nutzen, auch wenn es minimiert ist. Somit würde ich mal behaupten das Phoner auf Systemweite Hotkeys reagiert.

OK, mit Phoner oder Phoner Lite, müsste das auch ohne Hotkeys gehen.
Auch das ist schon ewig her, dass ich mich damit mal beschäftigt habe. Welche der beiden Versionen hast Du?

Wenn ich mich da recht erinnere, kannst Du einfach die Phoner.exe mit einem Parameter aufrufen, der wird auch an laufenden Instanzen übergeben. Ich weiß nur gerade nicht ob da einer dabei war zum abheben.

Ich habe das hier gefunden:

Dear all,

The issue with the not working CONNECT button is solved. Please follow actions below:

  1. Install latest Airlite firmware (v1.20)
  2. Install latest D&R VoiP Connect (v1.0.140.0)

DOWNLOAD:
https://www.d-r.nl/wiki/dokuwiki/doku.php?id=supairlite:start

All should work fine now.

Kind regards,

Corné

https://www.d-r.nl/forum/index.php?PHPSESSID=68cb923dd99e0339b9a53673f4f758aa&topic=472.msg803#msg803

@shorty.xs
Ich selber nutze Phoner und nicht Phoner (light).

@UliNobbe
Diese Updates kamen ich glaube im März und lösten dann die Probleme, daß der Connect Button auch mit den neuen Skypeversionen und anderen VoIP Programmen funktioniert, da man in diesen Versionen dann die Programme über Systemweite Hotkeys steuern kann. Und seit dem nutze ich auch Phoner. Gelöst wurde aber bisher nicht, dass manchmal nicht die Kommunikation zwischen dem Connect Button und dem VoIP Programm von D&R funktioniert. Sprich das Programm von D&R bekommt manchmal nicht mit, das der Connect Button gedrückt wurde und kann somit an Phoner nicht den Hotkey übermitteln, denn es weiß ja nicht das es dies nun machen soll.

[OT]

Die Unterschiede sollten marginal sein. Ich selber benutze am Senderechner auch PhonerLite; es wird - glaube ich - sogar empfohlen, wenn die kleinen Unterschiede, die auf der Homepage aufgelistet sind, nicht ins Gewicht fallen.

Über Fernsteuerungen von PhonerLite habe ich mir noch gar keine Gedanken gemacht, klingt aber interessant (bei mir dann via PrehKeyTec).

An Deiner Stelle würde ich aber tatsächlich mal den Ansatz von @shorty.xs verfolgen, ob Phoner immer die vordergründige Anwendung war oder eben auch manchmal nicht.
Soweit ich weiß, macht Phoner zwar auf einen eingehenden Anruf aufmerksam, drängelt sich aber nicht automatisch in den Vordergrund.

[/OT]

Mit dem D&R Mapping Programm habe ich mich noch gar nicht beschäftigt. Das leitet also einen Tastendruck demnach wohinauchimmer bzw. setzt ihn um?

Und weil mAirList besser “zuhört” als das D&R-Programm, soll mAirList es jetzt richten?
Hm… :thinking:

Da mAirList bislang noch nicht Verbindungen mit VoIPs jedweder Art implementiert hat - und ich möchte hier gar keine schlafenden Hunde wecken! -, wäre das ein möglicher Ansatz gewesen.
Andererseits: Du möchtest also, dass mAirList auf die Taste “hört” und dann einen Befehl an Windows rausgibt, richtig? Also gewissermaßen die Umleitungsstrecke für D&R Mapping?

Sofern das technisch möglich ist, sehe ich Torben vor meinem geistigen Auge schon wieder so: :roll_eyes: - aber fragen kostet in der Tat nix.

@UliNobbe
Ich möchte nicht, das Mairlist irgendwas richtet, sondern frage lediglich ob Mairlist in der Lage ist über ein Script z.B. die Tastenkombination ALT+Bildauf und ALT+Ab an Windows zu übergeben, da Phoner auf diese Tastenkombinationen lauscht. Damit würde ich dann lediglich die Nutzung des Connect-Buttons am Airlite umgehen. Sobald ein Anruf reinkommt, setzt sich Phoner automatisch in den Vordergrund. Drücke ich selber die Tastenkombination auf der Tastatur dann funktioniert es immer.

Für das Keymapping von D&R habe ich mal ein Bild hochgeladen, wo man sieht, daß es lediglich auf Eingaben am Airlite lauscht und dann vergebene Hotkeys an Windows übergibt. Mairlist muss ja nicht auf Aktionen vom Airlite lauschen.

D_R_virtuell_keybord_mapper

Genau das habe ich schon gelesen und die Parameter hatte ich auch einmal gefunden. Ich weiß nur nicht, wie ich das in einem Script mit Mairlist umsetze, denn das wäre ja ein zweiter Weg. Weißt Du vielleicht, wie man das in einem Script in Mairlist umsetzen kann?

@UliNobbe
Was ich noch schreiben wollte ist, wenn ich den Mapper nutze dann funktioniert das Airlite nicht richtig mit Mairlist. Daher ist der Mapper für mich nicht brauchbar. Ich denke mal, das sich der Mapper mit der Fernsteuerung in Mairlist in die Quere kommt.

Alsoooo… mit mAirList geht das aktuell nicht - oder nicht so 1:1. Vielleicht später mal, Torben behält das im Hinterkopf.

Jetzt kommt @shorty.xs ins Spiel: Es gibt von Microsoft die keybd_event function:

Vielleicht lässt sich aus der API ja was basteln?
In mAirList ist es jedenfalls (noch) nicht drin. Aber eventuell lässt sich da was antriggern?

Da müssen meiner Meinung nach erst mal andere ran. War jedenfalls eine spontane Idee von Torben.

Das geht mit

ShellExecute(<Befehl>,<Parameter>);

 

Ausgeführte Grüße

TSD

Hi Tondose,

vieeeelen lieben Dank. Genau das funktioniert und ist auch eine fantastische Lösung, die sich im Script sogar nicht nur mit Button integrieren läßt, sondern auch als Hintergrundscript, wo man mit ID´s als Fernsteuerung arbeitet.
Hier die Parameter, welche ich gefunden habe und wohl von Phoner genutzt werden. Getestet habe ich allerdings nur die Parameter “DISCONNECT” und “ANSWER”, da ich die anderen nicht benötige.

CONNECT (Die in PARAMETER enthaltene Rufnummer wird gewählt)
DISCONNECT (Der aktuelle Ruf wird beendet)
CONNECTCB (Die in der Zwischenablage befindliche Rufnummer wird gewählt)
UNPARK (Der Ruf mit der in PARAMETER enthaltenen ID wird “entparkt”)
WAVE (Über den aktuellen Ruf wird die in PARAMETER enthaltene Wave-Datei (.wav) abgespielt)
ANSWER (Der gerade anstehende eingehende Ruf wird angenommen)

Ich habe auch inzwischen sogar einen sehr alten Beitrag gefunden, wo jemand das als Hintergrundscript verfasst hat und somit die Parameter mit Fernsteuerungs ID´s anspricht. Das habe ich aber nicht getestet.

Dang it! Jetzt habe ich schon wieder eine neue Bastelidee und meine bisherigen sind noch nicht mal abgeschlossen. Einzig, es fehlt eine Rückmeldung von Phoner an mAirlist um einen Eindeutigen Status zu haben und für eine Anrufsignalisierung. Ich habe da eine mögliche Idee, die aber ggf. Torbens Lizenzkonzept unterwandert, daher werde ich das hier erst einmal offen lassen. Eigentlich ein klarer Fall für das REST Interface.

Obwohl, was passiert, wenn ich einen Befehlt absetze, den Phoner gerade nicht verarbeiten kann? Läuft der dann einfach ins leere?

Folgender Ansatz (für mein EELA S440 und alle anderen Pulte die per Gamepad, Midi oder sonst was mit mAirlist reden)

Ich habe 2 Telko Kanäle, für den Anfang würde ich mal einen mit Phoner belegen.
Zutaten:

  • Dedizierte Soundkarte für Phoner
  • Game-Pad Input vom Mischpult
  • S443 Kanalzug
  • Phoner (ggf. Phoner Lite)
  • DBX 166XL (Spielt für die Grundidee keine Rolle)
  • mAirlist Script
  • Rückweg Ring-Signalisation von Phoner noch offen

Das Script muss ich mal angehen.

Hallo Malte,

bei der Sache mit dem Rückkanal beschäftige ich mich auch schon seit Tagen. Ich habe gelesen, das es per REST Fernsteuerung gehen soll. Ich habe nur die Advanced Licence und da ist das Modul für REST Fernsteuerung nicht mit drin.
Ein anderer Ansatz war, dass man bei Phoner eine andere Applikation ansprechen kann, was auch funktioniert. Allerdings weiß ich noch nicht, wie ich das mit Mairlist abfragen kann. Dritter weg wäre über die Phoner API. Da habe ich auch einmal D&R angeschrieben für eine Umsetzung für das Airlite, was dann aber nichts mehr mit Mairlist zu tun hat.

Das ist genau der Punkt, damit würde man dann per REST Interface einen entsprechenden Befehl an mAirlist schicken. In meinem Home-Studio, habe ich auch keine Pro-Lizenz, mit der das ginge.

Bisher habe ich mal das hier:

    const
      Phoner1 = 'C:\Program Files (x86)\Phoner\phoner.exe'; // <-- Pfad zum ersten Phoner
      Phoner2 = 'C:\ich_habe\mein_phoner\irgnendwoanders\hin_kopiert\phoner.exe'; // <-- Pfad zum zweiten Phoner

    procedure OnLoad;
      begin
        SetRuntimeData('VOIP1', 'false');
    	SetRuntimeData('VOIP2', 'false');
      end;



    procedure OnExecuteCommand(Command: string);
    begin
      if Command = 'VOIP 1 OFF HOOK' then begin
        ShellExecuteHidden(Phoner1,'ANSWER');
    	SetRuntimeData('VOIP1', 'true');
      end;
      else if Command = 'VOIP 1 ON HOOK' then begin
        ShellExecuteHidden(Phoner1,'DISCONNECT');
    	SetRuntimeData('VOIP1', 'false');
      end;
      else if Command = 'VOIP 2 OFF HOOK' then begin
        ShellExecuteHidden(Phoner2,'ANSWER');
    	SetRuntimeData('VOIP2', 'true');
      end;
      else if Command = 'VOIP 2 ON HOOK' then begin
        ShellExecuteHidden(Phoner2,'DISCONNECT');
    	SetRuntimeData('VOIP2', 'false');
      end;
    end;

Beim aktivieren eines Game-Pad Kontaktes werden die entsprechenden OFF Hook Cammands zugewiesen und beim -deaktivieren, die ON-Hook Commands.

Ich schreibe mir den Status hier noch weg in die Runtime-Data um sie ggf. später woanders noch zu benutzen.