gpt4 book ai didi

c - 在 Windows 中区分 cmd line args 和 drag-onto-icon args 的方法?

转载 作者:可可西里 更新时间:2023-11-01 09:56:33 26 4
gpt4 key购买 nike

我有一个用 C (MinGW) 编写的 Windows GUI 应用程序,我想让该应用程序执行不同的任务,具体取决于它是通过带有文件名参数的命令行启动的,还是通过将文件拖到应用程序图标上启动的。现在的样子,下面的函数不区分两者:

int argc;
LPWSTR *argv = CommandLineToArgvW(GetCommandLineW(),&argc);

当一个文件被拖到应用程序的图标上时,它假定它是通过命令行启动的。这个问题是我需要额外的参数,这些参数必须通过命令行传递才能做任何有用的事情。文件名本身不够,所以应用程序只是退出,因为它没有足够的信息来继续。

我希望用户能够将文件拖到应用程序图标上,然后出现一个窗口询问所需的选项。如果用户通过已提供所需选项的命令行启动应用程序,应用程序将立即开始处理而无需额外输入。这可能吗?

我遇到的另一个问题是,有时当将文件拖到应用程序的图标上时,它会崩溃。我将其缩小到对 argv[] 值进行操作的任何操作。如果通过具有相同参数的命令行启动,它不会执行此操作。例如,这会使应用程序在大约 20% 的时间内崩溃:

fprintf(stderr,"argv[3] was %ls\n",(LPWSTR)argv[3]);

为什么只有在通过拖放启动时才会发生这种情况?我在 Windows 7 x64 上。

最佳答案

默认情况下,Windows 将使用您放在其图标上的文件的文件名作为第一个也是唯一的参数来调用您的程序。因此,在这种情况下,您将获得与当有人使用同一文件的完整限定名作为唯一参数从命令行启动您的程序时获得的调用参数完全相同的调用参数。

但是,您可以在安装应用程序时向快捷方式图标添加其他参数,即 "path\myapp.exe -gui"。这使您可以区分通常通过图标调用(也适用于不带任何参数的双击)和通常不指定 -gui 参数的命令行调用。

关于c - 在 Windows 中区分 cmd line args 和 drag-onto-icon args 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6236220/

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