如何查看任务栏上有哪些进程

kdevilpf 2012-11-05 08:48:43
请问用什么方法能得到任务栏上有哪些进程?

想写个程序实现判断某个窗口是否最小化到托盘区。
...全文
351 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-03-28
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
Eleven 2012-11-18
  • 打赏
  • 举报
回复
引用 2 楼 kdevilpf 的回复:
上楼兄弟,我不是要所有进程,只要列出任务栏上才窗口进程就可以了,不在任务栏上的不能列出
枚举托盘区的图标就可以了 托盘区那里是个ToolbarWindow
若风09 2012-11-18
  • 打赏
  • 举报
回复
gfm688 2012-11-13
  • 打赏
  • 举报
回复
修正一下:

BOOL IsWindowOnTray(HWND hWnd)
{
  HWND hWndTray, hWndPaper;
  DWORD dwProcessId;
  int nButtonCount;
  HANDLE hProcess;
  LPVOID lpAddress;
  TBBUTTON tb;
  TRAYDATA trayData;
  BOOL bResult = FALSE;
 
  hWndTray = FindWindow(TEXT("Shell_TrayWnd"), NULL);
  hWndTray = FindWindowEx(hWndTray, 0, TEXT("TrayNotifyWnd"), NULL);
  hWndPaper = FindWindowEx(hWndTray, 0, TEXT("SysPager"), NULL);
  if(!hWndPaper)
    hWndTray = FindWindowEx(hWndTray, 0, TEXT("ToolbarWindow32"), NULL);
  else
    hWndTray = FindWindowEx(hWndPaper, 0, TEXT("ToolbarWindow32"), NULL);
 
  GetWindowThreadProcessId(hWndTray, &dwProcessId);
  hProcess = OpenProcess(PROCESS_ALL_ACCESS
    |PROCESS_VM_OPERATION
    |PROCESS_VM_READ
    |PROCESS_VM_WRITE,
    0,
    dwProcessId);
  lpAddress = VirtualAllocEx(hProcess,0, 0x4096, MEM_COMMIT, PAGE_READWRITE);
  nButtonCount = SendMessage(hWndTray, TB_BUTTONCOUNT, 0, 0);
 
  for(int i = 0 ; i < nButtonCount - 1; i++)
  {
    SendMessage(hWndTray, TB_GETBUTTON, i, (LPARAM)lpAddress);
    ReadProcessMemory(hProcess, lpAddress, &tb, sizeof(TBBUTTON), 0);
    ReadProcessMemory(hProcess, (LPVOID)tb.dwData, &trayData, sizeof(TRAYDATA), 0);
    if (trayData.hwnd == hWnd)
    {
      bResult = TRUE;
      break;
    }
  }
  VirtualFreeEx(hProcess, lpAddress, 0x4096, MEM_RELEASE);
  CloseHandle(hProcess);
  return bResult;
}
gfm688 2012-11-08
  • 打赏
  • 举报
回复
判断某个窗口是否最小化到托盘区,只要知道窗口句柄就行了,不用判断进程; 枚举托盘图标时可以得到相应的窗口句柄

BOOL IsWindowOnTray(HWND hWnd)
{
  HWND hWnd,hWndPaper;
  DWORD dwProcessId;
  int nButtonCount;
  HANDLE hProcess;
  LPVOID lpAddress;
  TBBUTTON tb;
  TRAYDATA trayData;
  BOOL bResult = FALSE;

  hWnd = FindWindow(TEXT("Shell_TrayWnd"), NULL);
  hWnd = FindWindowEx(hWnd, 0, TEXT("TrayNotifyWnd"), NULL);
  hWndPaper = FindWindowEx(hWnd, 0, TEXT("SysPager"), NULL);
  if(!hWndPaper)
    hWnd = FindWindowEx(hWnd, 0, TEXT("ToolbarWindow32"), NULL);
  else
    hWnd = FindWindowEx(hWndPaper, 0, TEXT("ToolbarWindow32"), NULL);

  GetWindowThreadProcessId(hWnd, &dwProcessId);
  hProcess = OpenProcess(PROCESS_ALL_ACCESS
    |PROCESS_VM_OPERATION
    |PROCESS_VM_READ
    |PROCESS_VM_WRITE,
    0,
    dwProcessId);
  lpAddress = VirtualAllocEx(hProcess,0, 0x4096, MEM_COMMIT, PAGE_READWRITE);
  nButtonCount = SendMessage(hWnd, TB_BUTTONCOUNT, 0, 0);

  for(int i = 0 ; i < nButtonCount - 1; i++)
  {
    SendMessage(hWnd, TB_GETBUTTON, i, (LPARAM)lpAddress);
    ReadProcessMemory(hProcess, lpAddress, &tb, sizeof(TBBUTTON), 0);
    ReadProcessMemory(hProcess, (LPVOID)tb.dwData, &trayData, sizeof(TRAYDATA), 0);
    if (trayData.hwnd == hWnd)
    {
      bResult = TRUE;
      break;
    }
  }
  VirtualFreeEx(hProcess, lpAddress, 0x4096, MEM_RELEASE);
  CloseHandle(hProcess);
  return bResult;
}
qlizhang 2012-11-06
  • 打赏
  • 举报
回复
参考 //列举所有进程名称 void CListProcessesDlg::ListProcesses() { //初始化 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 { //将进程名加到列表中 m_ctrlLstPorcesses.AddString(pe32.szExeFile); } while (Process32Next(hProcessSnap, &pe32));//直到列举完毕 } else { printf("\nProcess32Firstt() failed:%d",GetLastError()); } //关闭句柄 CloseHandle (hProcessSnap); }
kdevilpf 2012-11-06
  • 打赏
  • 举报
回复
上楼兄弟,我不是要所有进程,只要列出任务栏上才窗口进程就可以了,不在任务栏上的不能列出

15,979

社区成员

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

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