VFP CreateProcess !
启动程序一直用 ShellExecute, WinExec 这两个,原来 CreateProcess 也可以的,不过网上查了一下,看上去很复杂,估计也用不着,不过很想了解一下这个怎样用,网上资料:
DECLARE INTEGER CreateProcess IN kernel32;
STRING lpApplicationName,;
STRING lpCommandLine,;
INTEGER lpProcessAttributes,;
INTEGER lpThreadAttributes,;
INTEGER bInheritHandles,;
INTEGER dwCreationFlags,;
INTEGER lpEnvironment,;
STRING lpCurrentDirectory,;
STRING lpStartupInfo,;
STRING @ lpProcessInformation
看上去很复杂!
给了个示例:
cProcInfo = Repli(Chr(0), 16)
cStartInfo = PADR(Chr(START_INFO_SIZE),;
START_INFO_SIZE, Chr(0))
= CreateProcess(cApp, NULL, 0,0,0,;
0, 0, SYS(5)+SYS(2003),;
@cStartInfo, @cProcInfo)
估计 cApp='C:\A.EXE' 吧!
关键是这个:cStartInfo = PADR(Chr(START_INFO_SIZE),;
START_INFO_SIZE, Chr(0))
搞不懂,看那位老师说说 CreateProcess 怎样用,谢谢!
[解决办法]
倒数第二个参数是一个结构体指针
用于决定新进程的主窗体如何显示
该结构体的第3项,用于标识启动应用程序所在的桌面的名字
[解决办法]
还可以用
ox=CreateObject("WScript.Shell")
ox.Run("notepad.exe",1,0)
Release ox
* 第3个参数0表示调用后马上将控件权返回原调用程序,1表示直到被调用程序结束后才将控件权返回原调用程序(调用外部文件时让系统一直等待,直到运行结束才返回控制权就可以了)
* 第2个参数
0SW_HIDE 隐藏窗口,活动状态为原调用窗口
6SW_MINIMIZE 最小化窗口,活动状态为原调用窗口
9SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
5SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
3SW_SHOWMAXIMIZED 最大化窗口,并将其激活
2SW_SHOWMINIMIZED 最小化窗口,并将其激活
7SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
8SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
4SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
1SW_SHOWNORMAL 与SW_RESTORE相同
[解决办法]
本帖最后由 dkfdtf 于 2012-07-31 22:01:38 编辑 最后两个结构参数的描述如下:
typedef struct _STARTUPINFO {
DWORD cb;// 结构体尺寸,包括 cb 自己
LPTSTR lpReserved;// 保留,必须初始化为 NULL
LPTSTR lpDesktop;// 启动应用程序所在的桌面的名字
// 如果桌面不存在,便创建一个带有默认属性的桌面
// 如果是NULL(最常见的情况),那么该进程将与当前桌面相关联
LPTSTR lpTitle;// 控制台窗口的名称。如果是NULL,则可执行文件的名字将用作窗口名
DWORD dwX;// 窗口在屏幕上应该放置的位置的x和y坐标(以像素为单位)
DWORD dwY;
DWORD dwWidth;// 窗口的宽度和长度(以像素为单位)
DWORD dwHegiht;
DWORD dwXCountChars;// 窗口的宽度和高度(以字符为单位)
DWORD dwYCountChars;
DWORD dwFillAttribute;// 控制台窗口使用的文本和背景颜色
DWORD dwFlags;// 这个决定是否使用上面的 dwX, dw....,
// 以及下面的 wShowWindow 几个成员的预设值
WORD wShowWindow;// 窗口显示方式
WORD cbReserved2;// 保留
LPBYTE lpReserved2;
HANDLE hStdInput;// 标准输入/输出/错误设备句柄
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;
typedef struct_PROCESS_INFORMATION{
HANDLE hProcess;// 进程句柄
HANDLE hThread;// 主线程句柄
DWORD dwProcessId;// 进程标识符,在任务管理器中看到的 PID 就是它
DWORD dwThreadId;// 主线程标识符
}PROCESS_INFORMATION;