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.dll" (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 CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long Private Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long,ByRef lphModule As Long,ByVal cb As Long,ByRef cbNeeded As Long) As Long Private Sub Command1_Click() On Error Resume Next Dim notepad_hwnd As Long,i As Long,pid As Long Dim notepad_path As String Shell "notepad.exe",vbNormalFocus notepad_hwnd& = FindWindow(vbNullString,"无标题 - 记事本") '获得窗口句柄 i = GetWindowThreadProcessId(notepad_hwnd,pid) '获得记事本pid notepad_path = GetProcessPathByProcessID(pid) '获取记事本全路径 Text1.Text = notepad_path End Sub Private Function GetProcessPathByProcessID(pid As Long) As String '获取应用程序的完整路径 On Error GoTo ErrLine Dim cbNeeded As Long Dim szBuf(1 To 250) As Long Dim Ret As Long Dim szPathName As String Dim nSize As Long Dim hProcess As Long hProcess = OpenProcess(&H400 Or &H10,pid) If hProcess <> 0 Then Ret = EnumProcessModules(hProcess,szBuf(1),250,cbNeeded) If Ret <> 0 Then szPathName = Space(260) nSize = 500 Ret = GetModuleFileNameExA(hProcess,szPathName,nSize) GetProcessPathByProcessID = Left(szPathName,Ret) End If End If Ret = CloseHandle(hProcess) If GetProcessPathByProcessID = "" Then GetProcessPathByProcessID = "can't not catch" End If ErrLine: End Function