我有一个使用C(MinGW)编写的Windows GUI应用程序,并希望应用程序执行不同的任务,具体取决于它是通过命令行使用文件名参数启动还是通过将文件拖动到应用程序图标上来执行。现在是这样的,下面的函数不区分这两种:在Windows中区分cmd行参数和拖动图标参数的方法?
int argc;
LPWSTR *argv = CommandLineToArgvW(GetCommandLineW(),&argc);
当一个文件拖动到应用程序的图标,它假定它是通过命令行启动。这个问题是我需要额外的参数,必须通过命令行来传递,以做有用的事情。文件名本身是不够的,所以应用程序退出,因为它没有足够的信息进行。
我想让用户能够将文件拖动到应用程序图标上,然后出现一个窗口,询问所需的选项。如果用户使用已提供的必需选项通过命令行启动应用程序,则应用程序将立即开始处理而不要求额外输入。这可能吗?
我遇到的另一个问题是,有时当文件被拖到应用程序的图标上时,它会崩溃。我将其缩小到任何使用argv []值的操作。如果通过具有相同参数的命令行启动,则不这样做。例如,这会崩溃的应用程序大约20%的时间:
fprintf(stderr,"argv[3] was %ls\n",(LPWSTR)argv[3]);
为什么要通过拖放正下降时,启动这只是发生的呢?我在Windows 7 x64上。
谢谢。如果只检测到一个参数(文件名为arg),我将代码更改为要求其他选项。所以,如果您只在命令行上传递文件名,那么如果您将文件拖放到应用程序图标上,则会出现相同的框。似乎现在工作正常,没有崩溃。 – Synthetix 2011-06-04 11:02:55