2013-07-04 1 views
4

GUI 사용자 (GI 사용자)가 알려지고 친숙한 응용 프로그램으로 직접 전환 할 수있게하고 싶습니다. 키보드 단축키로. 이상적으로, 내 응용 프로그램은 OS/Windows에 이름 또는 기본 창 제목 문자열 "XYZ"로 응용 프로그램을 표시하도록 요청합니다. 행동의Windows에서 다른 응용 프로그램으로 전환하는 방법 (C++, Qt 사용)?

수동 경로는 ALT+TAB이 위치와 마지막으로 활성화 된 프로그램 창을 전경으로 가져옵니다 원하는 응용 프로그램 아이콘으로 이동 한 다음 Windows 작업 스위처 열고하는 것입니다. 또는 Task Bar을 통한 탐색.

AutoHotkey는 달성하고자하는 것을 수행하는 WinActivate 함수를 가지고 있습니다.

답변

3

다음 코드는 Windows 7에서 문제없이 여기 작품 :

#include <windows.h> 

[...] 

// find window handle using the window title 
HWND hWnd = ::FindWindow(NULL, L"Window Title"); 
if (hWnd) { 
    // move to foreground 
    ::SetForegroundWindow(hWnd); 
} 
+0

감사합니다. [FindWindow doc] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx) – handle

0

WinActivate를 검색하면 WinAPI의 GetForegroundWindowSetForegroundWindow에 연결되는 AutoHotkey forum post이 표시됩니다. 그것은

  • 이 창 핸들을 필요로

    BOOL WINAPI SetForegroundWindow(
        _In_ HWND hWnd 
    ); 
    

    그러나이 진정한 해결책이 아직되지 않습니다 (방법 창 제목을 얻을 수 있습니까?)

  • 가 (제한된 권한을 가진 프로세스 소유권 속임수이 켜지지 : herehere)

후자의 링크는 매우 정교하지만 저자는 포기한 것 같습니다.

2

응용 프로그램이 실제로 친숙한 경우, 즉 둘 다 제어하에있는 경우 다른 응용 프로그램을 불러올 수있는 통신 소켓이나 공유 라이브러리를 사용하는 것이 더 쉬운 솔루션 일 수 있습니다. 이 슬롯에

QTimer::singleShot(2000, 
        this, 
        SLOT(toForeground()) 
        ); 

: 이것은 작업 표시 줄 보여 곧 응용 프로그램 아이콘을 강조 표시됩니다

void MainWindow::toForeground() 
{ 
    qDebug() << SetForegroundWindow(this->winId()); 
} 

전화를 지연 - 충분히 힘들 것 같다

. 응용 프로그램으로 전환하지 않습니다.

Qt 자신의 activateWindow()은 더 지속적으로 깜박이는 작업 표시 줄 아이콘을 표시하지만 응용 프로그램을 높이 지 않습니다.

후자 알 :

showNormal(); 
raise(); 
activateWindow(); 

B를 이전

이 시도되었다 Windows 7 64 비트에서 Qt 4.8.1 및 MSVC++ 2010을 사용할 수 없습니다.여기

나는 또한 다른 질문에서 언급 한 생각 코드입니다, 저자는 그것은 항상 전면에 창을 제공합니다

를 기록

하지만, 초점은 어딘가에 입니다 :-(다른 앱에서는 ...

본인이 확인할 수 있습니다.


편집 : 윈도우의 행동은 레지스트리를 통해 전 세계적으로 변경할 수 (!? 안) 수 : https://stackoverflow.com/a/6087923/1619432http://qt-project.org/faq/answer/qwidget_activatewindow_-_behavior_under_windows

관련 문제