我现在要用::WinExec()执行一个CommandLine,该函数在windows98下面执行没有问题,能够调用别一个程序,并执行。可是在windows2000下面用时就不行,得到一个值是33,请问这是为什么?
解决方案 »
- 【求解】msxml支持div吗
- 对话框拖动 控件为什么消失了?如何解决
- 200分成33个奇数,也就是33个奇数想加等于200
- 用VC结合Excel实现复杂报表的制作???
- Windows控件消息和控件通知消息大全!
- 挑战技术极限:关于RichEditCtrl的问题,累计分数已经达到300分
- 菜鸟求助:请教1、如何使VC++对话框中的控件自由拉伸?2、如何在VC++中加载OCX第三方控件?
- 请问如何取得ATL-Lite Composite Control控件自身的窗口句柄?
- win serve2000 中发布网页,遇到的密码问题?
- 无记录的数据库添加第一条记录为何出错?
- 老问题:怎样捕捉控件的消息?up者有分
- 改变对话框的大小,但不改变位置,怎么实现?
⑴ 函数原型:
UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);
⑵ 参数:
lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。
uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。
⑶ 返回值:
若函数调用成功,则返回值大于31。若函数调用失败,则返回值为下列之一:
① 0:系统内存或资源已耗尽。
② ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE影像错误)。
③ ERROR_FILE_NOT_FOUND:指定的文件未找到。
④ ERROR_PATH_NOT_FOUND:指定的路径未找到。
虽然Microsoft认为WinExec已过时,但是在许多时候,简单的WinExec函数仍是运行新程序的最好方式。简单地传送作为第一个参数的命令行,还需要决定如何显示程序(该程序也许会忽视它)的第二个参数。通常,将其设置为SW_SHOW,也可尝试SW_MINIMIZED或SW_MAXIMIZED。WinExec不允许用CreateProcess获得的所有选项,而它的确简单。
#include <iostream.h>
void main(int argc,char *argv[])
{
cout<<”Opening with WinExec\n”;
if (WinExec(“notepad readme.txt”,SH_SHOW)<32)
MessagBox(NULL,”Can’t WinExec”,NULL,MB_OK);
cout<<”Press Enter\n”;
MessagBox(NULL,”Press OK to continue”,”Progrm Launched”,MB_OK);
cout<<”Opening with ShellExecute\n”;
if (ShellExecute (NULL,”open”,
”readme.txt”,NULL,NULL,SW_SHOW)<(HANDLE) 32)
MessagBox(NULL,”Can’t ShellExecute\n”,NULL,MB_OK);
}
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// Create process
if( !CreateProcess(
NULL, // No module name (use command line).
(LPTSTR)lpszCmd, // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
dwCreationFlags, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
return 0;
}
// Wait for end of process
WaitForSingleObject( pi.hProcess, INFINITE );
// Close handle
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );