如何枚举任务栏上的任务名,并得到它们的句柄!

minjianken 2003-04-23 01:33:51
!!
...全文
473 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
herofyf 2003-04-23
  • 打赏
  • 举报
回复
up!work hard !
lblyy76 2003-04-23
  • 打赏
  • 举报
回复
#include <tlhelp32.h>忘记说了
lblyy76 2003-04-23
  • 打赏
  • 举报
回复
//初始化
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32 = {0};
//获得句柄
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == (HANDLE)-1)
{
printf("\nCreateToolhelp32Snapshot()failed:%d",GetLastError());
return;
}
pe32.dwSize = sizeof(PROCESSENTRY32);

//列举所有进程名称
if (Process32First(hProcessSnap, &pe32))
{
do
{
//将进程名加到ListBox控件列表中
m_ctrlLstPorcesses.AddString(pe32.szExeFile);
}
while (Process32Next(hProcessSnap, &pe32));//直到列举完毕
}
else
{
printf("\nProcess32Firstt() failed:%d",GetLastError());
}
//关闭句柄
CloseHandle (hProcessSnap);
u2m 2003-04-23
  • 打赏
  • 举报
回复
有个参考资料

介绍
以 Windows 消息为利器,随心所欲控制 Windows 任务栏

正文

【出发点】
Windows 系统的所有控件都是通过句柄操作的,而各种消息是各种操作的指示符,比如,发送 TB_BUTTONCOUNT 消息可以得到系统任务栏的图标数。

【关键点】
1、得到要被操作的对象的句柄
2、消息的格式

【两个封装函数】
1、得到系统任务栏句柄函数 -- int Get_SysTab(HWND *hwnd)
2、得到任务栏中的工具栏的句柄 -- int Get_SysTaskBar(HWND *hwnd)

※、其它对象的句柄请读者自己完成

【两个封装函数的完整代码】

// hwnd:返回的句柄
// 返回值:成功返回 0
int Get_SysTaskBar(HWND *hwnd)
{
HWND hShellTrayWnd = NULL;

// 系统任务栏
HWND hToolbarWindow32_Notify = NULL;
HWND hTrayNotifyWnd = NULL;
HWND hTrayClockWClass = NULL;

hShellTrayWnd = ::FindWindow(_T("Shell_TrayWnd"), NULL);
if (NULL == hShellTrayWnd)
return NO_SHELLTRAYWND;

hTrayNotifyWnd = FindWindowEx(hShellTrayWnd, NULL, _T("TrayNotifyWnd"), NULL);
if (NULL == hTrayNotifyWnd)
return FAILURE;

hToolbarWindow32_Notify = FindWindowEx(hTrayNotifyWnd, NULL, _T("ToolbarWindow32"), NULL);
if (NULL == hToolbarWindow32_Notify)
return FAILURE;

*hwnd = hToolbarWindow32_Notify;

return SUCCESS;
}

// hwnd:返回的句柄
// 返回值:成功返回 0
int Get_SysTab(HWND *hwnd)
{
// 任务栏
HWND hShellTrayWnd = NULL;

// 普通任务栏
HWND hReBarWindow32 = NULL;
HWND hToolbarWindow32_ReBar = NULL;
HWND hMSTaskSwWClass = NULL;
HWND hSysTabControl32 = NULL;

hShellTrayWnd = ::FindWindow(_T("Shell_TrayWnd"), NULL);
if (NULL == hShellTrayWnd)
return NO_SHELLTRAYWND;

hReBarWindow32 = FindWindowEx(hShellTrayWnd, NULL, _T("ReBarWindow32"), NULL);
if (NULL == hReBarWindow32)
return NO_REBARWINDOW32;

hMSTaskSwWClass = FindWindowEx(hReBarWindow32, NULL, _T("MSTaskSwWClass"), NULL);
if (NULL == hMSTaskSwWClass)
return NO_MSTASKSWWCLASS;

hSysTabControl32 = FindWindowEx(hMSTaskSwWClass, NULL, _T("SysTabControl32"), NULL);
if (NULL == hSysTabControl32)
return NO_SYSTABCONTROL32;

*hwnd = hSysTabControl32;

return SUCCESS;
}

【得到系统任务栏图标总数举例】
int Get_SysTaskBarIconCount()
{
HWND hToolbarWindow32_Notify = NULL;

if ((Get_SysTaskBar(&hToolbarWindow32_Notify) != 0)
|| (NULL == hToolbarWindow32_Notify))
return 0;

return ::SendMessage(hToolbarWindow32_Notify, TB_BUTTONCOUNT,0 , 0);
}


【得到任务栏的工具栏 tab 页数举例】
int Get_TabCount(int *iCount);
{
HWND hSysTabControl32 = NULL;

if (NULL == pTab)
return FAILURE;

if ((Get_SysTab(&hSysTabControl32) != SUCCESS)
|| (hSysTabControl32 == NULL) )
return FAILURE;

*iCount = ::SendMessage(hSysTabControl32, TCM_GETITEMCOUNT, 0, 0);

return SUCCESS;
}
jwyhit 2003-04-23
  • 打赏
  • 举报
回复
关注,我只知道怎么往任务拦加图标

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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