Alternative zu AutoHotKey

Yuuri

Fleet Admiral
Registriert
Okt. 2010
Beiträge
13.928
Hallo zusammen,

gibts eine brauchbare scriptbare Alternative zu AutoHotKey? Aktuell will ich eigentlich mein Script erweitern um via Modifier + Volume die Lautstärke an meinem AVR zu steuern, allerdings ist AutoHotKey selbst nicht fähig TCP Pakete zu versenden und es mittels Socket-Klasse extrem fummelig ist, da mir nicht nur mal wieder die krude Syntax im Weg steht.

Ist da jemandem eine Alternative bekannt (außer AutoIt) - gern via PowerShell?

edit: Spezifischer: Automatisierung als Anwendung im Tray und Reaktion auf globale Hotkeys.



LG
 
Zuletzt bearbeitet:
Ja ich weiß, allerdings ist es nicht wie AutoHotKey einfach per Global HotKeys und im Tray verweilend verwendbar. Vielleicht sollte das ich genauer spezifizieren...
 
Für den Hotkey kannst du dir eine Verknüpfung zu dem Powershell-Skript an einer beliebigen Stelle anlegen. Dort dann Rechtsklick->Eigenschaften, da kannst du eine Tastenkombination hinterlegen.
Tray-Icon wird mit Powershell schwierig (unmöglich?).
Ansonsten arbeite dich in eine beliebige Programmiersprache ein. Bzgl. Tray-Icon vorzugsweise C# mit .NET Core.

Tray-Icons scheinen mit Powershell auch möglich zu sein: http://www.systanddeploy.com/2018/12/create-your-own-powershell.html
Schön ist aber was anderes.
 
burglar225 schrieb:
Für den Hotkey kannst du dir eine Verknüpfung zu dem Powershell-Skript an einer beliebigen Stelle anlegen. Dort dann Rechtsklick->Eigenschaften, da kannst du eine Tastenkombination hinterlegen.
Hab ich mir auch schon überlegt, aber bei jedem Trigger ne Konsole öffnen, das Profil laden, das Modul laden, das Script ausführen... Klappt nicht gut mit ner Lautstärkeänderung mittels Drehrad an der Tastatur und ich weiß auch nicht ob mir der Fokus dann wie gewünscht erhalten bleibt.

Bspw. hab ich für Ctrl + Win + A nen Always On Top Toggle für das aktuelle Fenster in meinem Script. Das klappt natürlich nicht, wenn mir durch die Verknüpfung, welche eine Konsole startet, der Fokus entrissen wird. Primär will ich das aber nicht ausprobieren wegen oben genanntem Grund.
burglar225 schrieb:
Tray-Icon wird mit Powershell schwierig (unmöglich?).
Möglich schon. Man müsste halt den üblichen Weg gehen und sich im Tray registrieren und verweilen.
burglar225 schrieb:
Ansonsten arbeite dich in eine beliebige Programmiersprache ein. Bzgl. Tray-Icon vorzugsweise C# mit .NET Core.
Deswegen PowerShell, weil ich das schnell scripten kann ohne dicke IDEs oder Build-Tools zu benötigen, aber trotzdem auf .NET zurückgreifen kann. ;)

Mir ist hierbei allerdings nichts bekannt, deshalb auch die Frage. Vielleicht kennt einer ne Alternative zu AutoHotKey, was ja öfter mal zur Automatisierung von irgendwas verwendet wird.
 
Würde es denn nicht reichen, wenn AutoHotKey kleine PowerShell-Scripte aufruft, die das tun, was getan werden muss?
 
  • Gefällt mir
Reaktionen: kuddlmuddl
Wäre nett, aber siehe
Yuuri schrieb:
Hab ich mir auch schon überlegt, aber bei jedem Trigger ne Konsole öffnen, das Profil laden, das Modul laden, das Script ausführen... Klappt nicht gut mit ner Lautstärkeänderung mittels Drehrad an der Tastatur und ich weiß auch nicht ob mir der Fokus dann wie gewünscht erhalten bleibt.
Ob nun via Explorer Verknüpfung oder manuellem Start ist dabei ja egal.

Ich kanns ja im Laufe des Tages ausprobieren.
 
Powershell ist halt eine Script-Engine. Wie ich schon angedeutet habe, sind deine Anforderungen vermutlich zwar alle machbar damit, aber das ist nicht Sinn der Sache. Das hast du ja auch bereits erkannt. Ich empfehle daher nach wie vor eine ordentliche Programmiersprache.
Es braucht dazu dieser Tage auch keine gigantischen IDEs und Build-Tools. Es reicht auch ein entsprechend konfigurierter Visual Studio Code.
 
  • Gefällt mir
Reaktionen: KitKat::new()
Evtl. ist Script Runner was für dich.
Bin mal zufällig drüber gestolpert, habe es aber nicht näher angeschaut.
 
Ka ob das zu deinem Setup passt - ich hab mein Soundsystem einfach "laut genug" eingestellt und regel dann unter Windows einfach leiser. Das ist aus theoretischer Sicht (signal-rausch-...) natürlich nicht optimal. Aber sehr bequem :)

Hier mein AHK dazu, um mit WIN+Mausrad lauter und leiser zu machen:

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#WheelDown::Volume_Down
#WheelUp::Volume_Up
 
Also mittels externem PowerShell-Script funktioniert es zwar, ist aber wie vermutet extrem zäh:
Code:
^Volume_Up::
    Run, pwsh -NoProfile C:\test\pioneer-send-message.ps1 -InputObject "VU`r"
    return
   
^Volume_Down::
    Run, pwsh -NoProfile C:\test\pioneer-send-message.ps1 -InputObject "VD`r"
    return
Code:
param(
    [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
    $InputObject
)

function set-avr()
{
    [CmdletBinding()]
    param (
        [Parameter(Position = 0)]
        [string]
        $RemoteHost = "10.2.0.1",

        [Parameter(Position = 1)]
        [int]
        $Port = 8102,

        [Parameter(Position = 2, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
        $InputObject,

        [Parameter()]
        [int]
        $DelayMs = 100
    )

    begin
    {
        $remoteString = "$($RemoteHost):$($Port)"

        Write-Verbose "Connecting socket to '$remoteString'"
        $socket = New-Object System.Net.Sockets.TcpClient($RemoteHost, $Port)
        $stream = $socket.GetStream()

        $reader = New-Object System.IO.StreamReader( $stream )
        $writer = New-Object System.IO.StreamWriter( $stream )

        $buffer = New-Object System.Byte[] 8192
        $encoding = New-Object System.Text.ASCIIEncoding

        $writer.Write( "`r" )
        $writer.Flush()
    }

    process
    {
        Write-Verbose "Writing message to socket connected to '$remoteString'"
        $InputObject | Format-Hex | Out-Host
        $writer.Write( $InputObject )
        $writer.Flush()
        Start-Sleep -Milliseconds $DelayMs
    }

    end
    {
        Write-Verbose "Closing writer..."
        $writer.Close()
        Write-Verbose "Closing reader..."
        $reader.Close()
        Write-Verbose "Closing socket..."
        $socket.Close()
    }
}

$InputObject | set-avr -Verbose 2>&1 3>&1 4>&1 5>&1 | Tee-Object -FilePath "$PSScriptRoot\log.$((Get-Date).ToFileTime()).txt" -Append
Start-Sleep -Seconds 60
Die Befehle kommen mit ein paar Millisekunden bis Sekunden Verzögerung an und ich kann es auf dem Weg auch nicht direkt steuern. So wird bei jeder Betätigung halt wie gesagt die Konsole geöffnet, der Interpreter gestartet, das Script geladen, ggf. weitere Module, die Verbindung hergestellt, der AVR aufgeweckt und die Kommandos versendet. Die Verzögerung hierbei ist einfach zu hoch, zumal mein Pioneer laut Manual auch zwischen den Befehlen 100 ms Verzögerung benötigt.

Auch verwirft der AVR auf dem Weg manche Pakete. Beispielsweise war die Lautstärke bei -51,5 dB, hab das Rad gedreht, 7 Events sind getriggert worden. Endresultat war nach ein paar Sekunden -54 dB. Heißt der AVR hat lediglich 5 Events registriert, der Rest wurde verworfen. Die Schrittweite ist jeweils 0,5 dB.
Code:
$ (,"VD`r")*4 | .\pioneer-send-message.ps1
Läuft dagegen natürlich zuverlässig, da die Nachrichten ordentlich versendet werden. Das kann ich aber nicht mit AutoHotkey realisieren.
luckysh0t schrieb:
Evtl. ist Script Runner was für dich.
Meinst du https://www.scriptrunner.com/en/? Kostet wohl etwas. Wurde außerdem von Microsoft in Power Automate integriert.
kuddlmuddl schrieb:
Ka ob das zu deinem Setup passt - ich hab mein Soundsystem einfach "laut genug" eingestellt und regel dann unter Windows einfach leiser.
Hab ich öfter mal bei Kumpels gesehen, mag ich aber nicht. Würde auch nicht klappen, da manchmal VoiceMeter (zum Upmix) dazwischenhängt, welches die Lautstärke ignoriert.

Ich bastel mir grad was auf PowerShell-Basis. Muss nur schauen, wie ich am dümmsten die Global Hotkeys registriere...
 
  • Gefällt mir
Reaktionen: luckysh0t
Zurück
Oben