Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: как узнать полный путь к екзефайлу процесса? Добавлено: 18.09.06 18:17  

Автор вопроса:  Leha
Мне известен ID процесса, как узнать полный путь к исполняемому файлу?

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 18.09.06 19:35
в поиск...

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 18.09.06 19:39
мла ну лана, сквозь влом и через лень, просто фарт что код под рукой был


Public Function GetAllModuleFromHandle(hwnd As Long, arr() As String)
'Получение сведений о загруженных модулях процесса из хэндла окна
Dim threadID As Long, processID As Long, hSnapshot As Long
Dim uProcess As PROCESSENTRY32, rProcessFound As Long
Dim i As Integer, szExename As String
threadID = GetWindowThreadProcessId(hwnd, processID)
If threadID = 0 Or processID = 0 Then Exit Function
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&;)
If hSnapshot = -1 Then Exit Function
uProcess.dwSize = Len(uProcess)
rProcessFound = ProcessFirst(hSnapshot, uProcess)
Do While rProcessFound
If uProcess.th32ProcessID = processID Then 'Нашли PID процесса

Call GetAllModule(processID, arr()) 'Вызвали функцию возвращающую инфо по PID

i = InStr(1, uProcess.szexeFile, Chr(0))
If i > 0 Then szExename = uProcess.szexeFile
Exit Do
Else
rProcessFound = ProcessNext(hSnapshot, uProcess)
End If
Loop
Call CloseHandle(hSnapshot)
GetExeFromHandle = szExename
End Function

Private Sub GetAllModule(pID As Long, arr() As String)
'Возвращает информацию о загруженных модулях в определённом процессе
    Dim i As Long
    Dim hProcess As Long
    Dim cb As Long
    Dim cbNeeded As Long
    Dim mID() As Long
    Dim nModules As Long
    Dim mName As String
    ReDim arr(0)
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, pID)
    If hProcess <> 0 Then
       cb = 8
       cbNeeded = 96
       Do While cb <= cbNeeded
          cb = cb * 2
          ReDim mID(cb / 4)
          Call EnumProcessModules(hProcess, mID(1), cb, cbNeeded)
       Loop
       nModules = cbNeeded / 4
       If nModules > 0 Then
            mName = String(MAX_PATH, 0)
            For i = 0 To UBound(mID)
                Call GetModuleFileNameExA(hProcess, mID(i), mName, MAX_PATH)
                arr(i) = Trim(mName)
                ReDim Preserve arr(UBound(arr) + 1)
                'кроме "*.exe" файла здесь будет найдено много всяких "*.dll", "*.ocx"
                'и возможно еще что ни - будь, скорее всего, путь к файлу, запустившему процесс
                'будет получен при i = 0
            Next i
            arr(UBound(arr)) = "PID окна процесса: " & pID
       End If
    End If
    Call CloseHandle(hProcess)
End Sub


API сам, и так подвиг... :)

Ответить

Номер ответа: 3
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #3 Добавлено: 18.09.06 19:44

hProcessSnap= CreateToolhelp32Snapshot (H32CS_SNAPPROCESS, YourProcessID)

Process32First (hProcessSnap, pe)

Где  pe =
TYPE PROCESSENTRY32
    dwSize              AS DWORD
    cntUsage            AS DWORD
    th32ProcessID       AS DWORD
    th32DefaultHeapID   AS DWORD
    th32ModuleID        AS DWORD  
    cntThreads          AS DWORD
    th32ParentProcessID AS DWORD  
    pcPriClassBase      AS LONG  
    dwFlags             AS DWORD
    szExeFile           AS ASCIIZ * %MAX_PATH
END TYPE


т.е. pe.szExeFile = Имя файла из которого был запущен просесс.

Best regards,

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 18.09.06 20:00
А мне вся инфа нужна была о процессе поэтому я ещё EnumProcessModules...

Кстати ненашёл H32CS_SNAPPROCESS...

Ответить

Номер ответа: 5
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #5 Добавлено: 18.09.06 22:42
Кстати ненашёл H32CS_SNAPPROCESS...


%TH32CS_SNAPHEAPLIST = &H00000001
%TH32CS_SNAPPROCESS  = &H00000002
%TH32CS_SNAPTHREAD   = &H00000004
%TH32CS_SNAPMODULE   = &H00000008
%TH32CS_SNAPMODULE32 = &H00000010
%TH32CS_SNAPALL      = %TH32CS_SNAPHEAPLIST _
                    OR %TH32CS_SNAPPROCESS _
                    OR %TH32CS_SNAPTHREAD _
                    OR %TH32CS_SNAPMODULE
%TH32CS_INHERIT      = &H80000000???

Ответить

Номер ответа: 6
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #6 Добавлено: 19.09.06 01:17
пасиб

Ответить

Номер ответа: 7
Автор ответа:
 Leha



Вопросов: 37
Ответов: 68
 Профиль | | #7 Добавлено: 19.09.06 13:11
Мне всегда нравилось что когда задаешь вопрос на форуме, тебя посылают в поиск. Тогда зачем вообще этот форум нужен?

Но всетаки спасибо

Ответить

Номер ответа: 8
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #8
Добавлено: 19.09.06 13:24
Зачем, зачем ...
Вот когда допустим(к примеру) 1 мая создали тему, обсудили и выяснили как реализовать нужный момент, дружно про нее забыли.
2 мая тема поднимается снова, но человеком который не видел тему созданную 1го мая.
Потом тот же вопрос задается 3 и 4 мая.
Ты захочешь разговаривать с человеком который 5го мая поднимет снова этот вопрос?
А некоторым приходят все сообщения с форума на почту, как ты думаешь интересно читать одно и тоже.
Вот то то и оно, так что алгоритм:
-Возник вопрос
- подумал сам
- подумал еще пару часиков
- поискал на винте
- еще раз поискал на винте
- зашел на VBNet в раздел примеры
- зашел в раздел библиотека кодов
- воспользовался поиском на форуме
- если не работает поиск, ищешь через гугл, но на сайте, как это уже обсуждалось
- ты ни чего не нашел, создаешь тему, ура тебе ответили

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 19.09.06 15:02
Как правило лучше сразу поискать ответ на свой вопрос в документацииЭ т.е.:

- Возник вопрос
- Попробовал вспомнить ответ
- Выполнил поиск в докумнетации

А затем уже лезть по всяким форумам и интернетам...

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 19.09.06 15:14
Мне всегда нравилось что когда задаешь вопрос на форуме, тебя посылают в поиск.
Тогда зачем вообще этот форум нужен?

Чтоб тебя послали в поиск

Ответить

Номер ответа: 11
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #11
Добавлено: 19.09.06 20:37
1. Если бы еще поиск работал.
2. Программист не тот кто знает все, программист тот кто умеет пользоваться докуменртацией.

Ответить

Номер ответа: 12
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #12 Добавлено: 19.09.06 23:15
Мне всегда нравилось что когда задаешь вопрос на форуме, тебя посылают в поиск.

Ну так радуйся, что посылают только в поиск :) А то бывает вопросы тут такие, которые обычно на других форумах тупо сносятся, или перекидываются в оффтоп и закрываются к обсуждению, но увы... увы... это не у нас...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам