2011-02-28 6 views
0

창이 비활성화되지 않도록 할 수있는 방법이 있습니까? 창문이 다른 과정을 거치고 있습니다.창이 비활성화되지 않도록하려면 어떻게합니까?

이것은 Windows 용입니다.

+3

같은 질문에 대한 답변의 핵심은 두 개의 응용 프로그램이 그렇게하려고하면 무엇? –

+0

@Sasha : +1. 또한, "창문이 다른 과정에있다"는 것은 기본적인 문제에 대한 흥미로운 비꼬는 소리처럼 들린다. –

+4

"다른 프로세스의 창을 비활성화하는 것을 방지합니다"는 문제가 아니라 작업하려는 솔루션처럼 들리므로 근본적인 문제가 무엇인지 알려 주시면 더 나은 조언을 얻을 수 있습니다. –

답변

3

이렇게하는 것은 위험 할 수 있지만 해결책은 WM_ACTIVATE 메시지를 처리하고 wParam이 WA_INACTIVE인지 확인하는 것입니다. 이것은 창이 비활성화되었음을 의미합니다. 이런 일이 생기면 다시 활성화 할 수 있습니다.

다른 프로세스의 창에서이 작업을 수행하려면 SetWindowsHookEx과 함께 메시지 후크를 설치해야합니다.

그러나 다른 응용 프로그램이 서로를 무한 루프로 활성화/비활성화시키는 것도 가능합니다.

이것은 또한 개인용 컴퓨터에서 실행하기위한 소프트웨어로 수행해서는 안되는 일입니다.

+2

더 중요한 것은 포커스 변경 이벤트 중에 포커스를 변경하지 않아야한다는 것이 Windows의 어려운 규칙입니다. WM_ACTIVATE는 윈도우가 활성화 상태를 바꾸고 있다는 알림 일뿐입니다 ** ** 허가를 요청하지 않습니다 **. 당신은 그 문제에 대해 정말로 아무 말도하지 않으며, 당신이한다고 가정하면 문제를 묻는 것입니다. –

0

할 수 있습니다 트랩이 같은 WM_ACTIVATEAPP :

protected override void WndProc(ref Message m) { 
    // Trap WM_ACTIVATEAPP 
    if ((m.Msg == 0x1c) && (m.WParam == IntPtr.Zero)) 
    { 
    // If WM_ACTIVATEAPP and WParam is deactivated, return 
    return; 
    } 
    base.WndProc(ref m); 
} 
+0

다른 프로세스에서 창을 호출 할 때의 질문입니다. 코드는 코드와 동일한 프로세스의 창에서만 작동합니다. – Steve

+0

이것이 제대로 작동합니까? 다른 응용 프로그램은 동시에 WM_ACTIVATEAPP 메시지를 수신하고 있습니다. 이 메시지는 앱을 비활성화 할 수있는 권한을 요청하지 않습니다. –

관련 문제