将热键分配给powershell脚本的功能

时间:2017-01-10 13:30:01

标签: powershell autoit

我希望脚本在后台运行,并在按下热键(如CTRL + 1)时将变量的内容“粘贴”到当前活动的文本字段中。我到目前为止的代码:

function Send($key)
{
    $wsh.SendKeys($key)
}

$wsh = New-Object -ComObject WScript.Shell

$c1 = "Text to be sent #1"
$c2 = "Text to be sent #2"
$c3 = "Text to be sent #3"
$c4 = "Text to be sent #4"
$c0 = "Text to be sent #5"

switch ($check)
{
    1 {Send($c1)}
    2 {Send($c2)}
    3 {Send($c3)}
    4 {Send($c4)}
    0 {Send($c0)}
    default {Sleep(1)}
}

我尝试搜索,找不到任何有效的解决方案。 我目前使用具有similair功能的AutoIt脚本,虽然我没有写这个,但遗憾的是不知道作者。

#include < Misc.au3 >

Func _SendEx($ss, $warn = "")
    Local $iT = TimerInit()

    While _IsPressed("10") Or _IsPressed("11") Or _IsPressed("12")
        If $warn <> "" And TimerDiff($iT) > 1000 Then
            MsgBox(262144, "Avertissement", $warn)
        EndIf
        Sleep(50)
    WEnd
    Send($ss)
EndFunc;==>_SendEx

HotKeySet ("^1", "c1")
HotKeySet ("^2", "c2")
HotKeySet ("^3", "c3")
HotKeySet ("^4", "c4")
HotKeySet ("^0", "c0")

While True
    Sleep (10000)
WEnd

Func c1 ()
    _SendEx ("text 1")
EndFunc

Func c2 ()
    _SendEx ("text 2")
EndFunc

Func c3 ()
    _SendEx ("text 3")
EndFunc

Func c4 ()
    _SendEx ("text 4")
EndFunc

Func c0 ()
    _SendEx ("text 0")
EndFunc

我想在powershell中重新创建,如何为该函数分配热键?

2 个答案:

答案 0 :(得分:1)

首先,没有本地方式来执行该操作。

如果您真的想继续这种方法,那么我建议您将该功能放在 .ps1

然后,使用批处理脚本( .bat

调用脚本

最后,您可以为该批处理文件设置一个热键,您可以在每次启动Windows时注册该文件。

屏幕截图的分步方法如下:

Creating Shortcuts

希望它有所帮助。

答案 1 :(得分:0)

听起来您正在尝试模拟类似于许多罗技键盘所具有的宏按钮。如果您尝试运行脚本来侦听全局击键,然后在按下某个组合时触发粘贴,您可能需要专门查看来自user32.dll和kernel32.dll的pinvoke,SetWindowsHookEx,{{3} },FindWindowFindWindowExBringWindowToTop

简而言之,您应该能够设置一个带有SetWindowsHookEx和WH_KEYBOARD_LL的钩子,在处理程序中使用FindWindow / FindWindowEx来定位目标窗口,使用BringWindowToTop,然后通过SendKeys发送^ V键以粘贴到该字段中。 powershell有很多键盘记录器Systems.Windows.Forms.SendKeys可以告诉你如何使用pinvoke并设置钩子。