【问题标题】:user32.dll SendMessage command causes message-sending application to pause executionuser32.dll SendMessage 命令导致消息发送应用程序暂停执行
【发布时间】:2012-08-11 13:56:04
【问题描述】:

我正在使用 user32 SendMessage dll 命令将命令传输到 Windows 应用程序。

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);

其中一个命令会导致应用程序显示一个接受输入的模式框。

我的问题是:为什么我的应用程序的代码执行停止,直到另一个应用程序的模式框被关闭?

有没有办法继续执行我的应用程序的代码,而不会受到使用 user32.dll 发送消息时引起的暂停的干扰?

【问题讨论】:

  • 从另一个线程运行 SendMessage
  • 你能告诉我如何在答案中做到这一点,以便我接受吗?
  • 父窗口通常等待其模态(或子)窗口关闭后才能使用。你有没有办法让新窗口不是当前窗口的子窗口?
  • 新显示的窗口不是我的应用程序的子窗口。我的应用程序只向第 3 方应用程序发送消息,该应用程序又显示自己的子窗口。

标签: c# dllimport user32


【解决方案1】:

你可以阅读线程here

这是一个简单的例子:

using System.Threading;

public static void DoSendMessage() 
{
    SendMessage(...); 
}

public void RunSendMessage()
{
  ThreadStart threadDelegate = new ThreadStart(DoSendMessage);
  Thread newThread = new Thread(threadDelegate);
  newThread.Start();
}

【讨论】:

  • 是的,我愿意,PostMessage 是另一种方式 :)
  • 好的,那这就是我需要的。不过,您的答案也+1。谢谢!
【解决方案2】:

SendMessage 将一直阻塞,直到呼叫的接收者完成对消息的处理。

您可以改为使用 PostMessage,这将允许您的程序在发送消息后立即继续执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 2010-09-05
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2015-06-06
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多