gpt4 book ai didi

windows - DDE:实现通过 Shell 和 ddeexec 正确启动的应用程序

转载 作者:可可西里 更新时间:2023-11-01 10:01:04 28 4
gpt4 key购买 nike

我正在尝试实现一个将自身注册为 DDE 服务器的应用程序,以便它正确响应我们自定义的“.qsx”文件类型,就像 WinWord 响应“.docx”文件类型一样。

  1. 如果应用程序已经在运行并且有人双击“.qsx”文件,那么我们希望已经打开的应用程序接收 DDE 打开命令并打开相关文件。
  2. 但是,如果应用程序尚未运行,那么 shell 应该启动我们的应用程序,然后与应用程序建立 DDE 连接并告诉它像以前一样打开文件。

我们的第 1 部分工作完美。

但是,对于第 2 部分,Shell 启动命令,但随后失败并显示“将命令发送到程序时出现问题”。这对应于从“ShellExecute”Windows API 函数返回的返回代码“SE_ERR_DDEFAIL”(29)。

事实上,我已经编写了一个名为“ShellExecute.exe”的自定义控制台应用程序,它可以完全独立于 explorer.exe 重现此问题。

如果我运行 ShellExecute.exe 并且我们的“DDE 服务器”应用程序已经启动,它可以正常工作。如果我为“.docx”文档运行 ShellExecute.exe 而 WinWord 没有运行,WinWord 会正确启动并加载文档如果我为我们的“.qsx”文档运行 ShellExecute.exe 而我们的应用程序没有运行,ShellExecuteEx 启动应用程序但立即在我们的服务器应用程序甚至有机会注册为 DDE 之前返回 SE_ERR_DDEFAIL服务器。

出于某种原因,对于 WinWord,ShellExecute 似乎等待它启动。

我已经尝试在运行 procmon.exe 的情况下运行这两种情况,以查看 ShellExecute 可能在注册表中寻找什么来区分我们的情况与 WinWord.exe,但我找不到任何东西。

我真正需要的是 ShellExecute 算法的源代码,这样我就可以找出为什么它适用于 WinWord 但不适用于我们的自定义扩展。

谁能准确详细地解释 ShellExecute 是如何启动应用程序的,特别是它如何知道“等待”应用程序注册为 DDE 服务器?

最佳答案

在 XP+ 上运行的应用程序应该 use IDropTarget 以避免出现挂起窗口时 DDE 的问题。

当使用 DDE 时,shell assumes 在您开始消息循环之前您的 DDE 服务器已启动并正在运行...

关于windows - DDE:实现通过 Shell 和 ddeexec 正确启动的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931173/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com