继续昨天的有关任务管理器的问题!

danmao 2002-11-07 11:32:41
1、我现在用EnumProcess()、EnumProcessModules()和GetModuleBaseName()这几个函数来获得进程名称,出现问题:pid为0和8的两个进程得不到HMODULE(值为0)。怎样能得到该进程名称?

2、用如下方法判断进程是否是窗口出现偏差
if (!m_bVisible || (GetWindowLong(hwnd,GWL_STYLE) & WS_VISIBLE)) {
DWORD pidwin;
GetWindowThreadProcessId(hwnd, &pidwin);
if (pidwin==m_pid)
return TRUE;
有时候得不到所有的应用程序。
然后用GetWindowText()获得不了explorer应用程序的窗口名称。为什么?

3、用如下方法结束explorer进程会弹出关机画面,为什么?
//////////////////
// Kill a process cleanly: Close main windows and wait.
// bZap=TRUE to force kill.
//
BOOL CEnumKillProcess::KillProcess(DWORD pid, BOOL bZap)
{
CMainWindowIterator itw(pid);
for (HWND hwnd=itw.First(); hwnd; hwnd=itw.Next()) {
DWORD bOKToKill = FALSE;
SendMessageTimeout(hwnd, WM_QUERYENDSESSION, 0, 0,
SMTO_ABORTIFHUNG|SMTO_NOTIMEOUTIFNOTHUNG, 100, &bOKToKill);
if (!bOKToKill)
return FALSE; // window doesn't want to die: abort
PostMessage(hwnd, WM_CLOSE, 0, 0);
}

// I've closed the main windows; now wait for process to die.
BOOL bKilled = TRUE;
HANDLE hp=OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,pid);
if (hp) {
if (WaitForSingleObject(hp, 5000) != WAIT_OBJECT_0) {
if (bZap) { // didn't die: force kill it if zap requested
TerminateProcess(hp,0);
} else {
bKilled = FALSE;
}
}
CloseHandle(hp);
}else
bKilled = FALSE;

return bKilled;
}
...全文
81 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2002-11-09
  • 打赏
  • 举报
回复
现在http://expert.csdn.net/Expert/topic/1113/1113085.xml
使用了两种方式来枚举进程……toolhelp和WTS
http://msdn.microsoft.com/msdnmag/issues/02/06/debug/default.aspx
两种都有
danmao 2002-11-09
  • 打赏
  • 举报
回复
这一篇有用 :)

http://msdn.microsoft.com/msdnmag/issues/02/06/debug/default.aspx
danmao 2002-11-09
  • 打赏
  • 举报
回复
出门找工作去!有一段时间不能上网,欢迎大家继续讨论!

jiangsheng(蒋晟.Net)你给的我稍微看了,没有时间尝试……不太理解有关的是哪一部分。你的意思是要hook来实现吗?
蒋晟 2002-11-08
  • 打赏
  • 举报
回复
还看看这里http://expert.csdn.net/Expert/topic/1113/1113085.xml
蒋晟 2002-11-08
  • 打赏
  • 举报
回复
少了一个x
http://msdn.microsoft.com/msdnmag/issues/02/06/debug/default.aspx
danmao 2002-11-08
  • 打赏
  • 举报
回复
没有这个网页?
蒋晟 2002-11-08
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/msdnmag/issues/02/06/debug/default.asp
ylb_and_xy 2002-11-08
  • 打赏
  • 举报
回复
1.有的进程确实得不到,以前我也遇到过。
2.可以使用IsWindowVisible()函数。
3.不知道,可能与explorer的特殊性有关吧。
danmao 2002-11-08
  • 打赏
  • 举报
回复
要打破沙锅问到底!

:)
用户 昵称 2002-11-08
  • 打赏
  • 举报
回复
出了续集了,呵呵
danmao 2002-11-08
  • 打赏
  • 举报
回复
up一下,大家都不关注一下?

:(

ylb_and_xy(~0~蜗牛先生~0~) :2.可以使用IsWindowVisible()函数。
我这就试试!我昨天晚上又想了想,发现判断不出的窗口都是网页中点击打开的(是不是意味着这些新打开的ie窗口都是该网页的子窗口?)。只有这样解释得通。 :)

NowCan(能量、激情、雨水、彩虹——雷雨云):1、0、8进程确实得不到,都是系统内定的进程,这两个进程很特殊。
真是失望!

继续说说大家的思路,好吗?
问题1所用的函数只适用于NT4.0以后版本,win9X、ME都不能用,在这种系统中用什么函数?

NowCan 2002-11-08
  • 打赏
  • 举报
回复
1、0、8进程确实得不到,都是系统内定的进程,这两个进程很特殊。

15,473

社区成员

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

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