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