Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Офф-топ

Страница: 1 | 2 | 3 |

 

  Вопрос: Очччень Нужна прога... Добавлено: 20.08.04 02:44  

Автор вопроса:  Lister | ICQ: 298621256 

Ответить

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

Номер ответа: 16
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #16 Добавлено: 21.08.04 02:31
Может я покажусь полным балбесом, но что в lpModuleName указывать???
Путь к экзешнику или имя экзешника

Ответить

Номер ответа: 17
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #17 Добавлено: 21.08.04 02:36
Это я к тому что у меня ни то ни то не работает :(

Ответить

Номер ответа: 18
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #18
Добавлено: 21.08.04 05:39
 Вот так находить экзешник по PID. Добавь на форму ListBox. После запуска щёлкни по форме. Должен появиться msgbox c именем проги. Имя найдено по hWnd. Код переделан с Power Basic. А написал его ни кто иной как Семен Матусовски. Если тебе конечно это имя о чём то говорит.
===

Option Explicit
Private Declare Function CreateToolhelp32Snapshot Lib "KERNEL32.dll" ( _
     ByVal dwFlags As Long, _
     ByVal th32ProcessID As Long) As Long
Private Const TH32CS_SNAPMODULE = &H8
Private Const TH32CS_SNAPPROCESS = &H2
Private Const INVALID_HANDLE_VALUE = &HFFFFFFFF

Private Const MAX_MODULE_NAME32 = 255
Private Const MAX_MODULE_NAME32_1 = MAX_MODULE_NAME32 + 1
Private Const MAX_PATH = 260
  
   Private Type PROCESSENTRY32
      dwSize As Long
      cntUsage As Long
      th32ProcessID As Long ' This process
      th32DefaultHeapID As Long 'PTR
      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 * MAX_PATH ' Path
   End Type
  
   Private Type MODULEENTRY32
      dwSize As Long
      th32ModuleID As Long ' This module
      th32ProcessID As Long ' Owning process
      GlblcntUsage As Long ' Global usage count on the module
      ProccntUsage As Long ' Module usage count in th32ProcessID's context
      modBaseAddr As Byte 'PTR ' Base address of module in th32ProcessID's context
      modBaseSize As Long ' Size in bytes of module starting at modBaseAddr
      hModule As Long ' The hModule of this module in th32ProcessID's context
      szModule As String * MAX_MODULE_NAME32_1
      szExePath As String * MAX_PATH
   End Type

Private Declare Function Process32First Lib "KERNEL32.dll" ( _
     ByVal hSnapshot As Long, _
     ByRef lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "KERNEL32.dll" ( _
     ByVal hSnapshot As Long, _
     ByRef lppe As PROCESSENTRY32) As Long
Private Declare Function Module32First Lib "KERNEL32.dll" ( _
     ByVal hSnapshot As Long, _
     ByRef lpme As MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "KERNEL32.dll" ( _
     ByVal hSnapshot As Long, _
     ByRef lpme As MODULEENTRY32) As Long

Private Declare Function CloseHandle Lib "KERNEL32.dll" ( _
     ByVal hObject As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32.dll" ( _
     ByVal hwnd As Long, _
     ByRef lpdwProcessId As Long) As Long


Private Sub Form_Click()
      ;Dim MyPID As Long
      GetWindowThreadProcessId Me.hwnd, MyPID
      
      ;Dim pe1 As PROCESSENTRY32
      ;Dim me1 As MODULEENTRY32

      ;Dim hProcessSnap As Long
      ;Dim hModuleSnap As Long
      ;Dim nModules As Long
      ;Dim nProcesses As Long
      ;Dim hProcess As Long
      ;Dim lResult1 As Long
      ;Dim lResult2 As Long
      ;Dim cb As Long
      ;Dim cbNeeded As Long
      ;Dim i As Long
      ;Dim j As Long
 
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&;)
   If hProcessSnap = INVALID_HANDLE_VALUE Then MsgBox "Error", 16, "CreateToolhelp32Snapshot": Exit Sub
   pe1.dwSize = Len(pe1)
   
    lResult1 = Process32First(hProcessSnap, pe1)
   
   
            While lResult1 <> 0
               List1.AddItem pe1.szExeFile
               If pe1.th32ProcessID = MyPID Then MsgBox pe1.szExeFile, 64

               hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe1.th32ProcessID)
               If hModuleSnap <> INVALID_HANDLE_VALUE Then
                  me1.dwSize = Len(me1)
                  lResult2 = Module32First(hModuleSnap, me1)
                  While lResult2 <> 0
                    If pe1.th32ModuleID <> me1.th32ModuleID Then
                       List1.AddItem " " & me1.szExePath
                    End If
                       lResult2 = Module32Next(hModuleSnap, me1)
                  Wend
                  CloseHandle hModuleSnap
               End If
               
               lResult1 = Process32Next(hProcessSnap, pe1)
            Wend
            CloseHandle hProcessSnap
   
End Sub

Ответить

Номер ответа: 19
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #19 Добавлено: 21.08.04 15:38
я аналогичный код использовал чтобы найти и убить процесс...

у меня еще встречный вопрос - а можно ли найти путь и имя экзешника, зная hWnd его окна?
Тут просто мысли появились перебрать все окна по EnumWindows...

Ответить

Номер ответа: 20
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #20
Добавлено: 21.08.04 17:15
 Это есть в примере, который я тебе написал. Посмотри его ещё раз.

Ответить

Номер ответа: 21
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #21 Добавлено: 21.08.04 17:31
Дело в том, что в примере показывается не путь к экзешнику... а только имя.
Поэтому я и спросил про путь...

Ответить

Номер ответа: 22
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #22 Добавлено: 21.08.04 19:04
У меня получилось закрывать приложение по имени экзешника. Но это только половина дела. Желательно бы закрывать его по пути к экзешнику...

Ответить

Номер ответа: 23
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #23 Добавлено: 21.08.04 19:16
могу прислать пример для изучения

Ответить

Номер ответа: 24
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #24 Добавлено: 21.08.04 20:00
Кстати, следующий кусок из примера у меня не работает:

lResult2 = Module32First(hModuleSnap, me1)
                  While lResult2 <> 0
                    If pe1.th32ModuleID <> me1.th32ModuleID Then
                       List1.AddItem " " & me1.szExePath
                    End If
                       lResult2 = Module32Next(hModuleSnap, me1)
                  Wend
                  CloseHandle hModuleSnap

Ответить

Номер ответа: 25
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #25 Добавлено: 21.08.04 20:00
lResult2 всегда равен нулую

Ответить

Номер ответа: 26
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #26
Добавлено: 22.08.04 00:01
 Нашёл где ошибка.

   Private Type MODULEENTRY32
      ...
      modBaseAddr As Byte 'PTR ' Base address of module in th32ProcessID's context
      ...
   End Type

 Неправильно перевёл Byte PTR с Power Basic'а.
 Не, я конечно знаю что длина адреса может быть только Long, но вот нашло что то.

 Вот так надо:
  Private Type MODULEENTRY32
      ...
      modBaseAddr As Long
      ...
   End Type

 Хотя раз в API-Guide это есть, то тебе и флаг в руки. И изобретать ничего не надо. Глянул как в примере, а дальше на что фантазии хватит.

>Дело в том, что в примере показывается не путь к экзешнику... а только имя.
Поэтому я и спросил про путь...
 - В 98-й имя вместе с путём идёт. А на ХР на ощупь я тебе никак не помогу. Спроси кого другого.
sne например.

Ответить

Номер ответа: 27
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #27 Добавлено: 22.08.04 00:25
можно сказать, что я уже разобрался... остались только мелочи - написать все это :)

Да, я посмотрел в 98-м - действительно, идет с путями... Кстати, если в ХР откомпилированный проект запустить в режиме совместимости с Windows 9x - то тоже все работает как и хотелось.

В общем, как только программку напишу, я её в примеры на сайт закину, может кому пригодиться :)

Ответить

Номер ответа: 28
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #28
Добавлено: 22.08.04 01:14
 Для XP другие функции есть. EnumProcesses из PSAPI.DLL

Ответить

Номер ответа: 29
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #29 Добавлено: 22.08.04 01:21
Эти тоже начали работать - после поправки MODULEENTRY32

Ответить

Номер ответа: 30
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #30
Добавлено: 22.08.04 02:28
 Я кстати сам с этой хренью только прошлой ночью разобрался. Так что спасибо тебе ;)
 Пол ночи возился. Пытался подключить PSAPI.DLL через LoadLibrary. Естественно у меня ничего не вышло. Однако пока я ковырял эту библу я нашёл в ней одну странность. У неё SubSytem=3.
 Вот только вывод пока из этого сделать не могу. Может кто в XP-шке разбирается подскажет почему так?

Ответить

Страница: 1 | 2 | 3 |

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



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