我现在要用::WinExec()执行一个CommandLine,该函数在windows98下面执行没有问题,能够调用别一个程序,并执行。可是在windows2000下面用时就不行,得到一个值是33,请问这是为什么?
解决方案 »
- 不知道发在这里合适不,百度地图类似功能的实现方法求教。
- 自定义消息路由到哪里了?
- 【婉如】闭关一个月,大家一个月后见!吼吼~~~
- keybd_event 中的 VK_LBUTTON ,急 !!!
- ODBC+ACCESS,在表中添加一个字段后,怎样在相应绑定的C*Set类中手动添加成员变量?
- 谁给我讲讲cstring的用法?跟LPSTR怎么转换?
- 如何用对话框选择目录?急!!
- 我的承启815EP(6OJA3)为什么不支持赛扬1G?(版主手下留情)
- 有没有将图片设为桌面的api函数,若有怎样用?若没有,怎样实现该功能?
- 哪位大侠救命啊 !程序到了关键时刻,我只需要拿到CPoint 数组就可以交作业了
- 老问题:怎样捕捉控件的消息?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 );