按键如果调用一个应用程序
底层驱动中如何调用一个应用程序,例如:按下某个按键,一个特定的应用程序就开始执行,
解决办法:其实只要在驱动中调用CreateProcess();就可以了,CreateProcess的说明查看MSDN。
下面是一个实例;按键中断调用应用程序Powercontrol.exe
DWORD WINAPI Threadproc(LPVOID lpvParam)
{
DWORD dwStatus;
BOOL fState = TRUE;
static BOOL count = TRUE;
RETAILMSG(1,(TEXT("entry test thread \r\n")));
while (!m_ExitThread)
{
dwStatus = WaitForSingleObject(m_interruptTestEvent,INFINITE);
if (m_ExitThread)
{
break;
}
if (dwStatus == WAIT_OBJECT_0)
{
RETAILMSG(1,(TEXT("test thread happend \r\n")));
}
//
//keybd_event(VK_UP,0,0,0);
//keybd_event(VK_UP,0,KEYEVENTF_KEYUP,0);
//keybd_event(VK_LWIN, 0, 0 ,0);
//keybd_event(VK_F5 , 0, 0 ,0);
//keybd_event(VK_F5 , 0, KEYEVENTF_KEYUP ,0);
//keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
//keybd_event(VK_LWIN, 0, 0 ,0);
//keybd_event('M', 0, 0 ,0);
//keybd_event('M', 0, KEYEVENTF_KEYUP ,0);
//keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
//直接在中断服务程序中调用CreateProcess,\\NandFlash\\Powercontrol.exe为应用程序的绝对路径,
CreateProcess(_T("\\NandFlash\\Powercontrol.exe"),NULL, NULL, NULL,FALSE, 0, NULL, NULL, NULL, NULL);
InterruptDone(m_interruptTestSysId);
Enble_Test_Interrupt();
}
return FALSE;
}
另外在D:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\BLUETOOTH\SAMPLE\BTDIALP 下面的btdialp.cxx也有实例
int ndx = DialogBoxParam (ghInst, MAKEINTRESOURCE (IDD_DIALOG1), NULL, WhichDlg, (LPARAM)numbers);
if ((ndx >= 0) && (ndx < iPhoneCnt)) {
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset (&pi, 0, sizeof(pi));
memset (&si, 0, sizeof(si));
si.cb = sizeof(si);
DWORD bCP = CreateProcess (L"btdialer.exe", numbers[ndx].szPhone, NULL, NULL, FALSE, 0, NULL,
NULL, &si, &pi);
if (bCP) {
CloseHandle (pi.hThread);
CloseHandle (pi.hProcess);
}