Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net BroadcastSystemMessage的调用从未完成_.net_Winapi_User32_Window Messages - Fatal编程技术网

.net BroadcastSystemMessage的调用从未完成

.net BroadcastSystemMessage的调用从未完成,.net,winapi,user32,window-messages,.net,Winapi,User32,Window Messages,我正在从User32.dll调用BroadcastSystemMessage方法。在一台PC(Windows8 Pro)上调用该方法,但调用从未结束。应用程序正在等待,但结果(或异常)从未返回。我在几台Windows8计算机(不同的硬件、有/没有防病毒软件等)上试用过,但这种行为在这些计算机上从未发生过 目标计算机没有任何已安装或正在运行的应用程序,这些应用程序将注册自定义消息。因此,所有应用程序都应该忽略广播 这种行为正确吗?我在MSDN中没有看到任何关于它的提及。 发生了什么?是否有正确的方

我正在从
User32.dll
调用
BroadcastSystemMessage
方法。在一台PC(Windows8 Pro)上调用该方法,但调用从未结束。应用程序正在等待,但结果(或异常)从未返回。我在几台Windows8计算机(不同的硬件、有/没有防病毒软件等)上试用过,但这种行为在这些计算机上从未发生过

目标计算机没有任何已安装或正在运行的应用程序,这些应用程序将注册自定义消息。因此,所有应用程序都应该忽略广播

这种行为正确吗?我在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
}

我想这是陈雷蒙的问题——希望他能看到

是否有正确的方法在超时后停止呼叫


当然可以,使用BSF_NOHANG旗帜。

这有点像在温布利体育场内对着数十万吵闹的球迷大喊大叫,希望他们都能响应。只需要一个人去关注比赛,而不是你去阻止比赛。明确你对谁大喊大叫,期望他们仍然不理你。