微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将文件名从程序的第二个实例传递到主实例?

如何解决如何将文件名从程序的第二个实例传递到主实例?

假设我的程序的一个实例正在运行。它打开了“File1.My”(无论是什么)。
现在用户双击 WinExplorer 'File2.My'。 “我的”扩展名与我的程序相关联,因此将启动第二个实例。我使用 WMcopYDATA 将文件名 ('File2') 从第二个实例传递到第一个实例。第一个实例将接收加载该文件文件名。第二个实例将自行关闭

我的问题是 WMcopYDATA 消息可能会在第一个实例显示一个对话框时出现,例如“您确定要将 File1 保存到磁盘吗?”。
当消息到达时,第一个实例将加载 File2 同时 dlg 框显示在屏幕上询问“File1”。
那么,我该如何处理??

  1. 也许可以将 Load(File2) 放入我在对话框关闭后处理的队列中?
  2. 或者,也许我应该在模式对话框打开时从消息队列中过滤 WMcopyData?
  3. 使用某种标志:如果 WMcopyDataReceived_Flag 则 Abort_current_code_after_the_dlgBox

所有 3 个似乎都比必要的复杂。

解决方法

我的问题是 WMCOPYDATA 消息可能会在第一个实例显示一个对话框时出现,例如“您确定要将 File1 保存到磁盘吗?”。
当消息到达时,第一个实例将加载 File2,同时屏幕上会显示 dlg 框,询问“File1”。

这有什么问题?对话框的消息循环仍然会将 WM_COPYDATA 消息分派给正确的窗口消息过程。您应该单独处理每个文件。您的应用是否不允许同时加载多个文件?

那么,我该如何处理??

  1. 也许可以将 Load(File2) 放入我在对话框关闭后处理的队列中?

如果您不想在对话框运行时加载新文件,那么是的,这就是您必须做的。特别是因为用户可能会在对话框运行时尝试加载多个文件(甚至多次加载同一个文件)。

否则,只需在对话框运行时完全忽略 WM_COPYDATA 消息。也许将另一条消息发送回第二个实例,告诉它 WM_COPYDATA 消息已被忽略,因此它可以通知用户稍后再试。在第二个实例发送 WM_COPYDATA 之后,让它在退出前等待几秒钟,以防这样的回复进来。也许总是发送回复,相应的 ACK 或 NACK,并使第二个实例等待任一回复.

  1. 或者,也许我应该在模式对话框打开时从消息队列中过滤 WMCopyData?

不,尤其是因为无论如何您都无权进行这种过滤。 WM_COPYDATA 是一个 sent message,而不是一个 posted message,所以消息队列永远不会看到它,但是在消息队列上执行消息检索会自动调度它。

  1. 使用某种标志:如果 WMCopyDataReceived_Flag 则 Abort_current_code_after_the_dlgbox

我什至不明白你想用它做什么。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。