当前位置: 代码迷 >> VFP >> VFP CreateProcess !解决方案
  详细解决方案

VFP CreateProcess !解决方案

热度:6729   发布时间:2013-02-26 00:00:00.0
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个参数
0 SW_HIDE 隐藏窗口,活动状态为原调用窗口 
6 SW_MINIMIZE 最小化窗口,活动状态为原调用窗口 
9 SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态 
5 SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态 
3 SW_SHOWMAXIMIZED 最大化窗口,并将其激活 
2 SW_SHOWMINIMIZED 最小化窗口,并将其激活 
7 SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口 
8 SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口 
4 SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口 
1 SW_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; // 进程句柄
  相关解决方案