• 使用API函数EnumWindows()枚举顶层窗口


     
    http://simpleease.blog.163.com/blog/static/1596085820052770290/

       要枚举Windows当前所有打开的顶层窗口,可使用Windows API函数EnumWindows():
                    BOOL EnumWindows( WNDENUMPROC lpEnumFunc,  LPARAM lParam);

       具体使用方法如下所示(将指定ProcessID的进程对应窗口置于前台):

            BOOL CALLBACK EnumWindows_SetForegruond_Proc(HWND hwnd, LPARAM lParam)
            {
                    DWORD dwPID = 0;
                    GetWindowThreadProcessId(hwnd, &dwPID);
                    if(dwPID == (DWORD)lParam)
                    {
                           ::SetForegroundWindow(hwnd);
                           ::ShowWindow(hwnd, SW_SHOWNORMAL);
                           return FALSE;
                    }
                    return TRUE;
            }//~End of EnumWindows_SetForegruond_Proc()

            ......
            //以下hProcess为指定窗口的进程句柄HANDLE
            DWORD dwPID = GetProcessId(hProcess);
            EnumWindows(EnumWindows_SetForegruond_Proc, dwPID);

       但是使用上面方法似乎也有个小问题。例如我的HANDLE是通过执行ShellExecuteEx(...)获得的,上面代码虽然执行了EnumWindows_SetForegruond_Proc(),但是并没有将窗口置于前台(好像是因为找不到值为dwPID的进程ID)?而在调试模式下,再执行调用 EnumWindows(EnumWindows_SetForegruond_Proc, dwPID)之前加入一个断点,一步一步执行,操作就成功了!为何?问题待解决ing......
       

    jpg改rar
     
  • 相关阅读:
    sql试题
    DataTable转换成实体类、List、DataSet等
    ASP.NET Web Pages 的冲突版本问题
    Linux系统中使用Xbox360手柄
    QT离线安装包
    美剧爬虫
    ROS串口通信
    Eclipse中STM32工程建立步骤
    AD模块电压采集电路
    一个串口小工具
  • 原文地址:https://www.cnblogs.com/kuangke/p/9524644.html
Copyright © 2020-2023  润新知