Путь к приложению по дескриптору окна

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
PILIGRIM
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 25.07.2005 (Пн) 22:35

Путь к приложению по дескриптору окна

Сообщение PILIGRIM » 15.04.2006 (Сб) 23:20

Подскажите пожалуйста как можно определить путь к приложению по дескриптору (Handle) его окна.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 15.04.2006 (Сб) 23:24


tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.04.2006 (Вс) 10:03

GetWindowModuleFileName
Изображение

PILIGRIM
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 25.07.2005 (Пн) 22:35

Сообщение PILIGRIM » 16.04.2006 (Вс) 10:55

Я нашёл такой пример:
Option Explicit
Private Declare Function GetModuleFileNameEx Lib "psapi" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject 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 Const PROCESS_QUERY_INFORMATION = &H400
Private Const PROCESS_VM_READ = &H10

Private Sub Command1_Click()
'PID посмотри Диспетчером задач и подставь сам
Dim PID As Long, hProcess As Long, FileName As String
PID = 380
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, PID)
FileName = Space(255)
FileName = Left(FileName, GetModuleFileNameEx(hProcess, 0, FileName, 255))
CloseHandle hProcess
Debug.Print FileName
End Sub
Но он работает через PID процесса, а мне нужно через Хендел окна.
Подскажите как можно сделать это через Хендел или хотябы как через Хендел получит PID процесса.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.04.2006 (Вс) 11:09

PILIGRIM, нужная тебе функция называется GetWindowModuleFileName
Изображение

PILIGRIM
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 25.07.2005 (Пн) 22:35

Сообщение PILIGRIM » 16.04.2006 (Вс) 12:25

Option Explicit
Private Declare Function GetWindowModuleFileName Lib "user32.dll" Alias "GetWindowModuleFileNameA" (ByVal hwnd As Long, ByVal pszFileName As String, ByVal cchFileNameMax As Long) As Long
Dim strModuleName As String * 255
Dim hFWnd As Long

Private Sub Command1_Click()
hFWnd = Form1.hwnd
strModuleName = Left$(strModuleName, GetWindowModuleFileName(hFWnd, strModuleName, Len(strModuleName)))
MsgBox strModuleName
End Sub

Почему после компиляции при выполнение этого кода функция возвращает не путь к EXE, а C:\WINDOWS\System32\MSVBVM60.DLL, а если получить Хэндел чужого окна то путь не к тому приложению, а к себе?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 75

    TopList