使用 AssocQueryString 从 32 位应用程序获取 64 位应用程序命令,但不起作用
Using AssocQueryString to get 64-bit application command from 32-bit application, but not working
我尝试使用AssocQueryString来获取关联信息,myapp.exe是32位可执行文件。这是我的代码。
WCHAR commandline[_MAX_PATH];
DWORD size = _MAX_PATH;
HRESULT h = AssocQueryStringW(ASSOCF_OPEN_BYEXENAME, ASSOCSTR_COMMAND, execName, 0, commandline, &size);
if (SUCCEEDED(h))
{
...
}
我发现如果"execName"是一个 32 位应用程序,这个 api 工作得很好。例如
WCHAR *execName = L"mspaint.exe";
我们可以得到命令 = "C:\Windows\system32\mspaint.exe" "%1"
但是如果给出一个64位的应用程序(例如:PaintDotNet.exe),SUCCESSED(h)将返回FALSE。变量 h = 0x80070483,表示"没有应用程序与文件扩展名相关联"。
由于上述观察,我想此 api 在尝试获取 64 位应用程序信息时可能会失败。
所以我的问题是:
我忽略了什么或错误地使用了AssocQueryString吗?
是否有其他方法可以从 32 位应用获取 64 位应用信息?
顺便说一下,我不想只是将我的应用程序编译为 64 位应用程序。
谢谢你的帮助。
1. 我忽略了什么或错误地使用了 AssocQueryString 吗?
1) ASSOCSTR_COMMAND更换为ASSOCSTR_EXECUTABLE
你可以得到"C:\Windows\system32\mspaint.exe"
2) 成功是非负数表示真
(((HRESULT)(小时))>= 0)
因此,如果您检查成功,请检查结果等于零
2. 是否有其他方法可以从 32 位应用程序获取 64 位应用程序信息?
1) 如果您的 Windows x64,文件夹 C:\Windows\system32\ 用于 64 位文件。
参看>http://www.samlogic.net/articles/32-64-bit-windows-folder-x86-syswow64.htmC:\Windows\System32 64 位文件的 Windows 系统文件夹(系统目录)C:\Windows\SysWOW64 32 位文件的 Windows 系统文件夹(系统目录)
2)只需检查结果等于零,然后打印出来。在这种情况下,不要使用 SUCCESSED(h)。
AssocQueryString 的返回值 S_OK(0), E_POINTER, S_FALSE(1)
- make 命令创建 .file,但不创建应用程序文件
- 使用参数 + stdout + stderr 从命令行调用 MFC 应用程序
- 如何在构建Qt应用程序时运行git命令
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- C++客户端/服务器聊天应用程序 - 从 Ubuntu 命令窗口扫描输入
- 来自另一个 IOS 应用程序的 IOS 应用程序命令
- 应用程序无法获取命令参数
- 在控制台窗口关闭(在Windows上)上优雅地关闭命令行应用程序
- 节点 js 我可以从用 C++ 编写的 windows 命令行应用程序中获取退出代码
- 如何在IDE中而不是在命令提示符中显示Visual Studio控制台应用程序输出
- qt 命令行应用程序编译
- 为在应用程序中作为函数参数传递的文件运行'iconv'命令C++
- 通过命令行编译和链接 Swift/Objective-C++ 应用程序
- 使用AWS-SDK-C 构建MacOS C 命令行应用程序
- MVC:命令行应用程序的实现问题
- 在应用程序内部调用linux命令行工具
- 如何将命令从c++应用程序返回到父终端
- Android本机应用程序命令行参数
- 使用 AssocQueryString 从 32 位应用程序获取 64 位应用程序命令,但不起作用
- 分布式应用程序命令/控制和监控