2013-06-21 4 views
0

User32.dll에서 BroadcastSystemMessage 메서드를 호출합니다. 한 대의 PC (Windows8 Pro)에서이 메서드가 호출되었지만 호출이 끝나지 않습니다. 응용 프로그램이 대기 중이지만 결과 (또는 예외)가 반환되지 않습니다. 몇 가지 Windows8 컴퓨터에서 (다른 HW, 바이러스 백신과 함께 /없는 ... 등) 시도했지만 이러한 동작은 이러한 컴퓨터에서 발생하지 않습니다.BroadcastSystemMessage의 호출이 완료되지 않음

대상 컴퓨터에 설치되어 있거나 실행중인 응용 프로그램이 없으므로 사용자 지정 메시지가 등록됩니다. 따라서 모든 응용 프로그램은 방송을 무시해야합니다.

이 문제가 해결 되었습니까? 나는 그것에 대해 MSDN에서 언급을 보지 못했습니다. 무엇이 잘못 되었나요? 일부 시간 초과 후 전화를 끊을 올바른 방법이 있습니까?

모든 조언이나 팁을 환영합니다.

코드는 다음과 같습니다

[DllImport("user32", SetLastError = true)] 
public static extern int BroadcastSystemMessage(MessageBroadcastFlags flags, ref MessageBroadcastRecipients lpInfo, uint Msg, IntPtr wParam, IntPtr lParam); 
// ...... 
BroadcastSystemMessage(
    MessageBroadcastFlags.BSF_IGNORECURRENTTASK, // do not send message to this process 
    ref MessageBroadcastRecipients.BSM_ALLDESKTOPS, // broadcast recipients 
    msg, // registered private message 
    IntPtr.Zero, // message-specific value 
    IntPtr.Zero); 
// ...... 
[Flags] 
public enum MessageBroadcastFlags : uint { 
    BSF_QUERY = 0x00000001, 
    BSF_IGNORECURRENTTASK = 0x00000002, 
    BSF_FLUSHDISK = 0x00000004, 
    BSF_NOHANG = 0x00000008, 
    BSF_POSTMESSAGE = 0x00000010, 
    BSF_FORCEIFHUNG = 0x00000020, 
    BSF_NOTIMEOUTIFNOTHUNG = 0x00000040, 
    BSF_ALLOWSFW = 0x00000080, 
    BSF_SENDNOTIFYMESSAGE = 0x00000100, 
    BSF_RETURNHDESK = 0x00000200, 
    BSF_LUID = 0x00000400 
} 

[Flags] 
public enum MessageBroadcastRecipients : uint { 
    BSM_ALLCOMPONENTS = 0x00000000, 
    BSM_VXDS = 0x00000001, 
    BSM_NETDRIVER = 0x00000002, 
    BSM_INSTALLABLEDRIVERS = 0x00000004, 
    BSM_APPLICATIONS = 0x00000008, 
    BSM_ALLDESKTOPS = 0x00000010 
} 
+2

이것은 웬 블리 경기장 내부에서 수십만 명의 시끄러운 축구 팬들을 상대로 소리를 지르며 모든 사람들이 반응하기를 기대하는 것과 같습니다. 그것은 당신이 일하는 것을 막기 위해서가 아니라 매치에 집중하는 것입니다. 당신이 소리 지르는 사람을 구체적으로 생각하고, 그들이 당신을 무시하는 것을 기대하십시오. –

답변

1

나는이 레이몬드 첸의 문제라고 생각합니다 - 희망 그가 그것을 볼 수 있습니다.

일부 제한 시간이 지난 후 전화를 끊는 올바른 방법이 있습니까?

확실히 BSF_NOHANG 플래그를 사용하십시오.

관련 문제