在家远程工作时,调试的设备不在旁边,正好VNC又不好用了,于是想到写个程序重启下设备。
以下是我用VS2005编译的程序
#include “stdafx.h”
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t cmd[128] = L”/c RebootSystem.exe”; //
PROCESS_INFORMATION pi;
BOOL ret = CreateProcessW(L”cmd.exe”, cmd, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi);
Sleep(1000); //等待确认是否重启对话框弹出
keybd_event(VK_RETURN, 0, 0, 0); // 发送Enter按键消息
return 0;
}
说明:
cmd.exe是wince上的命令行程序,这个使用CreateProcess W创建新的命令行进程。
L”/c RebootSystem.exe”中,/c是cmd.exe的一个选项,表示运行后面的string命令然后终止,这里运行的命令是RebootSystem.exe。我在wince的系统下没有找到restart命令,只找到RebootSystem命令,它可以重启系统。
在运行了RebootSystem命令后,会产生一个对话框确认是否要重启。这时向wince发送一个Enter消息,确定重启。
函数keybd_event()用法
Windows提供了一个模拟键盘API函数keybd_event(),使用该函数可以发送键盘消息,也就是说会产生一个WM_KEYDOWN或WM_KEYUP消息。
VOID keybd_event(
BYTE bVk,
BYTE bScan,
DWORD dwFlags,
DWORD dwExtraInfo
);
从原型可以看出,keybd_event()共有四个参数:
第一个为按键的虚拟键值,如回车键为VK_RETURN, 也可以发送数字(ACSII码中13代表回车);
第二个参数为扫描码,一般不用设置,用0代替就行;
第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";
第四个参数一般也是置0即可。
按下Enter键模拟
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);