【发布时间】:2011-09-08 08:05:30
【问题描述】:
我有一个用 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 上。
【问题讨论】:
标签: c windows visual-studio visual-studio-2008 mingw