qt 如何关闭外部进程

liuhelh 2014-06-17 05:28:28
如题,有哪位用qt关闭过外部进程?

比方说用 qt 关闭 cmd.exe。

貌似能调windows的 API函数,类似 terminateprocess() ,但是不会用。

哪位大神给个提示?
...全文
1107 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
气杀也么哥 2015-04-28
  • 打赏
  • 举报
回复
牛逼哄哄!!!赞一个,qt5直接能用了。
liuhelh 2014-06-17
  • 打赏
  • 举报
回复
网上搜的,vs2005 编译通过,可以用
liuhelh 2014-06-17
  • 打赏
  • 举报
回复

#include <Tlhelp32.h>
void terminateMYSQL()
{
	HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

           //现在我们获得了所有进程的信息。
       //将从hSnapShot中抽取数据到一个PROCESSENTRY32结构中
       //这个结构代表了一个进程,是ToolHelp32 API的一部分。
       //抽取数据靠Process32First()和Process32Next()这两个函数。
       //这里我们仅用Process32Next(),他的原形是:
       //BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);
       //我们程序的代码中加入:
       PROCESSENTRY32* processInfo=new PROCESSENTRY32;
       // 必须设置PROCESSENTRY32的dwSize成员的值 ;
       processInfo->dwSize=sizeof(PROCESSENTRY32);
       int index=0;
       //这里我们将快照句柄和PROCESSENTRY32结构传给Process32Next()。
       //执行之后,PROCESSENTRY32 结构将获得进程的信息。我们循环遍历,直到函数返回FALSE。
       //printf("****************开始列举进程****************/n");
       int ID = 0;
       while(Process32Next(hSnapShot,processInfo)!=FALSE)
       {
           index++;
           //printf("****************** %d ******************/n",index);
           //printf("PID       Name      Current Threads/n");
           //printf("%-15d%-25s%-4d/n",processInfo->th32ProcessID,processInfo->szExeFile,processInfo->cntThreads);
           int size=WideCharToMultiByte(CP_ACP,0,processInfo->szExeFile,-1,NULL,0,NULL,NULL);
           char *ch=new char[size+1];
           if(WideCharToMultiByte(CP_ACP,0,processInfo->szExeFile,-1,ch,size,NULL,NULL))
           {
               if(strstr(ch,"mysqld.exe"))//使用这段代码的时候只需要改变"cmd.exe".将其改成你要结束的进程名就可以了。
             {
                    ID = processInfo->th32ProcessID;
                   // qDebug()<<"ID ="<<ID;
                    HANDLE hProcess;
                    // 现在我们用函数 TerminateProcess()终止进程:
                    // 这里我们用PROCESS_ALL_ACCESS
                    hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,ID);
                    //if(hProcess==NULL)
                    //{
                      //  printf("Unable to get handle of process: ");
                      //  printf("Error is: %d",GetLastError());
                    //}
                    TerminateProcess(hProcess,0);
                    CloseHandle(hProcess);
               }
           }
       }
       CloseHandle(hSnapShot);
       delete processInfo;
}
liuhelh 2014-06-17
  • 打赏
  • 举报
回复
to 楼上,我来试试...
foruok 2014-06-17
  • 打赏
  • 举报
回复
其实这个 Qt 本身木有一毛钱关系,枚举进程的话,Win32 有 api,CreateToolhelp32Snapshot() / Process32First()/Process32Next() 可以做这些事情。
foruok 2014-06-17
  • 打赏
  • 举报
回复
你需要找到目标进程的pid,然后:
::kill(pid_t(pid), SIGTERM);
liuhelh 2014-06-17
  • 打赏
  • 举报
回复
QProcess 怎么关闭外部的进程? ps: 这个进程不是用QProcess打开的
sdu_hanson 2014-06-17
  • 打赏
  • 举报
回复
用 Qprocess

16,201

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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