我想知道一种方法来执行以下操作:
应用程序启动,未创建任何表单。第二个 App 实例启动,它检测到一个实例已经在运行(这已经排序)
我希望第二个实例向第一个实例发送消息,而不使用广播;我想要一种方法来找到第一个实例的句柄以直接向它发送消息。
第一个实例必须有一个类名才能找到,而第二个实例尚未创建,这样它就不会向自己发送消息。
在这种情况下我将如何使用 FindWindow?如何创建可通过 FindWindow 识别的无窗口类/对象?
我想知道一种方法来执行以下操作:
应用程序启动,未创建任何表单。第二个 App 实例启动,它检测到一个实例已经在运行(这已经排序)
我希望第二个实例向第一个实例发送消息,而不使用广播;我想要一种方法来找到第一个实例的句柄以直接向它发送消息。
第一个实例必须有一个类名才能找到,而第二个实例尚未创建,这样它就不会向自己发送消息。
在这种情况下我将如何使用 FindWindow?如何创建可通过 FindWindow 识别的无窗口类/对象?
您无法通过 FindWindow 找到无窗口对象。
但是您可以使用AllocateHWnd函数创建不可见的窗口- 请参阅 TTimer 源代码作为示例。使用 SetWindowText 设置标题以便于搜索
您可以使用共享内存来传递数据。详情请看这篇文章
如果您知道窗口属性TApplication
的值,您可以向窗口发送消息。Title
发送实例可以暂时将自己的值设置Title
为不同的值,以免混淆FindWindow()
。接收实例可以使用TApplication.OnMessage
事件或TApplication.HookMainWindow()
方法来接收消息。