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

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916109
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 盐池县| 高要市| 钦州市| 乌恰县| 鄂托克旗| 宜黄县| 正安县| 道真| 新竹县| 文成县| 青岛市| 云安县| 赤壁市| 莱州市| 乳山市| 化州市| 宁波市| 昭通市| 新昌县| 宕昌县| 乐安县| 沧源| 修武县| 通化县| 东方市| 原平市| 蓝田县| 鄂伦春自治旗| 天镇县| 增城市| 安康市| 闸北区| 揭西县| 库尔勒市| 余姚市| 东台市| 封开县| 慈利县| 资源县| 英山县| 金门县|