wise-white
wise-white9mo ago

USB-Ports per Software ein und ausschalten.

Moin, kennt jemand eine Software mit der man bequem (evtl. sogar automatisiert bei best. Szenarien) einzelne USB Ports abschalten kann? Ich möchte gern die Maus und Tastatur am Arbeitsplatz Totschalten können, sobald z.B. iRacing läuft. Voraussichtlich muss ich eh eine PCIe-USB-Karte oder alternativ ein Slotblech mit Direktanschluss auf das Mainboard nachrüsten, wäre also auch denkbar das dann komplett abzuschalten.
35 Replies
graceful-beige
graceful-beige9mo ago
Könntest dir nen usb Switch holen. Sowas nutze ich um zwischen privat pc und firmennotebook zu wechseln. Knöpfchen drücken und fertig
wise-white
wise-white9mo ago
Könnte ich, will aber nicht 😅 Klingt vielleicht blöd, aber ich muss oft genug wieder aus dem Rig klettern, weil ich ich irgendwas vergessen habe und das kommt dann noch dazu 🙈
adverse-sapphire
adverse-sapphire9mo ago
Kannst du nicht die PCI-E Karte im Gerätemanager deaktivieren und aktivieren?
wise-white
wise-white9mo ago
Ja, das wird sicher gehen. Ich suche eine Software, die genau das für mich macht. (Oder was ähnliches) Soll halt bequem sein und am besten automatisierbar (wenn Software X startet, dann schalte aus und umgekehrt) Achso und switch geht leider nicht wegen passthroug oder wie das heißt. Hab ne spezielle Maus am Arbeitsplatz, die switches und hubs nicht mag. 🤷‍♂️
graceful-beige
graceful-beige9mo ago
Warum willst du die Maus am Schreibtisch überhaupt totschalten? Könntest dir ein Script auf das Streamdeck legen das die Karte im Gerätemanager deaktiviert. Und das Ding dann in eine Sequenz packen. Da kannst du dann mit einem Knopfdruck alle Tools starten.
graceful-beige
graceful-beige9mo ago
Erziehung? WeirdDude
wise-white
wise-white9mo ago
Hast keine gell?!
graceful-beige
graceful-beige9mo ago
Doch Aber die is erzogen Die geht nirgends drauf Nur auf Stühle und Sofa Und Sitz im rig
wise-white
wise-white9mo ago
Die Idee gefällt mir. Aber wo bekomm ich das Skript her? 😅
graceful-beige
graceful-beige9mo ago
Müsste mit powershell funktionieren
wise-white
wise-white9mo ago
Kannste bei meinen vergessen. Muss aber auch gestehen, dass die überall hin dürfen. Sehe nicht warum nicht
graceful-beige
graceful-beige9mo ago
Weil du jetzt ein Script schreiben musst zum Beispiel
exotic-emerald
exotic-emerald9mo ago
Die Katze von @BEn hat sogar mal während eines LFM Rennens was in den InGame Chat geschrieben KEKW
graceful-beige
graceful-beige9mo ago
# Gerätename oder Teil des Namens, den Sie deaktivieren möchten
$geräteName = "<GeräteName>"

# Suchen Sie das Gerät im Geräte-Manager
$gerät = Get-PnpDevice | Where-Object { $_.FriendlyName -like "*$geräteName*" }

# Überprüfen, ob das Gerät gefunden wurde
if ($gerät -ne $null) {
# Deaktivieren Sie das gefundene Gerät
Disable-PnpDevice -InstanceId $gerät.InstanceId -Confirm:$false
Write-Output "Das Gerät '$($gerät.FriendlyName)' wurde erfolgreich deaktiviert."
} else {
Write-Output "Das Gerät mit dem Namen '$geräteName' wurde nicht gefunden."
}
# Gerätename oder Teil des Namens, den Sie deaktivieren möchten
$geräteName = "<GeräteName>"

# Suchen Sie das Gerät im Geräte-Manager
$gerät = Get-PnpDevice | Where-Object { $_.FriendlyName -like "*$geräteName*" }

# Überprüfen, ob das Gerät gefunden wurde
if ($gerät -ne $null) {
# Deaktivieren Sie das gefundene Gerät
Disable-PnpDevice -InstanceId $gerät.InstanceId -Confirm:$false
Write-Output "Das Gerät '$($gerät.FriendlyName)' wurde erfolgreich deaktiviert."
} else {
Write-Output "Das Gerät mit dem Namen '$geräteName' wurde nicht gefunden."
}
grüße gehen raus an chatgpt write-output kannst du löschen wenn du keine ausgabe möchtest
Felix
Felix9mo ago
In dem Fall dann aber den Else Zweig entfernen und die if Abfrage negieren und das Script um Falle von True beenden. Zumindest, wenn man es sauber haben möchte. Ich kann die Tage mal schauen, ob es eine schnelle Lösung über Global Hotkeys gibt. Ich programmiere beruflich mit C#. Will aber noch nichts versprechen, da ich auch erstmal die Zeit finden muss, etc.
wise-white
wise-white9mo ago
Das wär ein Traum 😍 Ich hab jetzt gesehen, dass ich das mit displayfusion automatisieren könnte. Das will C#. Hab aber leider absolut null Dunst wie ich das Skript schreiben müsste. Verstehe da oben nur Bahnhof.
Felix
Felix9mo ago
Displayfusion kenne ich nicht. Aber ich habe in etwa eine Idee, wie ich das umsetzen könnte. Bin aber noch bis Samstag im Urlaub. Kann dir nicht sicher sagen, wann ich testen kann. Falls du zwischenzeitlich schon eine Lösung gefunden hast, sag am besten hier Bescheid. @Julian Pforte Kurze Frage: Wie willst du denn eigentlich Maus und Tastatur wieder aktivieren, wenn du sie vorher deaktiviert hast? Stellt das nicht ein Widerspruch dar? Auswertung von System-Ereignissen? Würde ggf gehen, aber wenn das mal nicht zieht, hast du ein Problem 🙂
wise-white
wise-white9mo ago
Die sollen sich wieder aktivieren, wenn das entsprechende Bildschirmprofil in Displayfusion erkannt wird. (Wenn ich mein Rig Stromlos schalte geschieht das von allein) Im Notfall habe ich aber im Rig noch ein zweites Set mit dem ich das dann triggern könnte. Hat keine Eile. Vielen Dank für das Angebot, das ich sehr gern annehme. Falls du irgendwas wissen musst, was Displayfusion da treibt um das Skript zu triggern, kann ich dir das gern zeigen bzw. schicken.
Felix
Felix9mo ago
Ah, okay. Dann sind es wahrscheinlich nur zwei C# Scripts. Eins zum Aktivieren und eins zum Deaktivieren. Sollte machbar sein 👍
probable-pink
probable-pink9mo ago
Moin, leider erst jetzt diesen Post gesehen, ich nutze NoJoy für genau solche Zwecke https://github.com/ssg/NoJoy
GitHub
GitHub - ssg/NoJoy: Tool for quickly enabling/disabling game contro...
Tool for quickly enabling/disabling game controllers - GitHub - ssg/NoJoy: Tool for quickly enabling/disabling game controllers
probable-pink
probable-pink9mo ago
Funktioniert für mich problemfrei
magic-amber
magic-amber9mo ago
Boah fühle kekw
Felix
Felix9mo ago
@Julian Pforte Ist das Thema noch relevant? Ich hatte bisher keine Zeit, danach zu schauen. Oder funktioniert für dich die Lösung von Benjamin?
wise-white
wise-white9mo ago
wäre noch relevant, wenn du Bock darauf hast. Die Lösung mit deinem Skript über DisplayFusion ist schon die elegantere. Aber musst dich deshalb nicht stressen. so eilig ist es nicht
Felix
Felix9mo ago
Okay. Ich versuche morgen Abend mal ein Skript zu erstellen.
wise-white
wise-white9mo ago
❤️
Felix
Felix9mo ago
Werde es mit einem USB Stick testen. Wichtig ist, dass sich diese Einstellung spätestens nach einem PC Neustart resettet. Achso kurz noch vorweg: Höchstwahrscheinlich ist es nicht so einfach möglich, spezielle USB Ports zu deaktivieren, ohne tief ins Betriebssystem einzugreifen. Stattdessen können aber daran angeschlossene Geräte deaktiviert werden. Muss ich aber ausprobieren.
wise-white
wise-white9mo ago
Wäre es dann einfacher eine ganze PCIe Karte zu deaktivieren? dann würde ich sowas dafür nutzen 🤔
Felix
Felix9mo ago
Ziel ist doch, bestimmte Geräte zu deaktivieren, oder?
wise-white
wise-white9mo ago
Richtig, aber ich kann die ja einfach an die Karte anschließen und fertig. Ist eine Tastatur und ne Maus 🤷‍♂️ Und wenn es stumpf die karte ist, kann ich da bei bedarf einfach noch was dazu packen ohne das skript ändern zu müssen
Felix
Felix9mo ago
@Julian Pforte Habe gerade ein bisschen was ausprobiert. Das Deaktivieren / Aktivieren von einzelnen USB Ports bzw. daran angeschlossene Geräte ist leider gar nicht so einfach. Das muss über die Registry erfolgen und das würde ich eher nicht empfehlen. Die Variante mit der PCIe Karte ist tatsächlich die bessere. Ich kann das bei mir zu Hause nicht testen, da ich eine solche Karte nicht habe. Deswegen kann ich dir leider nur das geben, was mir ChatGPT auf die Schnelle dazu ausgespuckt hat:
static void ExecuteCommand(string command)
{
var processStartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
};

using var process = new Process { StartInfo = processStartInfo });

process.Start();
process.StandardInput.WriteLine(command);
process.StandardInput.WriteLine("exit");

var output = process.StandardOutput.ReadToEnd();
var error = process.StandardError.ReadToEnd();

process.WaitForExit();

Console.WriteLine("Output:\n" + output);
Console.WriteLine("Error:\n" + error);
}

// Setzen Sie den Pfad zum Devcon-Dienstprogramm
var devconPath = @"C:\Pfad\zu\devcon.exe"; // Ersetzen Sie durch den tatsächlichen Pfad

// Setzen Sie die Geräte-ID Ihrer PCIe-Karte
var deviceId = "PCI\\VEN_XXXX&DEV_YYYY"; // Ersetzen Sie durch die tatsächliche Geräte-ID

// Konstruieren Sie den Befehl zum Deaktivieren des Geräts
var disableCommand = $"{devconPath} disable \"{deviceId}\"";

// Führen Sie den Befehl aus
ExecuteCommand(disableCommand);
static void ExecuteCommand(string command)
{
var processStartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
};

using var process = new Process { StartInfo = processStartInfo });

process.Start();
process.StandardInput.WriteLine(command);
process.StandardInput.WriteLine("exit");

var output = process.StandardOutput.ReadToEnd();
var error = process.StandardError.ReadToEnd();

process.WaitForExit();

Console.WriteLine("Output:\n" + output);
Console.WriteLine("Error:\n" + error);
}

// Setzen Sie den Pfad zum Devcon-Dienstprogramm
var devconPath = @"C:\Pfad\zu\devcon.exe"; // Ersetzen Sie durch den tatsächlichen Pfad

// Setzen Sie die Geräte-ID Ihrer PCIe-Karte
var deviceId = "PCI\\VEN_XXXX&DEV_YYYY"; // Ersetzen Sie durch die tatsächliche Geräte-ID

// Konstruieren Sie den Befehl zum Deaktivieren des Geräts
var disableCommand = $"{devconPath} disable \"{deviceId}\"";

// Führen Sie den Befehl aus
ExecuteCommand(disableCommand);
Das könntest du mal testen. Wie gesagt, ich kann es leider nicht ausprobieren, da mir die Hardware dazu fehlt. Habe natürlich drüber geschaut und der Programmcode sieht für mich vernünftig aus. Kleine Verbesserungen habe ich auch gemacht. Du kannst es ja mal ausprobieren und mir Rückmeldung geben, obs funktioniert hat 👍
wise-white
wise-white9mo ago
Danke dir! Muss die Karte auch erstmal besorgen 😅 werd das aber direkt mal in Angriff nehmen
Felix
Felix9mo ago
Jop. Zum Aktivieren wäre der Command dann natürlich so:
var enableCommand = $"{devconPath} enable \"{deviceId}\"";
var enableCommand = $"{devconPath} enable \"{deviceId}\"";