顶级小白 发表于 2026-4-9 04:47:04

AI一键封装的进程名取ID.一次成功无错

<火山程序 类型 = "通常" 版本 = 1 />

包 火山.程序

类 启动类 <公开 基础类 = 窗口程序类>
{
    变量 主窗口对象 <类型 = 我的主窗口>

    方法 启动方法 <公开 类型 = 整数>
    {
      主窗口对象.创建主窗口 ()

      调试输出 (进程工具类.取进程PID ("Weixin.exe"))

      返回 (1)
    }
}

# ===

类 我的主窗口 <基础类 = 窗口 注释 = "样例主窗口" @视窗.布局 = "client_size = \"500, 300\"" 标题 = "我的主窗口">

# ===

类 进程工具类 <公开 @视窗.外部头文件 = "<TlHelp32.h>">
{
    方法 取进程PID <公开 静态 类型 = 整数 注释 = "通过进程名获取对应的进程ID,未找到返回0" @禁止流程检查 = 真>
    参数 进程名 <类型 = 文本型 注释 = "提供所要查找的进程名称,如:notepad.exe">
    {
      @   DWORD dwPID = 0;
      @   HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      @   if (hSnapshot != INVALID_HANDLE_VALUE)
      @   {
      @         PROCESSENTRY32W pe32 = {0};
      @         pe32.dwSize = sizeof(PROCESSENTRY32W);
      @         if (Process32FirstW(hSnapshot, &pe32))
      @         {
      @             do
      @             {
      @               if (_wcsicmp(pe32.szExeFile, @<进程名>.GetText()) == 0)
      @               {
      @                     dwPID = pe32.th32ProcessID;
      @                     break;
      @               }
      @             } while (Process32NextW(hSnapshot, &pe32));
      @         }
      @         CloseHandle(hSnapshot);
      @   }
      @   return dwPID;
    }
}

Xelloss0618 发表于 2026-4-9 08:40:55

这么简单的命令咋会错呢,不过也有考虑不周的地方,因为同进程名会有多个进程ID,你这个只返回第一个。

793359277 发表于 2026-4-9 12:08:25

Xelloss0618 发表于 2026-4-9 08:40
这么简单的命令咋会错呢,不过也有考虑不周的地方,因为同进程名会有多个进程ID,你这个只返回第一个。 ...

其实大部分情况下, 都是取的没有同名的进程, 建议piv也加一个. 每次用piv取进程ID, 还有加一个数组变量很麻烦
页: [1]
查看完整版本: AI一键封装的进程名取ID.一次成功无错