C++怎样强行关闭指定文件的进程?
比如,在D:\的根目录下有一个可执行文件,叫“123.exe”,如何用C++编写代码,定时检查它是否正在执行,如果执行,就关掉它的进程。请大家附上代码,因为我时钟类不怎么...
比如,在D:\的根目录下有一个可执行文件,叫“123.exe”,如何用C++编写代码,定时检查它是否正在执行,如果执行,就关掉它的进程。
请大家附上代码,因为我时钟类不怎么会用,关于进程和线程也没学好。 展开
请大家附上代码,因为我时钟类不怎么会用,关于进程和线程也没学好。 展开
展开全部
windows是一个消息机制,
以桌面为父窗口来查找第一个主窗口
hWndPrevious = GetWindow(GetDesktopWindow(),GW_CHILD);
LPTSTR m_pszExeName;
while (IsWindow(hWndPrevious))
{
int i=GetWindowTextLength(hWndPrevious);
GetWindowText(hWndPrevious,szHello,i);//获取窗口标题//这里我的窗口中只有下面几个字是不变的
if (strstr(szHello,"当前用户数:")){
sprintf( szHello1, "Hwnd:%X Title:%s",hWndPrevious,szHello);
TextOut(hdc, rt.left, rt.top, szHello1,strlen(szHello1));
break;//匹配,这时hWndPrevious就是所要找的窗口的句柄
}
hWndPrevious = GetWindow(hWndPrevious,GW_HWNDNEXT);
}
获取了信息就可以调用
向运行程序的主窗口发送WM_CLOSE消息。 HWND hwnd = // 获得主窗口
PostMessage(hwnd, WM_CLOSE, 0, 0);
发送此消息后,通常应该等待直到进程确实终止: HANDLE hp = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,pid);
WaitForSingleObject(hp, 5000); // 等待5秒
当进程终止时,它发出状态信号,并且 WaitForSingleObject 返回WAIT_OBJECT_0。如果返回别的值,进程要么挂起了,要么仍然在进行处理。在这种情况下,杀死这个进程的唯一方法是用功能更强大的TerminateProcess: if (WaitForSingleObject(hp, 5000) != WAIT_OBJECT_0)
TerminateProcess(hp,0);
如果想干得漂亮一点,可以在关闭之前向主窗口发送一个WM_QUERYENDSESSION消息。当用户结束会话(log out)或者有人调用ExitWindows时,应用程序会收到这个消息。然后准备即将来临的死亡。此时一般都会弹出一个确认对话框,告诉世人:“我要完蛋了,如果要保存修改的东西,现在是最佳时机,想保存吗?”有三种选择(Yes/No/Cancel)。此外,WM_QUERYENDSESSION甚至可以拒绝死亡(按下"Cancel键"),如果是这样,生命将会延续。代码应该这样写: DWORD bOKToKill = FALSE;
SendMessageTimeout(hwnd, WM_QUERYENDSESSION, 0, 0,
SMTO_ABORTIFHUNG|SMTO_NOTIMEOUTIFNOTHUNG, 100, &bOKToKill);
if (bOKToKill) {
// 发送WM_CLOSE 并等待
}
如果想要关闭的进程被挂起。使用SendMessageTimeout就非常重要,而不是用SendMessage。SMTO_NOTIMEOUTIFNOTHUNG是一个只有Windows 2000 和Windows XP才有的标志。其意义是“如果线程没有挂起,不要超时。”换句话说就是:如果线程正在进行正常处理,那么永远等待,以便用户能看到对话框并决定做什么。当用户最终做出决定后,SendMessageTimeout将带着相应的bOKToKill值返回。所有这些的前提是其它的应用程序运行正常并且WM_QUERYENDSESSION也得到正常处理。
以桌面为父窗口来查找第一个主窗口
hWndPrevious = GetWindow(GetDesktopWindow(),GW_CHILD);
LPTSTR m_pszExeName;
while (IsWindow(hWndPrevious))
{
int i=GetWindowTextLength(hWndPrevious);
GetWindowText(hWndPrevious,szHello,i);//获取窗口标题//这里我的窗口中只有下面几个字是不变的
if (strstr(szHello,"当前用户数:")){
sprintf( szHello1, "Hwnd:%X Title:%s",hWndPrevious,szHello);
TextOut(hdc, rt.left, rt.top, szHello1,strlen(szHello1));
break;//匹配,这时hWndPrevious就是所要找的窗口的句柄
}
hWndPrevious = GetWindow(hWndPrevious,GW_HWNDNEXT);
}
获取了信息就可以调用
向运行程序的主窗口发送WM_CLOSE消息。 HWND hwnd = // 获得主窗口
PostMessage(hwnd, WM_CLOSE, 0, 0);
发送此消息后,通常应该等待直到进程确实终止: HANDLE hp = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,pid);
WaitForSingleObject(hp, 5000); // 等待5秒
当进程终止时,它发出状态信号,并且 WaitForSingleObject 返回WAIT_OBJECT_0。如果返回别的值,进程要么挂起了,要么仍然在进行处理。在这种情况下,杀死这个进程的唯一方法是用功能更强大的TerminateProcess: if (WaitForSingleObject(hp, 5000) != WAIT_OBJECT_0)
TerminateProcess(hp,0);
如果想干得漂亮一点,可以在关闭之前向主窗口发送一个WM_QUERYENDSESSION消息。当用户结束会话(log out)或者有人调用ExitWindows时,应用程序会收到这个消息。然后准备即将来临的死亡。此时一般都会弹出一个确认对话框,告诉世人:“我要完蛋了,如果要保存修改的东西,现在是最佳时机,想保存吗?”有三种选择(Yes/No/Cancel)。此外,WM_QUERYENDSESSION甚至可以拒绝死亡(按下"Cancel键"),如果是这样,生命将会延续。代码应该这样写: DWORD bOKToKill = FALSE;
SendMessageTimeout(hwnd, WM_QUERYENDSESSION, 0, 0,
SMTO_ABORTIFHUNG|SMTO_NOTIMEOUTIFNOTHUNG, 100, &bOKToKill);
if (bOKToKill) {
// 发送WM_CLOSE 并等待
}
如果想要关闭的进程被挂起。使用SendMessageTimeout就非常重要,而不是用SendMessage。SMTO_NOTIMEOUTIFNOTHUNG是一个只有Windows 2000 和Windows XP才有的标志。其意义是“如果线程没有挂起,不要超时。”换句话说就是:如果线程正在进行正常处理,那么永远等待,以便用户能看到对话框并决定做什么。当用户最终做出决定后,SendMessageTimeout将带着相应的bOKToKill值返回。所有这些的前提是其它的应用程序运行正常并且WM_QUERYENDSESSION也得到正常处理。
展开全部
在强行关闭1个进程时系统调用的是
在DLL工程里加入1个WH_SHELL的钩子,它的作用是进程创建时将DLL文件插入到每个进程里面,从而到达拦截API
在DLL工程里加入1个WH_SHELL的钩子,它的作用是进程创建时将DLL文件插入到每个进程里面,从而到达拦截API
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
但是不能关闭所有的Excel进程,比如说有其他Excel文件正在打开中。
How
to
bypass
the
login
screen,
according
to
How
to
bypass
the
login
screen,
according
to
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如何强迫关闭进程”
的更多相干文章.
给你无敌
接着打开"命令提示符",在命令提示符状态下输入"ntsd
-c
q
-p
PID"命令,就能够强即将指定PID的病毒进程结束掉。
的更多相干文章.
给你无敌
接着打开"命令提示符",在命令提示符状态下输入"ntsd
-c
q
-p
PID"命令,就能够强即将指定PID的病毒进程结束掉。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/proc:目录中寄存当前进程PID命名的目录和系统相干信息文件
cpuinfo:cup
杀死进程
kill
⑼
进程号:强行关闭
kill
⑴
进程号:重
cpuinfo:cup
杀死进程
kill
⑼
进程号:强行关闭
kill
⑴
进程号:重
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询