將窗口移動到前端, 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 閱讀(837) 評論(0)  編輯  收藏 所屬分類: C++

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914107
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 沙湾县| 漳平市| 英吉沙县| 平阴县| 河北省| 西昌市| 大连市| 泸州市| 长治市| 自治县| 尚志市| 莒南县| 鄂伦春自治旗| 奉新县| 五华县| 永福县| 红河县| 洛扎县| 宣威市| 靖远县| 甘德县| 互助| 云阳县| 南溪县| 吉水县| 凌源市| 石棉县| 顺昌县| 洛隆县| 宁都县| 南开区| 鄢陵县| 体育| 洛宁县| 青河县| 望都县| 乳山市| 祁阳县| 丰原市| 西丰县| 大埔县|