Generate AltGr+F10 and Shutdown

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Generate AltGr+F10 and Shutdown

    Hi,

    ich muss ein bissl ausholen ... ich hoffe, ihr habt ein wenig Geduld mit mir.

    Früher gab es VHS Video Recorder. Da konnte man einen Sender und eine Zeitspanne auswählen ... und dann hat das Gerät etwa von 23:00 - 01:00 eine Sendung aufgenommen und dann abgeschaltet.

    Heute habe ich einen Smart TV ... und da geht das nicht mehr so einfach. :) Deshalb würde ich diese Funktionalität gern auf meinem PC realisieren.

    Ich habe dafür "obs" (online browser software) installiert ... da kann man ein PC Window "recorden" ... und das funktioniert auch hervorragend !

    Gestartet wird die Aufnahme (gemäß meiner Konfiguration) über AltGr+F9 ... und beendet wird sie mit AltGr+F10. Diese Keys sind bei mir ansonsten nicht belegt.

    AltGr+F9 drücke ich, wenn ich noch wach bin. Aber dann gehe ich schlafen. :)

    Und jetzt würde ich gern, etwa zwei Stunden später AltGr+F10 zum Beenden der Aufnahme generieren und dann den PC herunterfahren. (Während ich schlafe ... ).

    Mit anderen Worten: Ich schreibe ein Programm, dass über einen Timer zu einer bestimmten Zeit genau dies tut. Das mit dem Timer ist kein Problem. Aber wie schaffe ich das:

    1. Die Tastenkombination AltGr+F10 per Programm auslösen.
    2. Den PC per Shutdown vom Program aus herunterfahren.

    Ich hoffe, ich habe mein Problem verständlich darstellen können. Ich bin sicher, dass ihr mir wie immer freundlich und nachsichtig sagen könnt, wie ich das gebacken bekomme.

    LG
    Peter
    @Peter329 Merkt das Programm, dass die Aufnahme beendet ist oder nimmt er einen Stream ohne Ende auf?
    Im eresten Fall nimmst Du einen FileSystemWatcher, der meldet, dass die Aufnahme beendet ist und fährt den PC runter.
    Im zweiten Fall beendet ein Timer nach der eingestellten Uhrzeit die Aufnahme und das Programm und fährt den PC runter.
    Ggf. ist es besser, den PC in den Ruhezustand zu versetzen als ihn hart runterzufahren, weil ggf. einige Programme nicht runtergefahren werden wollen, weil nicht gespeichert worden ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Im zweiten Fall beendet ein Timer nach der eingestellten Uhrzeit die Aufnahme und das Programm und fährt den PC runter.


    Genau das ist meine Frage:

    Wie sende ich AltGr+F10 vom einem VB Programm aus ... und wie löse ich einen Shutdown von meinem VB Programm aus.

    Ich habe dunkel in Erinnerung, das es dafür entsprechende Windows Funktionen gibt, die man von VB aus aufrufen kann ...

    LG
    Peter

    Peter329 schrieb:

    Wie sende ich AltGr+F10 vom einem VB Programm aus
    Nimm API.SendMessage() pinvoke.net/search.aspx?search=SendMessage&namespace=user32
    zur Ruhe gehst Du mit

    VB.NET-Quellcode

    1. Application.SetSuspendState(PowerState.Hibernate, True, True)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    AltGr+F10-Tastenkombi an die aktive App senden: SendKeys.SendWait("^%{F10}")
    Befehl zum Komplettrunterfahren: Process.Start("shutdown /s /t x"), wobei x die Zahl der Sekunden bis zum Runterfahren sind.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    OBS hat diese Funktionalität zum Beenden der Aufnahme schon selbst - wenn du das nicht unbedingt selbst über ne Fernsteuerung mit Hotkeys machen willst, kannst du einfach unter Tools > Output Timer selbst so nen Timer für das Beenden der Aufnahme einstellen.
    Danke für die Antworten.

    Ich weiß, ich kann im obs die Aufnahmezeit einstellen. Aber da kann ich nicht veranlassen,dass mein PC auch heruntergefahren wird. Deswegen brauche ich wohl schon ein VB Programm.

    Das mit dem Hibernate von RFG klappt prima.

    Aber ich würde trotzdem gerne den PC komplett herunterfahren ... und hab versucht die Lösung von Vaporized umzusetzen.

    VB.NET-Quellcode

    1. Process.Start("shutdown /s /t 10")


    Da kriege ich allerdings einen Fehler (s. Anhang) ... der Aufruf sieht vermutlich irgendwie anders aus ... ich hoffe, ihr könnt mir helfen.

    LG
    Peter
    Bilder
    • s 2021-03-22 09-38-333.jpg

      82,3 kB, 1.241×416, 63 mal angesehen
    Du musst den Pfad zur shutdown.exe vollständig angeben.

    VB.NET-Quellcode

    1. Dim ShutdownPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System),"shutdown.exe")
    2. Dim ShutdownParameters = "/s /t 10"
    3. ​Process.Start(ShutdownPath, ShutdownParameters)

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Sorry, falsche Syntax von mir.
    Process.Start("shutdown", "/s /t x")
    Ein collständiger Pfad muss aber nicht angegeben werden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Jau, das mit dem "Shutdown" funktioniert jetzt problemlos ! Danke !

    Jetzt muss ich natürlich noch vor dem Shutdown die OBS Aufnahme durch die (generierte) Eingabe AltGr+F10 beenden. Ich habe das wie angeraten versucht:

    VB.NET-Quellcode

    1. SendKeys.SendWait("^%{F10}")


    Aber da tut sich leider nichts !

    Ich hab das Gefühl, das AltGr+F10 kommt bei meinem VB Programm an ... und da bewirkt es natürlich nichts !

    AltGr+F10 muss an Windows geschickt werden ... dann wird es als Hotkey an OBS geschickt ...

    Ich hab die Lösung von RFG versucht umzusetzen ... aber da verstehe ich die Referenz nicht ! Es gibt da zig Formate ...

    Ich hoffe, ich habe mein Problem verständlich machen können.

    LG
    Peter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()

    Peter329 schrieb:

    Aber da tut sich leider nichts !
    Klar.
    Das Zielfenster muss den Eingabefokus haben, und das ist nicht ganz trivial.
    Du musst Dir per Process-Instanz das Handle des Hauptfensters holen, und damit API.SetActiveWindow(hWnd), API.SetFocusWindow(hWnd) oder so aufrufen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ggf. brauchst Du auch Adminrechte für Dein Programm, sonst kann es passieren, dass SendKeys zwar ausgeführt wird, aber Windows verhindert, dass das im Zielprogramm ankommt.
    Das mit dem Fokussieren geht normalerweise auch hiermit: externe .NET-Programme manipulieren
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ok, hab ich verstanden ... und das werde ich auch ausprobieren.

    Zur Zeit fahre ich meinen Rechner einfach runter. Aus die Maus. Und offensichtlich kommt OBS damit klar ... aber das werde ich jetzt erst mal genauer testen.

    Tja ... und schon funktioniert mein PC als Video Recorder ... wie ein VHS Recorder aus der Steinzeit ! :)

    Vielen Dank für eure Hilfe ... ihr wisst gar nicht wie sehr ihr meinen Tag gerettet habt !

    LG
    Peter