您的位置:程序门 -> delphi -> windows sdk/api



如何获得任务栏上所有正在运行程序的标题及其句柄


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何获得任务栏上所有正在运行程序的标题及其句柄
发表于:2008-02-23 00:48:36 楼主
用getwindowstext和enumwindows获得的有很多是我不需要的,我只需要在任务栏上有显示的那些...

谢谢
发表于:2008-02-26 22:15:321楼 得分:0
参考如下代码:
delphi(pascal) code
uses commctrl; procedure tform1.button1click(sender: tobject); var vhandle: thandle; vcount: integer; vprocessid: longword; vprocess: thandle; vpointer: pointer; vbuffer: array[0..255] of char; vnumberofbytesread: longword; i: integer; vtbbutton: ttbbutton; vwindow: thandle; begin vhandle := findwindow('shell_traywnd', nil); vhandle := findwindowex(vhandle, 0, 'rebarwindow32', nil); vhandle := findwindowex(vhandle, 0, 'mstaskswwclass', nil); vhandle := findwindowex(vhandle, 0, 'toolbarwindow32', nil); if vhandle = 0 then exit; vcount := sendmessage(vhandle, tb_buttoncount, 0, 0); getwindowthreadprocessid(vhandle, vprocessid); vprocess := openprocess(process_vm_operation or process_vm_read or process_vm_write, false, vprocessid); vpointer := virtualallocex(vprocess, nil, $1000, mem_reserve or mem_commit, page_readwrite); try for i := 0 to vcount - 1 do begin sendmessage(vhandle, tb_getbutton, i, integer(vpointer)); readprocessmemory(vprocess, vpointer, @vtbbutton, sizeof(ttbbutton), vnumberofbytesread); if vtbbutton.fsstyle = 170 then continue; // 组按钮 readprocessmemory(vprocess, pointer(vtbbutton.dwdata), @vwindow, sizeof(integer), vnumberofbytesread); sendmessage(vhandle, tb_getbuttontext, i, integer(vpointer)); readprocessmemory(vprocess, vpointer, @vbuffer[0], sizeof(vbuffer), vnumberofbytesread); outputdebugstring(pchar(format('handle=%d,title=%s', [vwindow, vbuffer]))); end; finally virtualfreeex(vprocess, vpointer, 0, mem_release); closehandle(vprocess); end; end;
发表于:2008-02-26 22:37:312楼 得分:0
好东东,学习,学习。
楼上的代码测试通过。


快速检索

最新资讯
热门点击