Jag tänkte vidareutveckla en liten sak som jag hittade på forumet här: GetModuleFileNameEx med hModule parametern noll ger namnet på exe-filen. Ok... Men problemet är ju att den andra koden så har jag inte fått tag på processID, jag har ju bara en handle till fönstret... Eller är det detsamma som processid? Satt just och lekte själv med det. Använd funktionen GetWindowThreadProcessId. OBS! Parametern lpdwProcessId är en pekare till en long. Denna måste du själv deklarera i din kod och skicka med i anropet. Använd sen den i anropet till OpenProcess. I koden nedan heter den proc. Vill du inte göra det själv såkan du ju få ut informationen med MS ProcessExplorer.Alla aktiva program med sökväg och filnamn... VB
http://www.pellesoft.se/communicate/forum/view.aspx?msgid=73797
[Aktiva program?]
Den listar alla aktiva program, men jag skulle också vilja veta deras sökvägar och filnamn. Går det? Hur? Frågan är vilka API:er jag skall använda mig av...Sv: Alla aktiva program med sökväg och filnamn... VB
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function GetModuleFileNameExA Lib "PSAPI.dll" ( _
ByVal hProcess As Long, _
ByVal hModule As Long, _
ByVal ModuleName As String, _
ByVal nSize As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_READ = 16
Private Sub Command1_Click()
Dim fileName As String
Dim handle As Long
handle = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, &H960)
fileName = Space(260)
If GetModuleFileNameExA(handle, 0, fileName, 260) Then
MsgBox fileName, , "Process info"
Else
MsgBox "Error " & GetLastError & " in GetModuleFileNameExA ", vbOKOnly, "Process Info"
End If
End Sub
Edit: &H960 i anropet till OpenProcess är processens id.
Sv:Alla aktiva program med sökväg och filnamn... VB
Så hur kopplar jag ihop den här koden med den andra, egentligen?Sv: Alla aktiva program med sökväg och filnamn... VB
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" ( _
ByVal hwnd As Long, _
lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function GetModuleFileNameExA Lib "PSAPI.dll" ( _
ByVal hProcess As Long, _
ByVal hModule As Long, _
ByVal ModuleName As String, _
ByVal nSize As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_READ = 16
Private Sub cmdFind_Click()
Dim fileName As String
Dim procHandle As Long
Dim proc As Long
Dim hwnd As Long
Dim test As Long
hwnd = FindWindow(vbNullString, txtCaption.Text)
If hwnd = 0 Then
MsgBox "Failed to find window", vbCritical, "Process info"
Return
End If
windowHandle.Caption = "0x" & Hex$(hwnd)
GetWindowThreadProcessId hwnd, proc
If proc < 0 Then
MsgBox "GetWindowThreadProcessId failed", vbCritical, "Process Info"
Return
End If
processID.Caption = "0x" & Hex$(proc)
procHandle = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, proc)
If procHandle = Null Then
MsgBox "OpenProcess failed", vbCritical, "Process info"
Return
End If
processHandle.Caption = "0x" & Hex$(procHandle)
fileName = Space(260)
If GetModuleFileNameExA(procHandle, 0, fileName, 260) = Null Then
MsgBox "Error " & GetLastError & " in GetModuleFileNameExA ", vbOKOnly, "Process Info"
End If
exeName.Caption = fileName
End Sub
Sv: Alla aktiva program med sökväg och filnamn... VB
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx