• 获取任务栏所有正在运行程序


    mfc程序添加 CListCtrl名称 m_userlist 

    OnInitDialog 事件中添加INITTHIS 方法


    BOOL CALLBACK EnumTaskbarWnds( HWND hwnd, LPARAM lParam )
    {
        char szClass[256];
    list<char*> trasList;
        if( !::GetWindow( hwnd, GW_OWNER ) && ::IsWindowVisible( hwnd ) ) // 滤掉不在任务栏显示的窗口
    {
            GetClassName( hwnd, szClass, 256 );
            if( strcmp( szClass, "Shell_TrayWnd" ) != 0 // 滤掉任务栏本身
                && strcmp( szClass, "Progman" ) != 0 ) // 滤掉桌面
    {
                char szTitle[256];
                ::GetWindowText( hwnd, szTitle, 256 );
    if(strcmp(szTitle,"")==0){
    return TRUE;
    }
    int row=currentObj->m_userlist.InsertItem(currentObj->m_userlist.GetItemCount(),"");
    currentObj->m_userlist.SetItemText(row,0,szTitle);

    currentObj->m_userlist.SetItemText(row,1,"正在运行");
    //这里获取到窗口的进程id
    HWND hwnd=FindWindow(szClass,NULL);
    HINSTANCE hIns = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE);
    //HICON icon=LoadIcon(handle,0);
    DWORD dwProcId=0;
    ::GetWindowThreadProcessId(hwnd,&dwProcId);
    HANDLE pHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcId);
    char szExePath[MAX_PATH]="";
    GetModuleFileNameEx(pHandle, 0, szExePath, sizeof(szExePath));
    WORD rtnIndex;
    HICON rtnIcon;
    //HICON rtnIcon=ExtractAssociatedIcon(hIns,szExePath,&rtnIndex);//一种导出方式
    SHFILEINFO fileInfo;
    DWORD dwRet = ::SHGetFileInfo(szExePath, 0, &fileInfo, sizeof(SHFILEINFO), SHGFI_ICON); //另外一种导出方式
    rtnIcon=fileInfo.hIcon;
    currentObj->m_ImageList.Add(rtnIcon);
    LV_ITEM lvitem = {0};
    lvitem.mask = LVIF_IMAGE;
    lvitem.iItem = row;    //设置的第几行
    lvitem.iSubItem = 0;   //这个表示当前行的列索引
    lvitem.iImage = row;   //图像索引,以ImageList添加顺序为准
    currentObj->m_userlist.SetItem(&lvitem);

    }//end if
    }//end if

        return TRUE;
    }
    void ctrl_usertaslist::INITTHIS(){
    m_userlist.DeleteAllItems();
    LONG styles;
        styles=GetWindowLong(m_userlist.m_hWnd,GWL_STYLE);
        SetWindowLong(m_userlist.m_hWnd,GWL_STYLE,styles | LVS_REPORT);
        m_userlist.ShowScrollBar(SB_HORZ,FALSE);
        m_userlist.ShowScrollBar(SB_VERT,TRUE);
    m_userlist.SetExtendedStyle(LVS_REPORT|LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP| LVS_EX_SUBITEMIMAGES);//|LVS_SHOWSELALWAYS
    m_userlist.InsertColumn(0,_T("任务"),LVCFMT_LEFT,220,100);
    m_userlist.InsertColumn(1,_T("状态"),LVCFMT_CENTER,100,100);
    /************************************************************************/
    /* cx ,cy:图片的实际像素宽与高
      nFlags: 创建图像列表的类型,包括4/8/16/24/32/位色,
      nInitial : 创建ImageList初始包括的图像个数
      nGrow 当初始分配的图像个数不够的时候,新增一个图片时,指定图象列表能增加的新图象个数,图像列表空间不够而继续添加image时,将按照nGrow继续分配空间,设计时根据具体情况设置合适的值,避免内存频繁的改变图像列表而過度頻繁而使系統记忆体碎片化
      ----------------------------------------------
      例如 nInitial = 2,nGrow=3
      当你   添加了两个图像元素以后,还想添加第三个的时候,初始创建分配的nInitial已经使用完了,
      此时,系统会根据nGrow,为自动增大Imagelist3个元素容量,此时我们的Imagelist就可以容纳5个图像元素了,
      如果5个使用完毕后,会继续按照nGrow进行再分配,类似于一个可变数组,但参数到底设置多少,
      还是要根据实际的情况设置合理的值,一要避免浪费空间,又要避免频繁的对Image容器进行resize操作                                                                     */
    /************************************************************************/
    m_ImageList.Create(16, 16, ILC_COLOR16 | ILC_MASK, 5, 2);
    m_userlist.SetImageList(&m_ImageList,LVSIL_SMALL);
    ::EnumWindows(EnumTaskbarWnds, NULL);
    }

  • 相关阅读:
    RF运行之后控制信息日志显示乱码(解决方法)
    robot framework error: [ ERROR ] Suite 'XXX' contains no tests or tasks.(解决方法)
    MySQL下载与安装
    巧妙利用selenium中的JS操作来处理特殊的文本框
    Fiddler请求图标含义
    类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法
    python模块与包的详解
    python字典总结
    python文件读写详解
    python类和self解析
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331312.html
Copyright © 2020-2023  润新知