如何强制关闭另一个进程

66i88 2017-08-31 12:19:48

HWND h = NULL;
h=::FindWindow(NULL, APP_NAME);
TerminateProcess(h,0);



现在是上面代码这样,
但是没有效果.
正确的是怎样?
...全文
563 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-31
  • 打赏
  • 举报
回复
WinExec("cmd /c taskkill /F /IM \"要强制关闭的进程名字.exe\"",SW_HIDE);
smwhotjay 2017-08-31
  • 打赏
  • 举报
回复
关闭 很多方法啊。 1.投递关闭消息给进程窗口 postmessage WM_DESTROY 是关闭程序的 WM_CLOSE 是关闭窗口的 WM_QUIT 是关闭消息环的 2. 调用taskkill 杀进程 winexec 或system 3. TerminateProcess 进程的句柄。 下面代码是根据标题找窗口并打开它的进程句柄
  HWND   toFind;
	toFind=::FindWindow(NULL,"title");//找到窗口   
	if(toFind==NULL)   
	{   
		return   false;   
	}
	DWORD p;
	GetWindowThreadProcessId(toFind   ,&p);//得到窗口的ProcessID   
	HANDLE   m_hProcess=OpenProcess( PROCESS_ALL_ACCESS  // PROCESS_QUERY_INFORMATION| PROCESS_VM_OPERATION| PROCESS_VM_WRITE | PROCESS_VM_READ
		,true,p  );//打开Process    PROCESS_ALL_ACCESS
	if(m_hProcess==NULL)   
	{   
		printf("打开进程失败\n");
		//打开进程失败
		return   false;   
	}
 
zgl7903 2017-08-31
  • 打赏
  • 举报
回复
投递WM_QUIT消息试试看 HWND h = NULL; h=::FindWindow(NULL, APP_NAME); if(h) { ::PostMessage(h, WM_QUIT, 0, 0); }
sky065530 2017-08-31
  • 打赏
  • 举报
回复
传递进程句柄,但是强制关闭的话被关进程的c/c++对象资源不会被释放,所以慎用。
pgao02 2017-08-31
  • 打赏
  • 举报
回复
建议使用DOS命令,一用一个准,唯一不好的地方就是DOS黑乎乎的窗口会一闪而过。 用法 system("tskill 程序名")。 程序名可以在任务管理器里找到。
homesos 2017-08-31
  • 打赏
  • 举报
回复
TerminateProcess 参数传递的是进程的句柄,而不是窗口的句柄,你传错了。 http://51code.blog.51cto.com/8766262/1666000 http://blog.csdn.net/owldestiny/article/details/8010205
oyljerry 2017-08-31
  • 打赏
  • 举报
回复
TerminateProcess 需要进程句柄,你还可以遍历进程链表,根据进程名字来结束进程

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧