如何列出当前所有应用程序?(50分)

  • 主题发起人 主题发起人 ryu
  • 开始时间 开始时间
R

ryu

Unregistered / Unconfirmed
GUEST, unregistred user!
注意是应用程序!<br>就是按ALT-TAB显示出来的那些应用程序,<br>而非按CTRL-ALT-DEL显示出来的那些进程!
 
我也曾遇到过相似的问题,用EnumWindows列出的是当前所有窗口--其中有好多乱七<br>八糟的东东;用Process32First,Process32Next列出的是所有进程,:-((<br>不知道那位大虾知道解决办法----<br>是对以上方法进行过滤得到结果,还是有现成的API函数?
 
EnumThreadWindows()<br>不要奇怪,应该就是这个函数了.请看EnumTaskWindows()的说明.
 
lhz:<br>&nbsp; &nbsp;我看了一下帮助,The EnumThreadWindows function enumerates all nonchild windows associated with a thread.<br>&nbsp; &nbsp;也就是仅仅列举某个线程的窗口,那怎么列举所有窗口呢?
 
各位大虾,到底该怎么去做呀???
 
重赏之下有勇夫,我愿意再出50分,不知哪位高手能帮我这个解决问题??
 
我试了一下,用以下方式过滤,可以得到比较精确的结果:<br><br>BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)<br>{<br>&nbsp; &nbsp; if(IsWindowVisible(hwnd)==false)<br>&nbsp; &nbsp; &nbsp; &nbsp; return true;<br>&nbsp; &nbsp; if(GetWindowLong(hwnd,GWL_HWNDPARENT))<br>&nbsp; &nbsp; &nbsp; &nbsp; return true;<br><br>&nbsp; &nbsp; char TitleBuf[512];<br>&nbsp; &nbsp; char Buf[1024];<br>&nbsp; &nbsp; GetWindowText(hwnd,TitleBuf,510);<br>&nbsp; &nbsp; sprintf(Buf,"%08x %s",(unsigned)hwnd,TitleBuf);<br>&nbsp; &nbsp; Form1-&gt;LW-&gt;Items-&gt;Add(Buf);<br>&nbsp; &nbsp; return true;<br>}<br>调用是:<br>&nbsp; &nbsp; EnumWindows((WNDENUMPROC)EnumWindowsProc,0);<br><br>结果中,有3个窗口是多余的,其中两个是输入法的,没有标题,<br>可以用标题过滤,而另外一个多的是对应整个屏幕的,是<br>Program Manager的窗口,比较难过滤.不知是否有更好的方法.
 
lhz:<br>&nbsp; 从程序来说,用GetWindowLong(hwnd,GWL_HWNDPARENT)来过滤好象有欠妥当,<br>而且我觉得不应该用列举窗口的方式来实现ryu所要求的功能----用列举进程好象<br>更好一点(ALT-TAB)!<br>&nbsp; 另外用C++ Builder感觉怎么样?比Delphi如何?<br>&nbsp; 我没用过CB,但看到Delphi中的Sender as TButton,在C++ Builder中要用<br>&nbsp; TButton* button = dynamic_cast&lt;TButton*&gt;(Sender);<br>&nbsp; 时,我就头晕。@_@
 
同意LHZ的意见,我编过类似程序,只能自己处理了<br>BTW: 不用BCB,那是给只会C++,又向往DELPHI人用的.
 
我试了一下,lhz的方法是可以的,如果到明天下午没有人有更好的方法,我会把分送<br>上!<br>谢谢大家,但我另外50分怎么送呢??
 
to 柳五公子:<br>进程和TASK是两个完全不相干的概念.对Win32来说,<br>进程可以不出现在Taskbar,也可以出现多个窗口在<br>Taskbar上.IE是最简单的例子.IE打开的所有窗口,<br>都只对应一个进程.而绝大部分Service都是没有窗<br>口的,就无所谓Task了.如果你用的是NT,可以看到<br>进程列表有一大堆,而任务列表只有在Taskbar上出<br>现了才有.所以,Task和Process没有简单的对应关<br>系,用列举进程的方法可能更复杂.
 
多人接受答案了。
 
后退
顶部