php register_argc_argv,命令行参数wmain (int argc,wchar_t *argv[])

命令参数,总是把我搞得头晕,这回决定把它一次弄清

启动程序时,系统会在传入命令行参数给程序

比如下面,

ipconfig /all

显示完整网络配置信息。

%windir%\system32\rundll32.exe powrprof.dll,SetSuspendState

这个在启用休眠的电脑上运行,立即进入休眠

同样

shutdown /h

也能休眠

....

如下图所示

ttt是程序名,它和它后面的东西一起在启动程序时就传给了程序

一般的命令行程序就可以从argc,argv中取得所有的参数

但是如果是windows程序呢,下面就来讲

07dd5c8ec39bf61aff0fe99409740bb7.png

这是测试代码

//cl ttt.cpp

//ttt  The last  straw that breaks the camel's back

#include

#include

#include

#include //让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

{

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

{

wprintf(L"%d,%s\n",i,pszcmdlist[i]);

}

LocalFree(pszcmdlist);//记得释放

pszcmdlist=NULL;

}

}如何取得完整路径的程序名呢?

如何取得程序路径?

还有程序的执行映像名呢?

找到了这几个API:GetModuleFileNameW()  GetCurrentDirectoryW() GetFileTitleW()

bd8ce86bf16093734cbdd16d1943e1a6.png

完整的源代码

#include

#include

#include

#include //让wprintf()支持中文

#include

#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

{

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

{

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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值