我有一個使用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