网站开发二维码生成,优化网站服务,中建卓越建设有限公司网站首页,网站导航网站怎么做大家都知道#xff0c;我们可以通过shellexecute函数来执行别人的程序#xff0c;但如果别人的程序通过shellexecute来执行我们自己的程序#xff0c;而且通过传递过来的参数来执行不现效果呢#xff1f;
首先#xff0c;来看看ShellExecute函数 使用该函数时#xff0c…大家都知道我们可以通过shellexecute函数来执行别人的程序但如果别人的程序通过shellexecute来执行我们自己的程序而且通过传递过来的参数来执行不现效果呢
首先来看看ShellExecute函数 使用该函数时需添加该头文件 #include shellapi.h ShellExecute函数原型及参数含义如下 ShellExecute( hWnd: HWND; {指定父窗口句柄} Operation: PChar; {指定动作, 譬如: open、print、edit、explore、find} FileName: PChar; {指定要打开的文件或程序} Parameters: PChar; {给要打开的程序指定参数; 如果打开的是文件这里应该是 nil} Directory: PChar; {缺省目录} ShowCmd: Integer {打开选项} ): HINST; ShowCmd 参数可选值:SW_HIDE 0; {隐藏} SW_SHOWNORMAL 1; {用最近的大小和位置显示, 激活} SW_NORMAL 1; {同 SW_SHOWNORMAL} SW_SHOWMINIMIZED 2; {最小化, 激活} SW_SHOWMAXIMIZED 3; {最大化, 激活} SW_MAXIMIZE 3; {同 SW_SHOWMAXIMIZED} SW_SHOWNOACTIVATE 4; {用最近的大小和位置显示, 不激活} SW_SHOW 5; {同 SW_SHOWNORMAL} SW_MINIMIZE 6; {最小化, 不激活} SW_SHOWMINNOACTIVE 7; {同 SW_MINIMIZE} SW_SHOWNA 8; {同 SW_SHOWNOACTIVATE} SW_RESTORE 9; {同 SW_SHOWNORMAL} SW_SHOWDEFAULT 10; {同 SW_SHOWNORMAL} SW_MAX 10; {同 SW_SHOWNORMAL} 别人通过
ShellExecute执行我们的程序时
我们可以根据第四个参数
Parameters根据需求来执行不同效果。
MFC中InitInstance函数是整个程序的入口所以我们可以在这里捕获Parameters函数实际相当于main中的第二个参数
在这里举例说明假如Parameters传递值程序执行的效果如下
“1” -- 启动程序
“2”-- 关闭程序
“3”-- 最小化窗口
“456” -- 保存接收到的数据
通过
BOOL CMytestApp::InitInstance()
{
CString sParameter
for (int i 1; i __argc; i) { sParameter __argv[i]; }
/*******************************/
下面这段可以根据要求来处理
/************************/
}
如果程序已经运行把这些参数传递给正在运行的参数。
注意第一次进行InitInstance进来启动程序时已经创建了一个实例当第二次进来时不是直接调用ShowWindow(SW_SHOW)因为这个ShowWindow对应的CWND是当前正在启动的实例的句柄我们可以通过
CWnd *pWnd CWnd::FindWindow( NULL, Myest ); if ( pWnd ! NULL )//找到句柄来发送消息 { pWnd-SendMessage( WM_SHOW, NULL, NULL ); }
也可以自定义消息来发送当前运行的程序来根据不同消息来响应操作
如果有自定义一个 WM_WRITE_DATA消息对应函数writedata()函数切不可直接
pWnd-writedata();调用你会发现根本就编译不过而是通过
pWnd-SendMessage(WM_WRITE_DATA, NULL, NULL );来调用函数 总结特别要注意的一点是第二次进入InitInstance时已经是第二个实例进程当定义了全局变量
不能通过变量直接赋值来认为改变了第一个实例的值或者直接通过调用函数来认为调用了第一个实例的进程
一定要FindWindow找到第一个实例的句柄再通过发送消息来处理。