rt

解决方案 »

  1.   

    1.用Dll进程注入
    2.use getshortpathname api please
      

  2.   

    现在最关键的是这个问题:
    如何获取虚拟DOS中运行的EXE文件名?
      

  3.   

    Public Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
    Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
    Public Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
    Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
    Public Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
    Public Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
    Public Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
    Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
    Public Type PROCESSENTRY32
       dwSize As Long
       cntUsage As Long
       th32ProcessID As Long           ' This process
       th32DefaultHeapID As Long
       th32ModuleID As Long            ' Associated exe
       cntThreads As Long
       th32ParentProcessID As Long     ' This process's parent process
       pcPriClassBase As Long          ' Base priority of process threads
       dwFlags As Long
       szExeFile As String * 260       ' MAX_PATH
    End TypePublic Const PROCESS_QUERY_INFORMATION = 1024
    Public Const PROCESS_VM_READ = 16
    Public Const MAX_PATH = 260
    Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Public Const SYNCHRONIZE = &H100000
    'STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
    Public Const PROCESS_ALL_ACCESS = &H1F0FFF
    Public Const TH32CS_SNAPPROCESS = &H2&
    Public Const hNull = 0       Public Function GetPath(byval List1 As List)as long
           Dim cb As Long
           Dim cbNeeded As Long
           Dim NumElements As Long
           Dim ProcessIDs() As Long
           Dim cbNeeded2 As Long
           Dim NumElements2 As Long
           Dim Modules(1 To 200) As Long
           Dim lRet As Long
           Dim ModuleName As String
           Dim nSize As Long
           Dim hProcess As Long
           Dim i As Long
           cb = 8
           cbNeeded = 96
           Do While cb <= cbNeeded
              cb = cb * 2
              ReDim ProcessIDs(cb / 4) As Long
              lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
           Loop
           NumElements = cbNeeded / 4
        
           For i = 1 To NumElements
                hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i))
                    
                    If hProcess <> 0 Then
                        lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2)
                        If lRet <> 0 Then
                            ModuleName = Space(MAX_PATH)
                            nSize = 500
                            lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize)
                                List1.Additem = Left(ModuleName, lRet)
                        End If
                    End If
                lRet = CloseHandle(hProcess)
            Next
        End If
    End Sub
      

  4.   

    WinXP+VB6Option ExplicitPublic Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
    Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
    Public Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
    Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
    Public Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
    Public Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
    Public Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
    Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
    Public Type PROCESSENTRY32
       dwSize As Long
       cntUsage As Long
       th32ProcessID As Long           ' This process
       th32DefaultHeapID As Long
       th32ModuleID As Long            ' Associated exe
       cntThreads As Long
       th32ParentProcessID As Long     ' This process's parent process
       pcPriClassBase As Long          ' Base priority of process threads
       dwFlags As Long
       szExeFile As String * 260       ' MAX_PATH
    End TypePublic Const PROCESS_QUERY_INFORMATION = 1024
    Public Const PROCESS_VM_READ = 16
    Public Const MAX_PATH = 260
    Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Public Const SYNCHRONIZE = &H100000
    'STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
    Public Const PROCESS_ALL_ACCESS = &H1F0FFF
    Public Const TH32CS_SNAPPROCESS = &H2&
    Public Const hNull = 0Public Function GetPath(ByVal List1 As ListBox) As Long
           Dim cb As Long
           Dim cbNeeded As Long
           Dim NumElements As Long
           Dim ProcessIDs() As Long
           Dim cbNeeded2 As Long
           Dim NumElements2 As Long
           Dim Modules(1 To 200) As Long
           Dim lRet As Long
           Dim ModuleName As String
           Dim nSize As Long
           Dim hProcess As Long
           Dim i As Long
           cb = 8
           cbNeeded = 96
           Do While cb <= cbNeeded
              cb = cb * 2
              ReDim ProcessIDs(cb / 4) As Long
              lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
           Loop
           NumElements = cbNeeded / 4
        
           For i = 1 To NumElements
                hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i))
                    
                    If hProcess <> 0 Then
                        lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2)
                        If lRet <> 0 Then
                            ModuleName = Space(MAX_PATH)
                            nSize = 500
                            lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize)
                                List1.AddItem Left(ModuleName, lRet)
                        End If
                    End If
                lRet = CloseHandle(hProcess)
            Next
        
    End Function