前台程序和后台程序

ywolf0214 2008-06-16 04:14:46
我在后台有一个服务程序,它用于监测前台程序,若发现有一个程序正在运行就结束掉它。但是奇怪的是如果把这个后台程序运行在前台(有窗口)的确可以监控指定的程序是否运行,如果把它作为服务在后台运行(没有窗口,只有进程)它就结束不掉指定的程序,这是为什么呢?
...全文
255 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
做鸡真好吃 2008-06-17
  • 打赏
  • 举报
回复
结贴给分吧
孤客天涯 2008-06-16
  • 打赏
  • 举报
回复
服務程序運行的桌面叫"Winlogon",一般的程序運行于"default"桌面下,所以服務程序用FindWindow是找不到你要的窗口,你只能通過ID來查,
PROCESSENTRY32 process_info;
DWORD m_CurrentPrecessID=GetCurrentProcessId();
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPALL|TH32CS_INHERIT,m_CurrentPrecessID);
if (Process32First(handle,&process_info))
{
while (Process32Next(handle,&process_info))
{
//根據process_info.szExeFile确定你所要殺的進程
//process_info.th32ProcessID即為該進程的ID
}

}

DWORD dwProcessID = 0//你要殺的進程的ID;
HANDLE hToken=NULL;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
SetPrivilege(hToken, SE_DEBUG_NAME, TRUE);//提昇權限
CloseHandle(hToken);
HANDLE handle=OpenProcess(PROCESS_ALL_ACCESS,TRUE,dwProcessID);
if(handle!=NULL)
{
if(TerminateProcess(handle,0))
{

}
CloseHandle(handle);
}
CloseHandle(hToken);
}
ywolf0214 2008-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jason_wentzel 的回复:]
1.殺進程先要提昇權限.
2.殺進程,你是是什麼樣的方式獲取進程的ID,不要用FindWindow之類的,因為服務程序與一般的應用程序運行于不同的桌面,在服務進程運行的桌面中當然用Findwindow找不到你所指定的進程.
[/Quote]
恩,你说的很好,我的确是用findwindow来查找的,那我应该怎么做?怎么通过后台程序去杀死一个前台进程?
孤客天涯 2008-06-16
  • 打赏
  • 举报
回复
1.殺進程先要提昇權限.
2.殺進程,你是是什麼樣的方式獲取進程的ID,不要用FindWindow之類的,因為服務程序與一般的應用程序運行于不同的桌面,在服務進程運行的桌面中當然用Findwindow找不到你所指定的進程.

15,466

社区成员

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

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