Uso de la API de vb
Opción explícita
'*************************** *** **********
'* Sin comentarios
'* Autor:jpkb@qq com
'* Abrir fuente, conserve la información del autor.
'* 2008.11.7
'*********************** ******* *************
Función de declaración privada CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Función de declaración privada TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) Mientras
Función de declaración privada CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Función de declaración privada OpenProcess Lib "kernel32" (ByVal dwDesiredAccess mientras sea larga, ByVal bInheritHandle mientras, ByVal dwProcessId mientras) mientras
Función de declaración privada privada ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot siempre y cuando, uProcess como PROCESSENTRY32) mientras
Función de declaración privada ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot mientras, uProcess como PROCESSENTRY32) mientras
Función de declaración privada GetModuleFileNameEx Lib "psapi .dll" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long
Función de declaración privada EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Función de declaración privada Process32First Lib "kernel32" (PorVa
l hSnapShot Mientras, uProcess Como PROCESSENTRY32) Mientras
Función de declaración privada Process32Next Lib "kernel32" (ByVal hSnapShot Mientras, uProcess Como PROCESSENTRY32) Mientras
Función de declaración privada ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, uProcess As Long, ByVal lpBaseAddress Como cualquiera, ByRef lpBuffer Como cualquiera, ByVal nSize As Long , lpNumberOfBytesWritten As Long) As Long
Función de declaración privada NtQueryInformationProcess Lib "ntdll" (ByVal ProcessHandle As Long, ByVal ProcessInformationClass As Long, ByRef ProcessInformation As Any, ByVal lProcessInformationLength As Long, ByRef lReturnLength As Long) As Long
Tipo público PROCESSENTRY32
dwSize durante el tiempo
cntUsage durante el tiempo
th32ProcessID durante el tiempo
th32DefaultHeapID durante el tiempo
th32ModuleID es largo
cntThreads es largo
th32ParentProcessID es largo
pcPriClassBase es largo
dwFlags es largo
szExeFile es cadena * 500
Tipo final
Tipo público PROCESS_BASIC_INFORMATION
Estado de salida siempre que
Dirección PebBase como Largo
AffinityMask Como largo
BasePriority Como largo
UniqueProcessIdAs Largo
HeredadoDeUniqueProcessId Como largo
Tipo de fin
Const pública PROCESS_QUERY_INFORMATION = 1024
Const pública STANDARD_RIGHTS_ REQUIRED Mientras = &HF0000
Const pública SINCRONIZAR Mientras = &H100000
Pública Constante PROCESS_ALL_ACCESS como
Largo = (STANDARD_ RIGHTS_REQUIRED O SYNCHRONIZE O &HFFF)
Const pública PROCESS_TERMINATE = & H1
Const pública TH32CS_SNAPHEAPLIST = 1
Const pública TH32CS_SNAPPROCESS = 2 p> p>
Const pública PROCESS_VM_READ = 16
Const pública TH32CS_SNAPTHREAD = &H4
Const pública TH32CS_SNAPMODULE = &H8
Const pública TH32CS_SNAPALL = ( TH32CS_SNAPHEAPLIST o TH32CS_SNAPPROCESS o TH32CS_SNAPTHREAD o TH32CS_ SNAPMODULE)
Const pública TH32CS_INHERIT = & H80000000
Const pública MAX_PATH como entero = 260
Const pública SW_NORMAL = 1
Const pública SW_MAXIMIZE = 3
Const pública SW_MINIMIZE =6
Constante pública SW_SHOW = 5
Función pública GetProcessCmdLine(ByVal PID siempre ) As String
'Volver a la línea de comando del programa
Dim strBuffer As String End If
CloseHandle hProcess
strBuffer = Left$( strBuffer, InStr (strBuffer, Chr(0) & Chr(0)))
GetProcessCmdLine = StrConv(strBuffer, vbFromUnicode)
Función final
Pública Función GetProcessPath( ByVal PID As Long) As String
'Devuelve la ruta del proceso.
En caso de error, Ir a Z
Atenuar cbNeeded mientras
Atenuar szBuf(1 a 250) mientras
Atenuar Ret mientras
Dim szPathName As String
Dim nSize As Long
Dim hProcess As Long
hProcess = OpenProcess(&H400 O &H10, 0 , PID)
Si hProcess <> 0 Entonces
Ret = EnumProcessModules(hProcess, szBuf(1), 250, cbNeeded)
Si Ret <> 0 entonces
szPathName = Space(260)
nSize = 500
Ret = GetModuleFileNameEx(hProcess, szBuf(1), szPathName, nSize) p>
GetProcessPath = Left(szPathName,
Finalizar si
Finalizar si
Ret = CloseHandle(hProcess)
Si GetProcessPath = "" Entonces
GetProcessPath = "SISTEMA"
Finalizar si
Salir de la función
Z:
GetProcessPath = " ERROR"
Función final
Función pública GetProcessPID(sEXEName As String, ByVal ID opcional As Long = 1) Siempre que
'ID sea sexEName en el proceso ID de lista.
Valor PID de retorno
Atenuar hPS mientras sea largo, xx mientras lo haga
Atenuar pe32 como PROCESSENTRY32
Atenuar el búfer como cadena * 255, cargado como booleano
Atenuar la mano mientras, EXEName como cadena
Atenuar el bucle mientras, myID mientras
hPS = CreateToolhelp32Snapshot(TH32CS_ SNAPPROCESS, 0)
Si hPS = -1 Luego sale de la función
pe32.dwSize = Len(pe32)
theloop = ProcessFirst(hPS, pe32)
Mientras theloop & lt;> 0 '
hand = OpenProcess(PROCESS_TERMINATE, True, CLng(pe32.th32ProcessID))
EXENam = pe32.szExeFile
myID = pe32.th32ProcessID p>
Si UCase(Left(EXEName, Len(sEXEName)) = UCase(sEXEName) Entonces
xx = xx + 1
Si ID = xx Entonces
GetProcessPID = myID
CloseHandle hPS
Función de salida
Finalizar si
Finalizar si
theloop = ProcessNext(hPS, pe32)
Wend
CloseHandle hPS
Función final