2010-07-23 5 views
4

QWidget::activateWindow() 상태의 Qt는 문서 : Windows에서활성 창

, 응용 프로그램이 현재 액티브 한 하지 않을 때이 를 호출하는 경우 다음은하지 않습니다 을 활성 창으로 만드십시오. 작업 표시 줄 항목의 색이 으로 바뀌면 창이 어떤 식 으로든 으로 변경되었음을 나타냅니다. 이것은 Microsoft 이 응용 프로그램에 을 허용하지 않기 때문에 사용자가 현재 다른 응용 프로그램에서 수행중인 작업을 방해하기 때문입니다.

그러나 Skype는이 규칙을 무시하는 것으로 보입니다. Skype가 실행 중이지만 활성화 된 응용 프로그램이 아닌 경우 시작 메뉴에서 시작할 수 있으며 기존 인스턴스를 포 그라운드로 가져 와서 활성화하고 입력 포커스를 가져옵니다.

어떻게하면 이 가능합니까?

답변

6

(참고 :이 QtSingleApplication가를 작동하는 방법에 따라 다릅니다)

이 솔루션은 내 문제에 대한 바보 간단하다. 응용 프로그램의 시작 부분에 AllowSetForegroundWindow(ASF_ANY);으로 전화하면 원래 프로세스가 SetForegroundWindow()을 사용하여 전경에있게됩니다. QtSingleApplication을 수정하거나 추가 할 필요가없는 이상한 해킹이 없습니다.

+1

"자신의 대답을 수락하지 마십시오"라고 말하는 사람에게 질문하십시오 : FAQ를 읽으십시오 :) – sje397

+0

'SetForeground Window()'QtSingleApplication :: activateWindow() 함수 내에서? –

+2

아니요, QtSingleApplication을 수정할 필요가 없습니다. 'QtSingleApplication :: activateWindow()'는 Windows 플랫폼에서 내부적으로'SetForegroundWindow()'를 호출하는'QWidget :: activateWindow()'를 호출합니다. 그래서 이미 끝났습니다. :) Qt 소스의'src \ gui \ kernel \ qwidget_win.cpp : 933'을 보라. –

1

Qt API만으로도 안정적으로 수행 할 수 있다고 생각하지 않습니다.

Windows 용 솔루션은 여러 가지가 있습니다. 예 : hereherehere이다.

이전에 사용한 방법은 shared memory section을 선언하고 거기에 응용 프로그램의 창 핸들을 작성하는 것입니다. 나중에 프로그램의 두 번째 인스턴스가 시작되면 첫 번째 창 핸들을 찾아서 활성화 할 수 있습니다.

두 번째 인스턴스가 활성 응용 프로그램이기 때문에 Windows에서이 문제를 방지 할 수 없다고 생각합니다. 따라서 다른 창에 '포커스를 전달'할 수 있습니다.

0

그들이 모든 사용자가 한 번만 을 시작되었는지도 중요 유용하거나 일부 응용 프로그램의 Qt는 솔루션

에서 사용 Single Application. 나중에 시도 할 때 응용 프로그램을 시작하려면 이미 실행중인 인스턴스 인 을 활성화하고 요청한 작업을 수행해야합니다. 파일을로드하는 중입니다. 인스턴스.

+0

그것을 열 수 있습니다 0에서 1로 setWindowOpacity을 설정할 수 있습니다; 창을 전경으로 가져 오도록 확장해야합니다. –

+0

... // 앱 실행 여부 확인 DApplication 앱 ('ProductinternalName', argc, argv); if (app.isRunning()) { app.sendMessage (QString :: null); return 0; 은} ... // 설정 활성화 창 app.setActivationWindow (&w); ... // 당신은 또한 무효 DApplication에 의해 창을 활성화하는 방법을 사용자 정의 할 수 :: activateWindow() { 경우 (activationWindow을 (해야 할 수도 있습니다 !) && activationWindow() ->에서 IsVisible()) { activationWindow() ->는, setVisible()는 true, } 슈퍼 :: activateWindow(); 내가 그 코드가 잘되는 포맷 할 수 없습니다 죄송 } –

+0

의견 필드. –

-1

당신은 국지적 인 유일한 것은 당신이 모든 시간을 내가 Qt는 솔루션에서 단일 응용 프로그램을 사용하고

+0

답을 더 잘 설명하십시오. 어디에서이 설정을합니까? 코드는 어떻게 생겼을까요? –

관련 문제