37

我正在尝试开发一个批处理文件,它可以自动按左箭头和右箭头键 n 次,中间有一些暂停。有人可以帮我吗?

PS:我尝试安装自动键盘软件,但由于我在工作,我无法安装它们。我需要这个程序才能在我的办公室 PC 上运行。

4

2 回答 2

61

哇!这是否意味着您必须学习一种不同的编程语言才能将两个键发送到键盘?有更简单的方法可以实现相同的目标。:-)

下面的批处理文件是一个示例,它启动另一个程序(在这种情况下为 cmd.exe),向它发送命令,然后发送向上箭头键,从而恢复上次执行的命令。批处理文件很简单,可以毫无问题地理解,因此您可以对其进行修改以满足您的需要。

@if (@CodeSection == @Batch) @then


@echo off

rem Use %SendKeys% to send keys to the keyboard buffer
set SendKeys=CScript //nologo //E:JScript "%~F0"

rem Start the other program in the same Window
start "" /B cmd

%SendKeys% "echo off{ENTER}"

set /P "=Wait and send a command: " < NUL
ping -n 5 -w 1 127.0.0.1 > NUL
%SendKeys% "echo Hello, world!{ENTER}"

set /P "=Wait and send an Up Arrow key: [" < NUL
ping -n 5 -w 1 127.0.0.1 > NUL
%SendKeys% "{UP}"

set /P "=] Wait and send an Enter key:" < NUL
ping -n 5 -w 1 127.0.0.1 > NUL
%SendKeys% "{ENTER}"

%SendKeys% "exit{ENTER}"

goto :EOF


@end


// JScript section

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));

有关 SendKeys 的键名列表,请参阅:http: //msdn.microsoft.com/en-us/library/8c6yea83 (v=vs.84).aspx

例如:

LEFT ARROW    {LEFT}
RIGHT ARROW   {RIGHT}

有关此解决方案的进一步说明,请参阅:GnuWin32 openssl s_client conn to WebSphere MQ server not closed at EOF, hangs

于 2013-06-11T17:24:43.433 回答
6

为了清楚起见,您想从批处理文件启动程序,然后在启动的程序中让批处理文件按下键(在您的示例中为箭头键)?

如果是这种情况,您将无法仅使用“.bat”文件来执行此操作,因为启动会阻止批处理文件继续执行,直到它终止 -

我的第一个建议是尽可能使用 AutoHotkey 或 AutoIt 之类的东西,因为它们都有活跃的论坛,在那里你会发现无数人启动应用程序和发送按键的例子,更不用说工具来简单地“记录”你想要的东西做。但是您说这是一台工作计算机,您可能无法加载第 3 方程序..但您并非没有选择。

您可以使用 .vbs 文件之类的 Windows Scripting Host 来启动程序并将密钥发送到该进程。如果您运行的 Windows 版本包含 PowerShell 2.0(带有 Service Pack 3 的 Windows XP、带有 Service Pack 1 的 Windows Vista、Windows 7 等),您可以将 Windows Scripting Host 用作 PS 脚本中的 COM 对象或使用VB 的交互类。

如何做到这一点的细节超出了此答案的范围,但您可以使用我刚刚描述的方法通过搜索 SO 或 Google 找到大量示例。

编辑:只是为了帮助您入门,您可以在这里查看:

  1. 使用 Windows Script Host 的 SendKeys 方法自动执行任务
  2. 关于 SendKeys 的有用线程
于 2013-06-11T07:43:14.907 回答