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

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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
获取任务栏打开程序并将其顶置,可以使用Java的AWT和JNI(Java Native Interface)技术。 下面是一个简单的示例代码,可以实现获取任务栏打开程序并将其顶置: ```java import java.awt.*; public class SetTopTaskbarWindow { public static void main(String[] args) { String windowTitle = "MyWindow"; // 要顶置的窗口标题 int hwnd = findWindow(windowTitle); // 获取窗口句柄 setWindowTop(hwnd); // 将窗口设置为顶置窗口 } // 查找窗口句柄 private static int findWindow(String windowTitle) { int hwnd = 0; hwnd = User32.INSTANCE.FindWindow(null, windowTitle); return hwnd; } // 将窗口设置为顶置窗口 private static void setWindowTop(int hwnd) { User32.INSTANCE.SetForegroundWindow(hwnd); } // 获取任务栏打开程序并将其顶置 private static void setTopTaskbarWindow() { User32.INSTANCE.SetForegroundWindow(User32.INSTANCE.FindWindow("Shell_TrayWnd", null)); User32.INSTANCE.SetForegroundWindow(User32.INSTANCE.FindWindowEx(0, 0, "Button", null)); } } // 使用JNI调用Windows API interface User32 extends W32APIOptions { User32 INSTANCE = Native.load("user32", User32.class, DEFAULT_OPTIONS); boolean SetForegroundWindow(int hwnd); int FindWindow(String lpClassName, String lpWindowName); int FindWindowEx(int parent, int child, String className, String windowName); } ``` 需要注意的是,这段代码只能在Windows操作系统上运行,因为它使用了Windows API。如果要在其他操作系统上运行,需要使用相应的API。 `setTopTaskbarWindow()`方法,首先将任务栏(Shell_TrayWnd)窗口设置为顶置窗口,然后将任务栏上的第一个按钮(Button)设置为顶置窗口,这样就可以获取任务栏打开程序并将其顶置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值