SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = NULL;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = L"ClientNpc.exe";
ShExecInfo.lpParameters = L"";
ShExecInfo.lpDirectory = L"E:\\公司\\All Tools\\ClientNpc\\Debug";
ShExecInfo.nShow = SW_NORMAL;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);//为什么得到的handle是空?怎么才能得到这个应用程序的HANDLE呢?
HANDLE handle = ShExecInfo.hProcess;
//如何通过这个handle来得到“ClientNpc.exe”的进程ID
//如果用GetWindowThreadProcessId(HWND hWnd,0);的话,第一个参数是HWND,可那个是HANDLE,如何转换呢?
// do sonmthing...//通过进程ID来关闭进程,为什么程序找不到TerminateProcessById();这个函数?这个函数是WIN API么?
//如果不行,有别的方法关闭应用程序么?除了用TerminateProcess强制关闭的方法!
//FindWindow + SendMessage(WM_CLOSE....)对我来说不能用,因为我需要启动很多窗口标题一样的应用程序。
// do sonmthing...
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = NULL;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = L"ClientNpc.exe";
ShExecInfo.lpParameters = L"";
ShExecInfo.lpDirectory = L"E:\\公司\\All Tools\\ClientNpc\\Debug";
ShExecInfo.nShow = SW_NORMAL;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);//为什么得到的handle是空?怎么才能得到这个应用程序的HANDLE呢?
HANDLE handle = ShExecInfo.hProcess;
//如何通过这个handle来得到“ClientNpc.exe”的进程ID
//如果用GetWindowThreadProcessId(HWND hWnd,0);的话,第一个参数是HWND,可那个是HANDLE,如何转换呢?
// do sonmthing...//通过进程ID来关闭进程,为什么程序找不到TerminateProcessById();这个函数?这个函数是WIN API么?
//如果不行,有别的方法关闭应用程序么?除了用TerminateProcess强制关闭的方法!
//FindWindow + SendMessage(WM_CLOSE....)对我来说不能用,因为我需要启动很多窗口标题一样的应用程序。
// do sonmthing...
查api的帮助就不要到处白了,直接看msdn就行了. 没有TerminateProcessById这个API
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; MSDN对其有详细说明
2、如果你想得到进程ID的话,可以直接使用CreateProcess来创建进程便可以获取
3、没有TerminateProcessById(),需要先OpenProcess获得句柄再使用TerminateProcess
其实我就是想用SHELLEXECUTEINFO来实现自动打开EXE,然后还需要过一段时间后自动关闭这个应用程序,所以想用关闭进程的方式做
但不知道到底是用句柄还是用进程ID来关闭,到底用哪一个好,怎么用?
PostThreadMessage(ThreadId/*主线程ID*/ ,WM_CLOSE, 0, 0);