zoukankan      html  css  js  c++  java
  • 使用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
     
  • 相关阅读:
    模电电路分析
    正式答辩提问
    Dockerfile
    Docker常用命令
    docker镜像与容器
    Docker容器与容器数据
    docker命令自动安装
    Docker与虚拟机
    Java Lambda表达式 Stream
    Java Lambda表达式
  • 原文地址:https://www.cnblogs.com/kuangke/p/9524644.html
Copyright © 2011-2022 走看看