批处理脚本中如何发送Windows键

8

最近我一直在使用Batch脚本中的SendKeys函数。

我已经明白如何向窗口输入某些按键,例如Tab键:

%SendKeys% "{TAB}"

或者是退格键:

%SendKeys% "{BACKSPACE}"

我一直在尝试在不按下Windows键的情况下输入它。

不幸的是,我不知道它的批处理名称。 我已经尝试过:

WIN
WINDOWS
WINKEY
START
LWIN

但是没有一个有效的方法。
我已经到处寻找这个,非常感谢您的帮助。

你没有告诉我们你从哪里得到了SendKeys的解决方案,但如果是从这个答案中得到的,那么在同一篇帖子中有这个链接列出了所有SendKeys键名。而且,没有Windows键的名称... - Aacini
如何在Shell脚本中使用SendKeys方法?我需要实例化什么吗? - crappidy
4个回答

7

目前在sendkey's中无法模拟windows home logo,但这并不意味着不可能。

如果您查看Windows快捷键,您会发现可以使用以下组合键来模拟打开“开始”菜单: Ctrl + Esc

要在批处理中模拟此操作,您可以使用: powershell -c "$wshell = New-Object -ComObject wscript.shell; $wshell.SendKeys('^{ESCAPE}') 或者在您的情况下: %SendKeys% "^{ESCAPE}".

如在sendkeys中所述:

  • "^" - 模拟按下Ctrl键。
  • "{ESCAPE}" - 模拟按下Esc键。

谢谢!我不知道那是一个快捷方式。还有,感谢您格式化我的问题。 - Zinger
1
@ZekeYoung 我随时都可以帮忙!:-) - John Kens

4
你可以编写一个程序来模拟按下WinKey。
WinKey + R.VB
Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Public Module SendWinKey

    Const KEYEVENTF_KEYDOWN As Integer = &H0
    Const KEYEVENTF_KEYUP As Integer = &H2

    Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As UInteger, ByVal dwExtraInfo As UInteger)

       Public Sub Main()    
           keybd_event(CByte(Keys.LWin), 0, KEYEVENTF_KEYDOWN, 0) 'press the left Win key down
           keybd_event(CByte(Keys.R), 0, KEYEVENTF_KEYDOWN, 0) 'press the R key down
           keybd_event(CByte(Keys.R), 0, KEYEVENTF_KEYUP, 0) 'release the R key
           keybd_event(CByte(Keys.LWin), 0, KEYEVENTF_KEYUP, 0) 'release the left Win key
       End Sub
End Module

请将其翻译为中文:

将其放置在您的桌面上。

打开命令提示符并输入

C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%userprofile%\desktop\Win+R.vb" /out:"%userprofile%\Desktop\Win+R.exe" /target:winexe

一个名为Win+R.exe的文件会出现在您的桌面上。将其移动到任何路径中。

0

我目前在我的代码中使用SendKeys,它可以很好地自动化某些键盘命令。这只是自动设置默认浏览器和默认照片应用程序。我知道这已经晚了几年,但希望它有所帮助。

control /name Microsoft.DefaultPrograms /page pageDefaultProgram
SET TempVBSFile=%tmp%\~tmpSendKeysTemp.vbs
IF EXIST "%TempVBSFile%" DEL /F /Q "%TempVBSFile%"
ECHO Set WshShell = WScript.CreateObject("WScript.Shell") >>"%TempVBSFile%"
ECHO Wscript.Sleep 2000                                   >>"%TempVBSFile%"
ECHO WshShell.SendKeys "{TAB 3}"                          >>"%TempVBSFile%"
ECHO Wscript.Sleep 1000                                   >>"%TempVBSFile%"
ECHO WshShell.SendKeys "{ENTER}"                          >>"%TempVBSFile%"
ECHO Wscript.Sleep 4000                                   >>"%TempVBSFile%"
ECHO WshShell.SendKeys "{TAB 3}"                          >>"%TempVBSFile%"
ECHO Wscript.Sleep 1000                                   >>"%TempVBSFile%"
ECHO WshShell.SendKeys "{ENTER}"                          >>"%TempVBSFile%"
ECHO Wscript.Sleep 4000                                   >>"%TempVBSFile%"
ECHO WshShell.SendKeys "%%{F4}"                           >>"%TempVBSFile%"
CSCRIPT //nologo "%TempVBSFile%"
echo Return here once you are done.
echo.
echo ^< Press ANY key to return to the Menu ^> & Pause > NUL)
CLS & Goto :Menu

问题是关于发送特定的Windows键()的。除非我在某个地方漏掉了,您的示例不包括该键。 - NotTheDr01ds
@NotTheDr01ds 哈哈 - Clayton Seager

-1

已解决 - 首先创建一个带有代码的 .vbs 文件

Set WshShell = WScript.CreateObject("WScript.Shell")`   
WshShell.AppActivate "notepad"
WshShell.SendKeys "^{pgdn}"

接着,你必须从一个 .bat 文件中调用那个文件。


问题是关于发送特定的Windows键()的。您的示例不包括该键。 - NotTheDr01ds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接