Win32程序支持命令行参数的做法
转载自:http://blog.csdn.net/clever101/article/details/16808705
首先说说Win 32 API程序如何支持命令行参数。Win 32程序的入口函数为:
1 2 3 4 | int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) |
其中lpCmdLine为命令行参数,所以只需把它解析出来即可。
比如一个win32程序为a.exe,它的命令行用法如下:
a.exe 文件1 文件2
那么可以这样解析:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { int argc = 0; LPWSTR *lpszArgv = NULL; //分割命令行参数 lpszArgv = CommandLineToArgvW(lpCmdLine, &argc); if (argc >= 2) { if (::GetFileAttributes(lpszArgv[0])==-1) { //文件1不存在 ::MessageBox(GetDesktopWindow(),lpszArgv[1],_T( "提示" ), MB_OK|MB_ICONINFORMATION); return 1; } if (::GetFileAttributes(lpszArgv[1])==-1) { //文件2不存在 ::MessageBox(GetDesktopWindow(),lpszArgv[2],_T( "提示" ), MB_OK|MB_ICONINFORMATION); return 1; } } |
如果是一个MFC程序,做法比Win 32 API程序多一步,就是获取命令行字符串。具体如下:
1 2 3 4 5 6 7 8 | BOOL CXxxAppApp::InitInstance() { LPTSTR pszCmdLine = GetCommandLine(); //获取命令行参数; LPWSTR *lpszArgv = NULL; int argc = 0; lpszArgv = CommandLineToArgvW(pszCmdLine,&argc); //拆分命令行参数字符串 // 下面的处理和win32 api程序一样, } |
有四点需要注意:
1. Win 32 API程序的命令行lpCmdLine是只包含参数,而MFC程序的命令行第一个参数是exe本身。
2. GetCommandLine获取的是一个unicode字符串,CommandLineToArgvW也只能处理unicode字符串,如果你的程序选择的是多字节字符集,需要进行处理。
3. CommandLineToArgvW是按空格来拆分参数的,如果从参数是文件路径,就不要用CommandLineToArgvW了,因为文件路径本身可能带有空格,可以用正则表达式来解析。
4. 命令行的调试可以这样设置:
作者:郭小雷
出处:http://www.cnblogs.com/Ray1024/
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的作者及详细链接,否则作者将保留追究其法律责任。
欢迎大家学习、共享,如果文章中有错误或漏洞,请大家在评论区留言!!
出处:http://www.cnblogs.com/Ray1024/
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的作者及详细链接,否则作者将保留追究其法律责任。
欢迎大家学习、共享,如果文章中有错误或漏洞,请大家在评论区留言!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?