命令參數,老是把我搞得頭暈,這回決定把它一次弄清
啓動程序時,系統會在傳入命令行參數給程序
好比下面,
ipconfig /all
顯示完整網絡配置信息。
%windir%\system32\rundll32.exe powrprof.dll,SetSuspendState
這個在啓用休眠的電腦上運行,當即進入休眠
一樣
shutdown /h
也能休眠
....
以下圖所示
ttt是程序名,它和它後面的東西一塊兒在啓動程序時就傳給了程序
通常的命令行程序就能夠從argc,argv中取得全部的參數
可是若是是windows程序呢,下面就來說shell
這是測試代碼windows
//cl ttt.cpp //ttt The last straw that breaks the camel's back #include <windows.h> #include <tchar.h> #include <stdio.h> #include <locale.h>//讓wprintf()支持中文 #pragma comment(lib,"shell32.lib") int wmain (int argc,wchar_t *argv[]) { setlocale(LC_CTYPE,"CHS");//讓wprintf()支持中文 wprintf(L"main (int argc,char *argv[])\n"); wprintf(L"命令行中可執行文件名argv[0]爲:%s",argv[0]); wprintf(L"總共有argc:%d個參數:\n",argc); for(int i=0;i<argc;i++) { wprintf(L"[%d]:%s\n",i,argv[i]); } int nargs; WCHAR *psz=GetCommandLineW(); wprintf(L"GetCommandLineW()返回:%s\n\n",psz); wprintf(L"CommandLineToArgvW(GetCommandLineW(),&nargs):\n"); WCHAR **pszcmdlist=CommandLineToArgvW(psz,&nargs); if(pszcmdlist!=NULL) { for(int i=0;i<nargs;i++) { wprintf(L"%d,%s\n",i,pszcmdlist[i]); } LocalFree(pszcmdlist);//記得釋放 pszcmdlist=NULL; } }如何取得完整路徑的程序名呢?
#include <windows.h> #include <tchar.h> #include <stdio.h> #include <locale.h>//讓wprintf()支持中文 #include <atlstr.h> #pragma comment(lib,"shell32.lib") #pragma comment(lib,"comdlg32.lib") int wmain (int argc,wchar_t *argv[]) { setlocale(LC_CTYPE,"CHS");//讓wprintf()支持中文 wprintf(L"main (int argc,char *argv[])\n"); wprintf(L"命令行中可執行文件名argv[0]爲:%s",argv[0]); wprintf(L"總共有argc:%d個參數:\n",argc); for(int i=0;i<argc;i++) { wprintf(L"[%d]:%s\n",i,argv[i]); } int nargs; WCHAR *psz=GetCommandLineW(); wprintf(L"GetCommandLineW()返回:%s\n\n",psz); wprintf(L"CommandLineToArgvW(GetCommandLineW(),&nargs):\n"); WCHAR **pszcmdlist=CommandLineToArgvW(psz,&nargs); if(pszcmdlist!=NULL) { for(int i=0;i<nargs;i++) { wprintf(L"%d,%s\n",i,pszcmdlist[i]); } LocalFree(pszcmdlist);//記得釋放 pszcmdlist=NULL; } WCHAR AppFileFullName[MAX_PATH]; GetModuleFileNameW(NULL,AppFileFullName,MAX_PATH); wprintf(L"完整路徑的程序名:%s\n",AppFileFullName); WCHAR AppFileTitleName[MAX_PATH]; GetFileTitleW(AppFileFullName,AppFileTitleName,sizeof(AppFileTitleName)); wprintf(L"程序標題名:%s\n",AppFileTitleName); WCHAR AppDirectory[MAX_PATH]; GetCurrentDirectoryW(sizeof(AppDirectory),AppDirectory); wprintf(L"程序路徑:%s\n",AppDirectory); }