如何实现"任务管理器"的功能?急!!(100分)

  • 主题发起人 主题发起人 大花鸡
  • 开始时间 开始时间

大花鸡

Unregistered / Unconfirmed
GUEST, unregistred user!
我找过相似的问题,可它们只是显示所有进程,不能显示应用程序名,请问如何实现?
 
有什么不明白的?说的很清楚了,任务管理器中有三项,一个是显示进程,另一个是显示当<br>前运行的程序名。我就是想要显示所有正在运行的程序名字。
 
抄的,呵呵<br>uses tlhelp32;<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; pe:PROCESSENTRY32;<br>&nbsp; me:MODULEENTRY32;<br>&nbsp; hp,hm:Thandle;<br>&nbsp; b,b1:boolean;<br>begin<br>&nbsp; hp:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0);<br>&nbsp; pe.dwSize:=SizeOf(pe);<br>&nbsp; b:=Process32First(hp,pe);<br>&nbsp; while &nbsp;b do<br>&nbsp; begin<br>&nbsp; &nbsp; hm:=CreateToolHelp32SnapShot(TH32CS_SNAPModule,pe.th32ProcessID);<br>&nbsp; &nbsp; me.dwSize:=sizeof(ModuleEntry32);<br>&nbsp; &nbsp; if Module32First(hm,me) then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; b1:=Module32First(hm,me);<br>&nbsp; &nbsp; while &nbsp;b1 do<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; if me.th32ModuleID=pe.th32ModuleID then<br>&nbsp; &nbsp; &nbsp; &nbsp; listbox1.Items.Add(me.szExePath);<br>&nbsp; &nbsp; &nbsp; b1:=Module32Next(hm,me);<br>&nbsp; &nbsp; end;<br>&nbsp; end;<br>&nbsp; &nbsp; b:=Process32Next(hp,pe);<br>&nbsp; end;<br><br>end;<br><br><br>&nbsp;<br>&nbsp;<br><br>--------------------------------------------------------------------------------<br>toolhelp api 在 nt 上不支持<br>下面的可以在 nt 上运行<br>如果要copy到其他机上运行,要顺便拷贝 psapi.dll(这个dll安装delphi或者c++ builder后就有了)<br><br>#include "psapi.hpp"<br><br>假使process id是 pid 的话:<br><br>HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,pid);<br>if( NULL != hProcess )<br>&nbsp; {<br>&nbsp; HMODULE hMod;<br>&nbsp; DWORD cbNeeded;<br>&nbsp; if( EnumProcessModules( hProcess, &amp;hMod, sizeof( hMod ), &amp;cbNeeded ) )<br>&nbsp; &nbsp; {<br>&nbsp; &nbsp; char buf[MAX_PATH+1]="";<br>&nbsp; &nbsp; if(GetModuleBaseName( hProcess, hMod,buf,sizeof buf)&gt;0)<br>&nbsp; &nbsp; &nbsp; // <br>&nbsp; &nbsp; &nbsp; // buf放的就是名字<br>&nbsp; &nbsp; &nbsp; //<br>&nbsp; &nbsp; }<br>&nbsp; CloseHandle(hProcess);<br>&nbsp; }<br>&nbsp;<br>&nbsp;<br><br>--------------------------------------------------------------------------------<br>找出所有进程的 process id:<br><br>下面的程序也是可以在 nt 上运行:<br><br>下面的程序也是需要 psapi.dll<br><br>#include "psapi.hpp"<br><br>DWORD pid[1000];<br>DWORD ret_id=0;<br>if(!EnumProcesses(pid,sizeof pid,&amp;ret_id))<br>&nbsp; //返回0,就是失败了<br><br>成功的话返回 非 0 值<br><br>ret_id是返回的字节数,注意不是id的个数,<br>比如返回 1 个id,实际上ret_id等于4,(表示4个字节)<br>ret_id/4 才是 返回 的id 的个数<br><br>返回的id放在 数组 pid<br>大小要大于 id 可能的最大数才找的全,上面的例子是可以找1000个,足够了,<br>如果嫌大,200个就可以了<br><br>
 
To:天真<br>&nbsp; &nbsp;我不会C语言,请把它转成Delphi,谢谢。
 
后退
顶部