已知一个控制台的进程ID,如何取得其窗体句柄

来源:互联网  时间:2016/8/20 6:36:01

关于网友提出的“ 已知一个控制台的进程ID,如何取得其窗体句柄”问题疑问,本网通过在网上对“ 已知一个控制台的进程ID,如何取得其窗体句柄”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 已知一个控制台的进程ID,如何取得其窗体句柄
描述:

我用
CreateProcess("c:\\winnt\\system32\\cmd.exe ","/c ping 202.103.29.213 -t"
,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)
启动控制台进程,一段时间后我想关闭这个进程如何实现。
TerminateProcess(ProcessInfo.dwProcessId,0);好像不起作用。请各位指点一二。


解决方案1:

没那么复杂,知道进程名不就知道PID了么?直接杀就可以了
const char DESTPROC[19] = "cmd.exe"; 
DWORD pid = ProcessToPID(DESTPROC); 
知道PID后,杀进程你该会吧?
DWORD ProcessToPID(const char *InputProcessName) 

DWORD aProcesses[1024], cbNeeded, cProcesses; 
unsigned int i; 
HANDLE hProcess = NULL; 
HMODULE hMod = NULL; 
char szProcessName[MAX_PATH] = "UnknownProcess"; 
AddPrivilege(SE_DEBUG_NAME); 
// 计算目前有多少进程, aProcesses[]用来存放有效的进程PIDs 
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) 

return 0; 

cProcesses = cbNeeded / sizeof(DWORD); 
// 按有效的PID遍历所有的进程 
for ( i = 0; i < cProcesses; i++ ) 

// 打开特定PID的进程 
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | 
PROCESS_VM_READ, 
FALSE, aProcesses[i]); 
// 取得特定PID的进程名 
if ( hProcess ) 

if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) 

GetModuleBaseName( hProcess, hMod, 
szProcessName, sizeof(szProcessName) ); 
//将取得的进程名与输入的进程名比较,如相同则返回进程PID 
if(!stricmp(szProcessName, InputProcessName)) 

CloseHandle( hProcess ); 
return aProcesses[i]; 


}//end of if ( hProcess ) 
}//end of for 
//没有找到相应的进程名,返回0 
CloseHandle( hProcess ); 
return 0; 
}

解决方案2:

CreateProcess的最后一个参数pi返回新建进程的句柄,而且具有Terminate权限,你可以通过这个句柄中止新建的进程。

解决方案3:

TerminateProcess的第一个参数应该是进程的句柄, 不应该是id.
要结束该进程, 先要OpenProcess, 记得带参数PROCESS_TERMINATE

解决方案4:

HANDLE hProc = OpenProcess( 
PROCESS_TERMINATE, 
FALSE, 
ProcessInfo.dwProcessId 
                           );
TerminateProcess( hProc, 0 );
CloseHandle( hProc );

解决方案5:

用枚举窗口可以,不过办法比较笨!

解决方案6:

要取得它的window handle,可以先记录CreateProcess返回的process id,然后EnumWindows, GetWindowThreadProcessId 找到属于这个console进程的HWND

解决方案7:

使用findwindow()
类名为ConsoleWindowClass
或者窗口标题是控制台程序的完整路径名

上一篇win32 无法调用 封装 opengl 基本操作的动态链接库
下一篇钩子无效求助
明星图片
相关文章
《 已知一个控制台的进程ID,如何取得其窗体句柄》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)