易语言CreateProcessAsUser源码
.版本 2 .支持库 spec .程序集 程序入口 .子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行 调试输出 (RunProcess (“C:\Windows\system32\calc.exe”)) 返回 (0) ' 可以根据您的需要返回任意数值 .子程序 RunProcess, 逻辑型, , 运行进程 .参数 ProcessName, 文本型, , 欲运行进程路径 .局部变量 hToken, 整数型 .局部变量 si, STARTUPINFO .局部变量 pi, PROCESS_INFORMATION .局部变量 bResult, 逻辑型 .如果真 (ProcessName = “”) 返回 (#FALSE) .如果真结束 ' //获取进程Token .如果真 (取反 (GetTokenByName (“EXPLORER.EXE”, hToken))) 返回 (#FALSE) .如果真结束 ' //进程信息设置 si.cb = 68 si.lpDesktop = “WinSta0\Default” si.dwFlags = #STARTF_USESHOWWINDOW si.wShowWindow = #SW_SHOW ' 显示窗口 ' //创建新的进程,它将工作在新的session中 bResult = CreateProcessAsUser (hToken, ProcessName, #NULL, #NULL, #NULL, #NULL, 位或 (#NORMAL_PRIORITY_CLASS, #CREATE_NEW_CONSOLE), #NULL, #NULL, si, pi) ' //稍微等待处理 延时 (100) ' //创建完成关闭对象句柄 CloseHandle (hToken) CloseHandle (pi.进程句柄) CloseHandle (pi.线程句柄) ' //退出 返回 (bResult) .子程序 GetTokenByName, 逻辑型 .参数 lpName, 文本型 .参数 hToken, 整数型, 参考 .局部变量 hProcessSnap, 整数型 .局部变量 bRet, 逻辑型 .局部变量 pe32, PROCESSENTRY32 .局部变量 exefile, 文本型 .局部变量 hProcess, 整数型 .如果真 (lpName = “”) 返回 (#FALSE) .如果真结束 hProcessSnap = #NULL bRet = #FALSE ' //获取系统中正在运行的进程信息 hProcessSnap = CreateToolhelp32Snapshot (#TH32CS_SNAPPROCESS, 0) .如果真 (hProcessSnap = #INVALID_HANDLE_VALUE) 返回 (#FALSE) .如果真结束 ' //数据结构大小 pe32.dwSize = 296 ' //遍历进程,取得lpName进程令牌 .如果 (Process32First (hProcessSnap, pe32)) .循环判断首 () ' //取得当前进程信息 exefile = 到文本 (pe32.szExeFile) ' //判断是否为lpName进程 .如果真 (exefile = lpName) ' //取得当前进程句柄 hProcess = OpenProcess (#PROCESS_QUERY_INFORMATION, #NULL, pe32.th32ProcessID) ' //打开当前进程令牌 bRet = OpenProcessToken (hProcess, #TOKEN_ALL_ACCESS, hToken) ' //关闭对象句柄 CloseHandle (hProcessSnap) 返回 (bRet) .如果真结束 .循环判断尾 (Process32Next (hProcessSnap, pe32)) bRet = #TRUE .否则 bRet = #FALSE ' //关闭对象句柄 CloseHandle (hProcessSnap) .如果结束 返回 (bRet)