|
5精币
从易语言转火山PC,DLL命令Process32FirstW返回始终为假不知为何..
易语言
火山PC
_临时子程序 () 返回 (0 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 进程ID | 整数型 | | | 进程句柄 | 整数型 | | | 输出调试文本 (RunProcess (“E:\Program Files\WinRAR\WinRAR.exe”, 进程ID, 进程句柄 )) |
RunProcess | 逻辑型 | | |
ProcessName | 文本型 | | | | 进程标识符 | 整数型 | | | | 进程句柄 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | hToken | 整数型 | | | si | STARTUPINFO | | | pi | PROCESS_INFORMATION | | | bResult | 逻辑型 | | | 如果真 (ProcessName = “”)返回 (假) 如果真 (取反 (GetTokenByName (“EXPLORER.EXE”, hToken )) )返回 (假) si.cb = 68 si.lpDesktop = “WinSta0\Default”si.dwFlags = #STARTF_USESHOWWINDOW si.wShowWindow = #SW_SHOW bResult = CreateProcessAsUser (hToken, ProcessName, #NULL, #NULL, #NULL, #NULL, 位或 ( #NORMAL_PRIORITY_CLASS, #CREATE_NEW_CONSOLE ), #NULL, #NULL, si, pi )进程句柄 = pi.进程句柄 进程标识符 = pi.进程标识符 延时 (100 ) CloseHandle (hToken )CloseHandle (pi.进程句柄 )CloseHandle (pi.线程句柄 ) 返回 (bResult )|
GetTokenByName | 逻辑型 | | |
lpName | 文本型 | | | | hToken | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | hProcessSnap | 整数型 | | | bRet | 逻辑型 | | | pe32 | PROCESSENTRY32 | | | exefile | 文本型 | | | hProcess | 整数型 | | | 如果真 (lpName = “”)返回 (假)hProcessSnap = #NULL bRet = 假 hProcessSnap = CreateToolhelp32Snapshot ( #TH32CS_SNAPPROCESS, 0 )输出调试文本 (hProcessSnap )如果真 (hProcessSnap = #INVALID_HANDLE_VALUE )返回 (假) pe32.dwSize = 296 如果 (Process32First (hProcessSnap, pe32 )) 循环判断首 () exefile = 到文本 (pe32.szExeFile ) 如果真 (exefile = lpName ) hProcess = OpenProcess ( #PROCESS_QUERY_INFORMATION, #NULL, pe32.th32ProcessID ) bRet = OpenProcessToken (hProcess, #TOKEN_ALL_ACCESS, hToken ) CloseHandle (hProcessSnap )返回 (bRet )循环判断尾 (Process32Next (hProcessSnap, pe32 )) bRet = 真 bRet = 假 CloseHandle (hProcessSnap )返回 (bRet)
下面为火山PC源码
<火山程序 类型 = "通常" 版本 = 1 />
包 火山.视窗 <@文档 = "category = \"集_RunProcess\"">
类 常量类 <公开 @全局类 = 真>
{
常量 FALSE <公开 类型 = 逻辑型 值 = 假 "">
常量 TRUE <公开 类型 = 逻辑型 值 = 真>
常量 NULL <公开 类型 = 整数 值 = 0>
常量 ERROR_FILE_NOT_FOUND <公开 类型 = 整数 值 = 2>
常量 TH32CS_SNAPPROCESS <公开 类型 = 整数 值 = 2>
常量 INVALID_HANDLE_VALUE <公开 类型 = 整数 值 = -1>
常量 PROCESS_QUERY_INFORMATION <公开 类型 = 整数 值 = 1024>
常量 TOKEN_ALL_ACCESS <公开 类型 = 长整数 值 = 983551>
常量 STARTF_USESHOWWINDOW <公开 类型 = 整数 值 = 1>
常量 CREATE_NEW_CONSOLE <公开 类型 = 整数 值 = 16>
常量 NORMAL_PRIORITY_CLASS <公开 类型 = 短整数 值 = 32>
常量 SW_SHOW <公开 类型 = 短整数 值 = 5>
#
}
类 API_RunProcess_类 <公开>
{
#
方法 RunProcess <公开 类型 = 逻辑型 注释 = "运行进程" @禁止流程检查 = 真>
参数 ProcessName <类型 = 文本型 注释 = "欲运行进程路径">
参数 进程标识符 <类型 = 整数类 注释 = "PID">
参数 进程句柄 <类型 = 整数类>
{
变量 hToken <类型 = 整数>
变量 si <类型 = STARTUPINFO>
变量 pi <类型 = PROCESS_INFORMATION>
变量 bResult <类型 = 逻辑型>
如果真 (ProcessName == "")
{
返回 (假)
}
// //获取进程Token
如果真 (取反 (GetTokenByName ("EXPLORER.EXE", hToken)))
{
返回 (假)
}
// //进程信息设置
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)
进程句柄.值 = pi.Process_handle
进程标识符.值 = pi.Process_identifier
// //稍微等待处理
延时 (100)
// //创建完成关闭对象句柄
CloseHandle (hToken)
CloseHandle (pi.Process_handle)
CloseHandle (pi.Thread_handle)
// //退出
返回 (bResult)
}
方法 GetTokenByName <类型 = 逻辑型 @禁止流程检查 = 真>
参数 lpName <类型 = 文本型>
参数 hToken <类型 = 整数>
{
变量 hProcessSnap <类型 = 长整数>
变量 bRet <类型 = 逻辑型>
变量 pe32 <类型 = PROCESSENTRY32W>
变量 exefile <类型 = 文本型>
变量 hProcess <类型 = 长整数>
如果真 (lpName == "")
{
返回 (假)
}
hProcessSnap = 常量类.NULL
bRet = 假
// //获取系统中正在运行的进程信息
hProcessSnap = CreateToolhelp32Snapshot (常量类.TH32CS_SNAPPROCESS, 0)
如果真 (hProcessSnap == 常量类.INVALID_HANDLE_VALUE)
{
返回 (假)
}
// //数据结构大小
pe32.dwSize = 296
调试输出 (Process32FirstW (hProcessSnap, pe32))
// //遍历进程,取得lpName进程令牌
如果 (Process32FirstW (hProcessSnap, pe32))
{
循环判断首 ()
{
// //取得当前进程信息
exefile = 字符数组到文本 (pe32.szExeFile, 260)
调试输出 (exefile)
// exefile = 到文本 (pe32.szExeFile)
// //判断是否为lpName进程
如果真 (exefile == lpName)
{
// //取得当前进程句柄
hProcess = OpenProcess (常量类.PROCESS_QUERY_INFORMATION, 常量类.NULL, pe32.th32ProcessID)
// //打开当前进程令牌
bRet = OpenProcessToken (hProcess, 常量类.TOKEN_ALL_ACCESS, hToken)
// //关闭对象句柄
CloseHandle (hProcessSnap)
返回 (bRet)
}
}
循环判断尾 (Process32NextW (hProcessSnap, pe32))
bRet = 真
}
否则
{
bRet = 假
// //关闭对象句柄
CloseHandle (hProcessSnap)
}
返回 (bRet)
}
方法 CreateProcessAsUser <公开 静态 类型 = 逻辑型 注释 = "建立指定用户的新进程" 返回值注释 = "CreateProcessAsUserA"
@输出名 = "CreateProcessAsUserW" @视窗.输入 = "Advapi32.dll">
参数 hToken <类型 = 变整数>
参数 lpApplicationName <类型 = 文本型>
参数 lpCommandLine <类型 = 变整数>
参数 lpProcessAttributes <类型 = 变整数>
参数 lpThreadAttributes <类型 = 变整数>
参数 bInheritHandles <类型 = 变整数>
参数 dwCreationFlags <类型 = 变整数>
参数 lpEnvironment <类型 = 变整数>
参数 lpCurrentDirectory <类型 = 变整数>
参数 lpStartupInfo <类型 = STARTUPINFO>
参数 lpProcessInformation <类型 = PROCESS_INFORMATION 注释 = "啊德瓦达">
方法 CreateToolhelp32Snapshot <公开 静态 类型 = 变整数 返回值注释 = "CreateToolhelp32Snapshot"
@输出名 = "CreateToolhelp32Snapshot" @视窗.输入 = "Kernel32.dll">
参数 dwFlags <类型 = 整数 注释 = "用来指定“快照”中需要返回的对象">
参数 th32ProcessID <类型 = 整数 注释 = "一个进程ID号,用来指定要获取哪一个进程的快照,0代表获取系统进程列表或获取当前进程快照">
方法 OpenProcess <公开 静态 类型 = 变整数 注释 = "将句柄返回给过程对象" 返回值注释 = "OpenProcess" @输出名 = "OpenProcess"
@视窗.输入 = "Kernel32.dll">
参数 dwDesiredAccess <类型 = 变整数>
参数 bInheritHandle <类型 = 变整数>
参数 dwProcessId <类型 = 变整数>
方法 OpenProcessToken <公开 静态 类型 = 逻辑型 注释 = "打开过程令牌对象" 返回值注释 = "OpenProcessToken"
@输出名 = "OpenProcessToken" @视窗.输入 = "advapi32.dll">
参数 ProcessHandle <类型 = 变整数>
参数 DesiredAccess <类型 = 变整数>
参数 TokenHandle <类型 = 变整数>
方法 Process32FirstW <公开 静态 类型 = 逻辑型 @输出名 = "Process32FirstW" @视窗.输入 = "Kernel32.dll">
参数 hSnapshot <类型 = 变整数 "">
参数 lppe <类型 = PROCESSENTRY32W @视窗.输出参数 = 真>
方法 Process32NextW <公开 静态 类型 = 逻辑型 @输出名 = "Process32NextW" @视窗.输入 = "Kernel32.dll">
参数 hSnapshot <类型 = 变整数>
参数 lppe <类型 = PROCESSENTRY32W @视窗.输出参数 = 真>
方法 CloseHandle <公开 静态 类型 = 逻辑型 @输出名 = "CloseHandle" @视窗.输入 = "Kernel32.dll">
参数 hObject <类型 = 变整数>
方法 LocalSize <公开 静态 类型 = 变整数 返回值注释 = "LocalSize" @输出名 = "LocalSize" @视窗.输入 = "kernel32.dll">
参数 参数 <类型 = 变整数>
}
#
类 SECURITY_ATTRIBUTES <注释 = "安全性结构" @视窗.结构类 = 0>
{
变量 nLength <公开 类型 = 变整数 @输出名 = "nLength">
变量 lpSecurityDescriptor <公开 类型 = 变整数 @输出名 = "lpSecurityDescriptor">
变量 bInheritHandle <公开 类型 = 变整数 @输出名 = "bInheritHandle">
}
类 STARTUPINFO <注释 = "进程启动信息" @视窗.结构类 = 0>
{
变量 cb <公开 类型 = 变整数 注释 = "NULL" @输出名 = "cb">
变量 lpReserved <公开 类型 = 文本型 注释 = "\"\"" @输出名 = "lpReserved">
变量 lpDesktop <公开 类型 = 文本型 注释 = "\"\"" @输出名 = "lpDesktop">
变量 lpTitle <公开 类型 = 文本型 注释 = "\"\"" @输出名 = "lpTitle">
变量 dwX <公开 类型 = 变整数 注释 = "0" @输出名 = "dwX">
变量 dwY <公开 类型 = 变整数 注释 = "0" @输出名 = "dwY">
变量 dwXSize <公开 类型 = 变整数 注释 = "0" @输出名 = "dwXSize">
变量 dwYSize <公开 类型 = 变整数 注释 = "0" @输出名 = "dwYSize">
变量 dwXCountChars <公开 类型 = 变整数 注释 = "0" @输出名 = "dwXCountChars">
变量 dwYCountChars <公开 类型 = 变整数 注释 = "0" @输出名 = "dwYCountChars">
变量 dwFillAttribute <公开 类型 = 变整数 注释 = "0" @输出名 = "dwFillAttribute">
变量 dwFlags <公开 类型 = 变整数 注释 = "STARTF_USESHOWWINDOW" @输出名 = "dwFlags">
变量 wShowWindow <公开 类型 = 短整数 注释 = "0" @输出名 = "wShowWindow">
变量 cbReserved2 <公开 类型 = 短整数 注释 = "0" @输出名 = "cbReserved2">
变量 lpReserved2 <公开 类型 = 变整数 注释 = "NULL" @输出名 = "lpReserved2">
变量 hStdInput <公开 类型 = 变整数 注释 = "0" @输出名 = "hStdInput">
变量 hStdOutput <公开 类型 = 变整数 注释 = "0" @输出名 = "hStdOutput">
变量 hStdError <公开 类型 = 变整数 注释 = "0" @输出名 = "hStdError">
}
类 PROCESS_INFORMATION <注释 = "进程标识" @视窗.结构类 = 0>
{
变量 Process_handle <公开 类型 = 整数 注释 = "\"进程句柄\"" @输出名 = "Process_handle">
变量 Thread_handle <公开 类型 = 整数 注释 = "\"线程句柄\"" @输出名 = "Thread_handle">
变量 Process_identifier <公开 类型 = 整数 注释 = "\"进程标识符\"" @输出名 = "Process_identifier">
变量 Thread_identifier <公开 类型 = 整数 注释 = "\"线程标识符\"" @输出名 = "Thread_identifier">
}
类 PROCESSENTRY32W <公开 @视窗.结构类 = 0>
{
变量 dwSize <公开 类型 = 整数>
变量 cntUsage <公开 类型 = 整数>
变量 th32ProcessID <公开 类型 = 整数>
变量 th32DefaultHeapID <公开 类型 = 变整数>
变量 th32ModuleID <公开 类型 = 整数>
变量 cntThreads <公开 类型 = 整数>
变量 th32ParentProcessID <公开 类型 = 整数>
变量 pcPriClassBase <公开 类型 = 整数>
变量 dwFlags <公开 类型 = 整数>
变量 szExeFile <公开 类型 = "字符 [260]">
}
|
|