如何通过托盘图标得到该所属进程- theoldman - theoldman - 和讯博客
如何通过托盘图标得到该所属进程 [转贴 2010-01-29 15:50:46]   
想要求教两个问题:  

 

首先,如何得到当前所有托盘图标?  

还有,如何通过托盘图标得到该所属进程  

 

 

想知道使用什么函数,要是能给个例程就更感谢了!  

谢谢,再次感谢!  

---------------------------------------------------------------  

 

进程ID可以得到了,以下是全部程序:  

void  CTrayDlg::OnButton1()    

{  

            //  TODO:  Add  your  control  notification  handler  code  here  

HWND  wd=::FindWindow("Shell_TrayWnd",NULL);  

    if  (wd==NULL)  

    {  

          MessageBox("Error1");  

              return;  

    }  

    HWND  wtd=FindWindowEx(wd,NULL,"TrayNotifyWnd",NULL);  

    if  (wtd==NULL)  

    {  

          MessageBox("Error2");  

              return;  

    }  

    HWND  wd1=FindWindowEx(wtd,NULL,"ToolbarWindow32",NULL);  

    if  (wd1==NULL)  

    {  

          MessageBox("Error3");  

              return;  

    }  

    DWORD  pid;  

    pid=0;  

    GetWindowThreadProcessId(wd1,&pid);  

    if  (pid==NULL)  

    {  

          MessageBox("Error4");  

              return;  

    }  

 

    HANDLE  hd=OpenProcess(PROCESS_QUERY_INFORMATION    &brvbar    PROCESS_ALL_ACCESS            ,true,pid);  

    if  (hd==NULL)  

    {  

          MessageBox("Error6");  

          return;  

      }  

 

    int  num=::SendMessage(wd1,TB_BUTTONCOUNT  ,NULL,NULL);  

    int  i;  

    unsigned  long  n;  

    TBBUTTON  p,*pp;  

    CString  x;  

    wchar_t  name[256];  

    unsigned  long  whd,proid;  

    CString  temp;  

 

    TBBUTTON  *sp;  

 

    sp=  (TBBUTTON  *)0x20f00;  

    for(i=0;i<num;i++)  

    {  

            ::SendMessage(wd1,TB_GETBUTTON,i,(LPARAM)sp);  

        pp=&p;  

        ReadProcessMemory(hd,sp,pp,sizeof(p),&n);  

//        x.Format("%x  %x  %x  %x    %x  %x",p.iBitmap,p.idCommand,p.fsState,p.fsStyle,    p.dwData,  p.iString);  

        name[0]=0;  

        if  (p.iString!=0xffffffff)  

        {  

                try  

                {  

                        ReadProcessMemory(hd,(void  *)p.iString,name,255,&n);  

                        name[n]=0;  

                }  

                catch(...)  

                {  

                }  

//                x+="  ";  

//                x+=name;  

                        temp=name;  

                        try  

                        {  

                                    whd=0;  

                        ReadProcessMemory(hd,(void  *)p.dwData,&whd,4,&n);  

                        }  

                        catch(...)  

                        {  

                        }  

                        proid=0;  

                GetWindowThreadProcessId((HWND)whd,&proid);  

                        x.Format("位置=%d  名称=%s  窗口句柄=%08x  进程ID=%08x",  

                                          i,(LPCTSTR  )temp,whd,proid);  

                m_list.AddString(x);  

        }  

 

 

    }  

 

              

}
郑重声明:资讯 【如何通过托盘图标得到该所属进程- theoldman - theoldman - 和讯博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——