Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Путь к файлу процесса Добавлено: 12.02.07 10:52  

Автор вопроса:  Makes
Использую такой код для определения пути к файлу. Он не подходит, т.к. может определить только имя самого файла без пути. Как быть?


Dim pe As PROCESSENTRY32, hSS&, LastItem&

pe.dwSize = LenB(pe)
hSS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
Process32First hSS, pe
    
   Do
      If InStr(pe.szExeFile, ".") <> 0 Then
         If (Mid(pe.szExeFile, 1, InStr(pe.szExeFile, ".") - 1) = "proga") Then
            List1.AddItem pe.szExeFile
         End If
      End If

      DoEvents
   Loop While Process32Next(hSS, pe)

Ответить

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

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



Вопросов: 8
Ответов: 36
 Профиль | | #1 Добавлено: 12.02.07 17:16
Начал действовать по другому. Возникла другая проблема. Если запускать этот код в самом Вижале, то все нормально выполняется и в text1 выводится искомый путь. Если же запускаю откомпиленный файл, то прога просто завершается при нажатии на комманд1. В чем дело?

Private Sub Command1_Click()
   Dim pe As PROCESSENTRY32, hSS&, LastItem&

   Dim cbNeeded                    As Long
   Dim Modules          As Long
   Dim lRet                        As Long
   Dim ModuleName                  As String
   Dim nSize                       As Long
   Dim hProcess                    As Long
   Dim Path_Of_exe                 As String

pe.dwSize = LenB(pe)
hSS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
Process32First hSS, pe
Path_Of_exe = ""
   Do
      If InStr(pe.szExeFile, ".";) <> 0 Then
         If (Mid(pe.szExeFile, 1, InStr(pe.szExeFile, ".";) - 1) = "proga";) Then

            hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, pe.th32ProcessID)  'Open process for access.
               If hProcess <> 0 Then
                  lRet = EnumProcessModules(hProcess, Modules, 200, cbNeeded) 'Enumerate it's loaded modules.
                  If lRet <> 0 Then
                     ModuleName = Space(260)
                     nSize = 500
                     lRet = GetModuleFileNameExA(hProcess, Modules, ModuleName, nSize) 'Get the EXE Path
                     Path_Of_exe = Left(ModuleName, lRet)
                  End If
               End If
            lRet = CloseHandle(hProcess) 'Close the open process handle.
         End If
      End If
      
      DoEvents
   Loop While Process32Next(hSS, pe)

Text1.Text = Path_Of_exe

End Sub

Ответить

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



Вопросов: 60
Ответов: 808
 Профиль | | #2 Добавлено: 13.02.07 18:32
OpenProcess

Могу сказать что более глючный апи чем апи для процессов я не видел. Можешь посмотреть SPYWORKS FOR VB6 от DESAWARE INC. Пакет кажись платный, но в сети лежит без проблем в крякнутом виде. Там есть VBшные сорсы, одиниз них - полйчение списка процессов, списка DLL для процесса и еще чего-то. В общем поищи, не пожалеешь

Ответить

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



Вопросов: 8
Ответов: 36
 Профиль | | #3 Добавлено: 13.02.07 19:02
Спасибо. Я разобрался.

Ответить

Страница: 1 |

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



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