답변
이렇게하는 것은 위험 할 수 있지만 해결책은 WM_ACTIVATE 메시지를 처리하고 wParam이 WA_INACTIVE인지 확인하는 것입니다. 이것은 창이 비활성화되었음을 의미합니다. 이런 일이 생기면 다시 활성화 할 수 있습니다.
다른 프로세스의 창에서이 작업을 수행하려면 SetWindowsHookEx
과 함께 메시지 후크를 설치해야합니다.
그러나 다른 응용 프로그램이 서로를 무한 루프로 활성화/비활성화시키는 것도 가능합니다.
이것은 또한 개인용 컴퓨터에서 실행하기위한 소프트웨어로 수행해서는 안되는 일입니다.
더 중요한 것은 포커스 변경 이벤트 중에 포커스를 변경하지 않아야한다는 것이 Windows의 어려운 규칙입니다. WM_ACTIVATE는 윈도우가 활성화 상태를 바꾸고 있다는 알림 일뿐입니다 ** ** 허가를 요청하지 않습니다 **. 당신은 그 문제에 대해 정말로 아무 말도하지 않으며, 당신이한다고 가정하면 문제를 묻는 것입니다. –
할 수 있습니다 트랩이 같은 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);
}
다른 프로세스에서 창을 호출 할 때의 질문입니다. 코드는 코드와 동일한 프로세스의 창에서만 작동합니다. – Steve
이것이 제대로 작동합니까? 다른 응용 프로그램은 동시에 WM_ACTIVATEAPP 메시지를 수신하고 있습니다. 이 메시지는 앱을 비활성화 할 수있는 권한을 요청하지 않습니다. –
같은 질문에 대한 답변의 핵심은 두 개의 응용 프로그램이 그렇게하려고하면 무엇? –
@Sasha : +1. 또한, "창문이 다른 과정에있다"는 것은 기본적인 문제에 대한 흥미로운 비꼬는 소리처럼 들린다. –
"다른 프로세스의 창을 비활성화하는 것을 방지합니다"는 문제가 아니라 작업하려는 솔루션처럼 들리므로 근본적인 문제가 무엇인지 알려 주시면 더 나은 조언을 얻을 수 있습니다. –