如何调用其他应用程序传递两个参数过去?

mmfeng 2011-01-28 09:29:27
我看到公司的ERP程序,登录后它有一个主程序,主程序中可调用相应的其他程序,如:主界面中有“跟单系统”、“物料系统”等图标,当点击“跟单系统”图标后,就会调用跟单系统的可执行程序,它能检测出用户名和密码,并根据用户所在的组给予相应的权限。如果没有登录直接双击硬盘的跟单系统可执行程序,则会提示“没有登录。。。。,请登录后操作”的提示。
我想做出这个效果,请问如何调用并传递参数过去,被调用的程序如何能接收到这些参数?
...全文
116 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmfeng 2011-01-29
  • 打赏
  • 举报
回复
谢谢RedProgramer,按你的方法做出来了,结贴。
RedProgramer 2011-01-29
  • 打赏
  • 举报
回复
我上面说的是VC的,下面是C++Builder的
技巧1:首先,也许是最简单的方法是调用VCL ParaStr()函数。你可使用ParamCount()函数来确定到底有多少个命令行参数传递给了应用程序。


ParamStr需要一个整数参数并且返回一个AnsiString对象。若参数为0, ParamStr 将返回可执行文件的全称路径。若参数为1,将返回程序名及第一个命令行参数。若参数为2,将返回第二个参数,等等。作为一个实践,开启一个新的项目,在主窗口上放置5个Label,将下面的代码添加到窗口的构造函数中:


Label1-> Caption = ParamStr(0);
Label2-> Caption = ParamStr(1);
Label3-> Caption = ParamStr(2);
Label4-> Caption = ParamStr(3);
Label5-> Caption = ParamStr(4);


再运行程序。一般应能看到类似字符串: E:\CBUILDER\PROJECTS\PROJECT1.EXE如果没传递参数到程序,那么Label2到Label5是空字符串。关闭程序,从C++Builder菜单中选择 Run | Parameters。输入几个参数(-debug -testing -param)再次运行程序。你将看到: E:\CBUILDER\PROJECTS\PROJECT1.EXE
-debug
-testing
-param


提示: ParamStr 对目录中的空格能智能判断。为证实这点,把生成的EXE文件拷贝到Program Files目录下再运行它,你将会看到ParamStr(0)返回全路径,并包含空格。


技巧2:第二个方法就是调用GetCommandLine API函数。GetCommandLine不需要参数,并且返回一个C风格的char *,包含全部的命令行参数。你将不得不分解字符串以取得相关参数。

Label5-> Caption = AnsiString(GetCommandLine());运行后,Label5将为: "E:\CBuilder\Projects\Project1.exe " -debug -testing -param
RedProgramer 2011-01-29
  • 打赏
  • 举报
回复
Argv[1] 是第一个参数,Argv[0]为程序名自身
RedProgramer 2011-01-29
  • 打赏
  • 举报
回复
DWORD Argc;
LPTSTR * Argv;
#ifdef UNICODE
Argv = CommandLineToArgvW(GetCommandLineW(), &Argc );
#else
Argc = (DWORD) __argc;
Argv = __argv;
#endif
if(Argc<2)
{
AfxMessageBox("ûÓÐÃüÁîÐвÎÊý");
return FALSE;
}

Argv 中就是命令行参数
mmfeng 2011-01-29
  • 打赏
  • 举报
回复
例如我有一个主程序的窗口 fmMain,另有一个要调用的可执行程序:test.exe,用这个能调用到它
String str;
str= "username/pw ";
::ShellExecute(0, 0, "test.exe", str.t_str(), "E:\\c_program\\TimeClock\\Debug",SW_SHOW);
但是怎么在 test.ext 中能收到它的参数呢?要怎么写法?

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧