# Plandent MSTSC Script Hook Native Windows-x64-Lösung zur Verbindung von lokal auf einem RDP-Client installierten Programmen mit Anwendungen und Abläufen innerhalb einer Terminalserver-Sitzung. Das Projekt ist insbesondere für drei praktische Einsatzfälle vorgesehen: 1. **RemoteVDDS-Receiver beim Aufbau einer RDP-Verbindung automatisch lokal starten.** 2. **Ein fest vorkonfiguriertes lokales Programm bei Bedarf aus der RDP-Sitzung starten.** 3. **Eine Anwendung innerhalb der RDP-Sitzung über SIOMIN/SLIDA mit einem lokal installierten Sidexis verbinden.** Die Lösung ist für den klassischen Microsoft Remote Desktop Connection Client `mstsc.exe` ausgelegt. ## Typischer Einsatzzweck In einer Terminalserver-Umgebung befinden sich Praxissoftware oder andere Fachanwendungen innerhalb der RDP-Sitzung, während bestimmte Programme auf dem lokalen Arbeitsplatzrechner ausgeführt werden müssen. Der Plandent MSTSC Script Hook stellt dafür eine kontrollierte Verbindung zwischen Terminalserver-Sitzung und lokalem Client bereit. Programme und Parameter werden ausschließlich auf dem Client vorkonfiguriert. Eine Anwendung auf dem Terminalserver kann keinen beliebigen lokalen Programmpfad übergeben. ## Komponenten ### Lokaler RDP-Client **`PlandentMstscScriptHook.exe`** Konfiguration und Installation des Client-Plugins. Hier werden zwei voneinander unabhängige Starts eingerichtet: - automatischer Programm-/Scriptstart nach erfolgreichem RDP-Verbindungsaufbau, - Programm-/Scriptstart auf Anforderung aus der Terminalserver-Sitzung. Die benötigte Plugin-DLL ist in der EXE eingebettet und wird bei der Installation automatisch eingerichtet. ### Terminalserver **`PlandentRdpClientTrigger.exe`** Löst innerhalb der aktuellen RDP-Sitzung den auf dem Client vorkonfigurierten Programmstart aus. Die EXE benötigt keine Parameter. Welches Programm gestartet wird, ist ausschließlich auf dem lokalen Client hinterlegt. **`PlandentSiominClientTrigger.exe`** Spezialisierter Trigger zur Anbindung einer Anwendung innerhalb der RDP-Sitzung an ein lokal installiertes Sidexis. Der Trigger: - ermittelt den tatsächlichen Hostnamen des lokalen RDP-Clients, - übernimmt einen temporär erzeugten SIOMIN-/SLIDA-Eintrag, - ersetzt darin den Terminalservernamen durch den Hostnamen des lokalen Clients, - schreibt den angepassten Eintrag in die finale `siomin.sdx`, - leert anschließend die temporäre Datei, - startet danach das auf dem Client konfigurierte Programm. ## RemoteVDDS Ein vorgesehener Anwendungsfall ist die Verwendung mit den **RemoteVDDS-Scripten von Tobias Bauer**. Der RemoteVDDS-Receiver kann über den Bereich **Automatischer Start bei RDP-Verbindung** auf dem Client eingetragen werden. Dadurch wird der Receiver beim Aufbau der Terminalserver-Verbindung automatisch und auf Wunsch unsichtbar im Hintergrund gestartet. Beispiel: ```text Programm/Script: C:\RemoteVDDS\RemoteVDDS_Receiver_TS.bat Argumente: MIN Unsichtbar starten: Ja Mehrfachstart verhindern: Ja ``` Bei Auswahl einer Datei mit `RemoteVDDS_Receiver_TS` im Namen schlägt der Konfigurator bei leeren Argumenten automatisch `MIN` vor. Die RemoteVDDS-Scripte selbst sind **nicht Bestandteil dieses Projekts** und unterliegen den Rechten ihres jeweiligen Autors. ## Programmstart aus der RDP-Sitzung Soll ein lokales Programm nicht bei jeder RDP-Verbindung, sondern nur bei Bedarf gestartet werden, wird es auf dem Client im Bereich **Programmstart durch Terminalserver** konfiguriert. Innerhalb der RDP-Sitzung wird anschließend lediglich ausgeführt: ```text PlandentRdpClientTrigger.exe ``` Der Trigger startet das auf dem Client hinterlegte Programm. Programmpfad und Parameter werden nicht vom Terminalserver übertragen. ## Sidexis über SIOMIN aus einer RDP-Sitzung ansprechen Für Programme, die innerhalb der Terminalserver-Sitzung laufen, aber ein **lokal installiertes Sidexis** ansprechen sollen, steht `PlandentSiominClientTrigger.exe` zur Verfügung. Im betreffenden Terminalprogramm wird als Sidexis-Programm bzw. Sidexis-EXE nicht direkt Sidexis, sondern beispielsweise folgende Datei hinterlegt: ```text C:\PDATA\exe\PlandentSiominClientTrigger.exe ``` Das Terminalprogramm sollte seinen SLIDA-/SIOMIN-Eintrag zunächst in eine **lokale temporäre Datei auf dem Terminalserver** schreiben, beispielsweise: ```text C:\PDATA\temp_siomin.sdx ``` Der SIOMIN-Trigger übernimmt diesen Eintrag anschließend in die finale `siomin.sdx`, die typischerweise im gemeinsamen PDATA-Verzeichnis liegt: ```text \\SERVER\PDATA\siomin.sdx ``` Die Konfiguration erfolgt über eine INI-Datei mit demselben Basisnamen wie die EXE: ```text PlandentSiominClientTrigger.exe PlandentSiominClientTrigger.ini ``` Beispiel: ```ini [SIOMIN] SIOMIN_TEMP_PATH=C:\PDATA\temp_siomin.sdx SIOMIN_PATH=\\SERVER\PDATA\siomin.sdx DEBUG=0 ``` Existiert die INI beim ersten Start nicht, wird sie mit lokalen Standardpfaden automatisch erzeugt: ```ini [SIOMIN] SIOMIN_TEMP_PATH=C:\PDATA\temp_siomin.sdx SIOMIN_PATH=C:\PDATA\siomin.sdx DEBUG=0 ``` Für die Fehlersuche kann `DEBUG=1` gesetzt werden. Dann wird neben der EXE eine gleichnamige `.log`-Datei erzeugt. ## Installation auf dem Client 1. `PlandentMstscScriptHook.exe` starten. 2. Gewünschten automatischen Start konfigurieren oder deaktivieren. 3. Optional ein separates Programm für den Terminalserver-Trigger konfigurieren. 4. Bei Bedarf **Start durch Terminalserver-Trigger erlauben** aktivieren. 5. Einstellungen speichern bzw. **Plugin installieren** wählen. 6. Bereits laufende `mstsc.exe`-Instanzen vollständig schließen. 7. RDP-Verbindung neu aufbauen. Die Installation erfolgt benutzerbezogen und benötigt im Normalfall keine Administratorrechte. ## Bereitstellung auf dem Terminalserver Je nach Anwendungsfall werden nur die benötigten EXE-Dateien auf den Terminalserver kopiert: ```text PlandentRdpClientTrigger.exe PlandentSiominClientTrigger.exe ``` Es ist dort keine Installation oder Registrierung erforderlich. ## Unterstützte lokale Programme Der Client kann folgende Typen starten: - `.exe` - `.bat` - `.cmd` - `.ps1` Programme können sichtbar oder unsichtbar gestartet werden. Optional kann ein Mehrfachstart verhindert werden. ## Logging Das Client-Plugin kann ein Log unter folgendem Pfad führen: ```text %LOCALAPPDATA%\Plandent\MstscScriptHook\plugin.log ``` Für den SIOMIN-Trigger kann separat über ```ini DEBUG=1 ``` eine Logdatei neben `PlandentSiominClientTrigger.exe` aktiviert werden. ## Build Voraussetzungen: - Windows 10/11 x64 - Visual Studio 2022 oder Build Tools - Workload **Desktopentwicklung mit C++** - Windows 10/11 SDK Release erstellen: ```powershell .\build-release.ps1 -Clean ``` Ausgabe: ```text dist\ ├── PlandentMstscScriptHook.exe ├── PlandentRdpClientTrigger.exe └── PlandentSiominClientTrigger.exe ``` Alle Komponenten sind native x64-Binaries. Eine .NET-Runtime wird nicht benötigt. ## Dokumentation - `Home.md` – Anwender-/Technikerdokumentation - `DEVELOPMENT.md` – technische Entwicklerdokumentation ## Hinweise Das Projekt ist für den klassischen Microsoft-RDP-Client `mstsc.exe` vorgesehen. Der Trigger muss innerhalb der RDP-Sitzung ausgeführt werden, deren lokaler Client angesprochen werden soll. Der lokale Programmstart erfolgt mit den Rechten des Benutzers, unter dem `mstsc.exe` auf dem Client ausgeführt wird. Produktnamen wie Sidexis sind Eigentum der jeweiligen Rechteinhaber. Die RemoteVDDS-Scripte von Tobias Bauer sind nicht Bestandteil dieses Projekts. ## Lizenz Copyright (c) 2026 Patrick Gniza. All rights reserved. Siehe [LICENSE](LICENSE).