首页
社区
课程
招聘
[原创]WinMain支持命令行参数的代码
发表于: 2012-2-9 14:05 9004

[原创]WinMain支持命令行参数的代码

2012-2-9 14:05
9004
文章作者:pt007@vip.sina.com
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

注:文章首发I.S.T.O信息安全团队,后由原创作者友情提交到邪恶八进制信息安全团队技术讨论组。I.S.T.O版权所有,转载需注明作者
#include <windows.h>
#include <stdio.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nShowCmd)
{
        //for the command line;
        
        int argc = 0;
        
        LPWSTR *lpszArgv = NULL;

        
        LPWSTR szCmdLine =(LPWSTR)::GetCommandLineW(); //获取命令行参数;
        
        lpszArgv = ::CommandLineToArgvW((const unsigned short *)szCmdLine, &argc); //拆分命令行参数字符串;
        

        
        if (lpszArgv == NULL)
        {
        
                MessageBox(NULL, "Unable to parse command line", "Error", MB_OK);
                return 10;
        }
        
        for(int i = 0; i < argc; i++)

        {
                char   str[MAX_PATH];
                memset(str,0,MAX_PATH);
        //将LPWSTR转换为char *:
        WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK,lpszArgv[i], -1,str,200,NULL,NULL);
        MessageBox(NULL,str, "Arglist contents", MB_OK);
            
        }
        
        LocalFree(lpszArgv);
        return 0;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 391
活跃值: (717)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
你是pt007?
2012-2-9 15:00
0
雪    币: 149
活跃值: (191)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
常用代码。。。收藏备份。
2012-2-9 15:02
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
汗一个,有必要这么麻烦吗?
#include <stdlib.h>

然后
__argc, __argv 直接用就行啊。
2012-2-10 15:48
0
雪    币: 224
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
谢谢兄弟的指点:)
#include <windows.h>
#include <stdlib.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	//for the command line;
	for(int i = 0; i <__argc; i++)

	{
		char   str[MAX_PATH];
		char * str1;
		memset(str,0,MAX_PATH);
		//下面是获取命令行参数值的典型用法:
	    lstrcpy(str,__argv[i]);
		str1=strdup(__argv[i]);
	    //MessageBox(NULL,str, "Arglist contents", MB_OK);
		MessageBox(NULL,str1, "Arglist contents", MB_OK);
	    
	}
	return 0;
}
2012-2-11 18:45
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
pt…彭涛。仿佛是一个人…
2012-2-12 15:49
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
汗,你们都是牛人,WinMain的参数lpCmdLine不就是命令行参数吗?
2012-8-26 12:25
0
雪    币: 26
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
代码收藏了,谢谢分享!
2012-12-6 14:46
0
雪    币: 239
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
严重的没事找事多此一举啊。。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nShowCmd)
{
  MessageBox(NULL, lpCmdLine, "", MB_OK);

  if (strstr(lpCmdLine, "-a"))
  {
    MessageBox(NULL, "-a", "", MB_OK);
    //......
  }

  if (strstr(lpCmdLine, "-s"))
  {
    MessageBox(NULL, "-s", "", MB_OK);
    //......
  }

  //....
  return 0;
}
多参数的话自己用判断就可以了。
2013-2-23 20:16
0
雪    币: 239
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
原来有人回复过了。没看到。
2013-2-23 20:16
0
游客
登录 | 注册 方可回帖
返回
//