將窗口移動到前端, BringWindowToTop() 的問題 有一段代碼,是在我們的應用程序中將其他應用程序的窗口移動到最前端,當我們的程序在 Vista 下運行的時候遇到了些問題,有時候被移動窗口只是閃動任務欄上的按鈕,并未能將窗口移動到前方來. 研究了一下,發現是否能夠移動成功和當前自身進程所附加的輸入上下文有關, 參見
          WIN32 API AttachThreadInput()...
           
          寫了個 MyBringWindowToTop() 如下, 這是個 draft 把我用到過的能把窗口拿到最前方的 API 都羅列在里面了, 也沒有正確的返回值, 供參考.
           
          BOOL MyBringWindowToTop(HWNDhWnd)
          {
            
              HWNDhFrgWnd = ::GetForegroundWindow();
              AttachThreadInput( GetWindowThreadProcessId(hFrgWnd, NULL), GetCurrentThreadId(), TRUE );
              ::SetForegroundWindow(hWnd);
              ::BringWindowToTop(hWnd);
             
              if(!::BringWindowToTop(hWnd))
              {
                  printf("BringWindowToTop Error %d\n", GetLastError());
              }
              else
              {
                  printf("BringWindowToTop OK\n");
              }
              if(!::SetForegroundWindow(hWnd))
              {
                  printf("SetForegroundWindow Error %d\n", GetLastError());
              }
              else
              {
                 printf("SetForegroundWindow OK\n");
              }
             
              SwitchToThisWindow(hWnd, TRUE);
             
              AttachThreadInput(GetWindowThreadProcessId(hFrgWnd, NULL),
                  GetCurrentThreadId(), FALSE);
           
              returnTRUE;
          }

           

          posted on 2010-01-04 10:01 -274°C 閱讀(854) 評論(0)  編輯  收藏 所屬分類: C++

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 917238
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 桐乡市| 那坡县| 北辰区| 固阳县| 吉林市| 新余市| 新和县| 张北县| 承德市| 浦城县| 佛坪县| 永定县| 云龙县| 林西县| 安顺市| 金湖县| 崇礼县| 抚松县| 浦江县| 广饶县| 秭归县| 隆林| 博湖县| 辽源市| 盘山县| 衡水市| 乃东县| 麦盖提县| 伊宁县| 白玉县| 安陆市| 绥化市| 霍邱县| 枝江市| 金平| 江山市| 绥阳县| 南投县| 东宁县| 江北区| 澄城县|