欢迎访问宙启技术站
智能推送

win32process中STARTUPINFO的参数解析和示例

发布时间:2023-12-18 13:59:40

在Win32进程编程中,STARTUPINFO结构体是用来指定新创建进程的属性的。它包含了一系列成员变量,可以用来控制新进程的外观、输入输出等属性。下面是对STARTUPINFO结构体的主要成员的详细解析,并附带相应的使用示例。

1. cb:指定结构体的字节数。通常设置为结构体的大小,使用sizeof(STARTUPINFO)可以获取。

2. lpReserved:这是一个指向一个字符串的指针,该字符串不会被使用。

3. lpDesktop:指定新进程的桌面名称。可以使用NULL来使用默认的桌面。

4. lpTitle:指定新进程的标题栏文本。

5. dwX:指定新进程窗口的左上角的x坐标。

6. dwY:指定新进程窗口的左上角的y坐标。

7. dwXSize:指定新进程窗口的宽度。

8. dwYSize:指定新进程窗口的高度。

9. dwXCountChars:指定新进程控制台窗口的字符宽度。

10. dwYCountChars:指定新进程控制台窗口的字符高度。

11. dwFillAttribute:指定新进程控制台窗口字符和背景颜色的初始值。

12. dwFlags:指定如何显示新进程的窗口。可以用以下常量进行组合:

- STARTF_USESHOWWINDOW:使用wShowWindow成员指定的窗口显示方式。

- STARTF_USEPOSITION:使用dwX和dwY成员指定的坐标值。

- STARTF_USESIZE:使用dwXSize和dwYSize成员指定的窗口尺寸值。

- STARTF_USECOUNTCHARS:使用dwXCountChars和dwYCountChars成员指定的字符宽度和高度值。

- STARTF_USEFILLATTRIBUTE:使用dwFillAttribute成员指定的初始字符和背景颜色值。

- STARTF_RUNFULLSCREEN:使用全屏模式启动新进程。

- STARTF_FORCEONFEEDBACK:新进程在创建窗口之前会显示接收到的所有的默认按钮点击效果。

- STARTF_FORCEOFFFEEDBACK:新进程在创建窗口之前不会显示接收到的所有的默认按钮点击效果。

13. wShowWindow:指定新进程窗口的初始状态。可以使用以下常量:

- SW_HIDE:隐藏窗口。

- SW_MAXIMIZE:最大化窗口。

- SW_MINIMIZE:最小化窗口。

- SW_RESTORE:还原窗口。

- SW_SHOW:显示窗口。

- SW_SHOWDEFAULT:根据之前的显示状态设置窗口。

- SW_SHOWMAXIMIZED:最大化窗口。

- SW_SHOWMINIMIZED:最小化窗口。

- SW_SHOWMINNOACTIVE:以最小化方式显示窗口,但不激活窗口。

- SW_SHOWNA:以当前状态显示窗口,但不激活窗口。

- SW_SHOWNOACTIVATE:以当前状态显示窗口,但不激活窗口。

- SW_SHOWNORMAL:以原始大小和位置显示窗口。

下面是一个使用STARTUPINFO结构体的示例:

#include <Windows.h>
#include <iostream>

int main()
{
    STARTUPINFO si = { sizeof(si) };
    PROCESS_INFORMATION pi;
    TCHAR commandLine[] = L"notepad.exe";

    // 创建进程
    if (CreateProcess(NULL, commandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
        std::cout << "进程创建成功!进程ID:" << pi.dwProcessId << std::endl;

        // 等待进程结束
        WaitForSingleObject(pi.hProcess, INFINITE);

        // 关闭句柄
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
    }
    else
    {
        std::cout << "进程创建失败!错误代码:" << GetLastError() << std::endl;
    }

    return 0;
}

在这个示例中,我们创建了一个新的notepad.exe进程。我们通过设置STARTUPINFO结构体的成员来控制新进程的一些属性,如窗口位置、大小等。然后使用CreateProcess函数创建新进程,并通过PROCESS_INFORMATION结构体获取进程和线程信息。接着使用WaitForSingleObject函数等待新进程结束,最后通过CloseHandle函数关闭句柄。

通过这个示例,我们可以看到STARTUPINFO结构体是如何被用来指定新进程的属性,以及如何通过相关函数来创建和管理新进程。