Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: опять о процессах Добавлено: 12.11.08 00:36  

Автор вопроса:  Marki

Ответить

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

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #16
Добавлено: 17.11.08 00:05
+1
Раскаль умный, он шарит =)
Пришли прогу что-ли, может решу твою проблему.

Ответить

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



Вопросов: 42
Ответов: 94
 Профиль | | #17 Добавлено: 18.11.08 00:57
обычно у программ формат заголовка типа

Эх!... обычно - это не совсем железное правило. Местными связистами там написана программа, которая работает с архивами сообщений, и имеет в своем имени ту же самую "постоянную составляющую", что и та программа, которую мне надо обнаружить. Правда, ее то я в списке процессов обнаружить как раз могу, в отличие от той, которая мне реально нужна. :(

Ответить

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



Вопросов: 42
Ответов: 94
 Профиль | | #18 Добавлено: 18.11.08 01:02
Пришли прогу что-ли, может решу твою проблему.

Прогу - которую мне надо "вычислить"?
Дистрибутив выложен у производителя:
"дискета 1" - http://www.monitorsoft.ru/files/d1.zip
"дискета 2" - http://www.monitorsoft.ru/files/d2.zip
Описание, если интересно, по ссылке http://www.monitorsoft.ru/index.php?module=infopage&id=8&lang=ru

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #19
Добавлено: 18.11.08 12:34
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
  3. Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
  4. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  5. 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
  6. 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
  7.  
  8. Private Const PROCESS_QUERY_INFORMATION = 1024
  9. Private Const PROCESS_VM_READ = 16
  10. Private Const MAX_PATH = 260
  11.  
  12. Private Sub Form_Load()
  13.     Dim pID As Long
  14.     Dim hWnd As Long
  15.     Dim hProcess As Long
  16.     Dim hModules(1 To 200) As Long
  17.     Dim cbSize As Long
  18.     Dim ret As Long
  19.     Dim ModuleName As String
  20.     
  21.     'Ищем окно с классом "TAFTNMainForm"
  22.     hWnd = FindWindow("TAFTNMainForm", vbNullString)
  23.     'Тут мы могли бы и закончить, вероятно, но
  24.     'есть вероятность, что у какого-то другого
  25.     'приложения будет окно с таким же классом,
  26.     'поэтому далее будем искать процесс, которому
  27.     'это окно принадлежит. В нашем случае это
  28.     'будет процесс "ntvdm.exe" (NT virtual dos machine)
  29.     'ибо наше приложение запускается в контексте именно этого процесса
  30.     If hWnd > 0 Then
  31.         'Нашли такое окно, получаем идентификатор процесса (process id), которому это окно принадлежит
  32.         GetWindowThreadProcessId hWnd, pID
  33.         'Открываем процесс для получения информации
  34.         hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, pID)
  35.         'Перечисляем все модули процесса
  36.         ret = EnumProcessModules(hProcess, hModules(1), 200, cbSize)
  37.         'Получаем имя файла первого модуля (первым модулем всегда является исполняемый файл процесса)
  38.         ModuleName = Space(MAX_PATH)
  39.         ret = GetModuleFileNameExA(hProcess, hModules(1), ModuleName, MAX_PATH)
  40.         'Закрываем хэндл процесса
  41.         CloseHandle hProcess
  42.         'Проверяем вхождение "ntvdm.exe" в строку с именем исплняемого файла процесса
  43.         If InStr(1, ModuleName, "ntvdm.exe", vbTextCompare) Then
  44.             'Программа найдена!
  45.             MsgBox "AFTN was found!", vbSystemModal
  46.         End If
  47.     End If
  48.     'Закрываемся
  49.     End
  50. End Sub

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #20
Добавлено: 18.11.08 12:36
Кстати, код будет работать только под NT-подобными системами. Под win 9x его придется переписать. В дотнет переведешь сам или автоконвертером.

Ответить

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



Вопросов: 42
Ответов: 94
 Профиль | | #21 Добавлено: 19.11.08 12:56
Временно в отъезде, поэтому без компа, и буду пробовать чуть позже.
Работать придется под XP, и надеюсь глобальных изменений не потребуется.
Благодарю за помощь. Приналичии вопросов - еще, с Вашего разрешения, немного "подергаю" :)

Ответить

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



Вопросов: 42
Ответов: 94
 Профиль | | #22 Добавлено: 06.05.09 20:27
Как и обещал - "дергаю" с вопросами. Наконеч-то совсем приперло с этой темой и стал плотно разбираться.
Проблемы возникли с самого начала - начиная с "автоконвертера" (что это такое, где взять и тд?) - встроенный "перевод" как то не захотел принимать участия в нормальной работе:
например, на строку
GetWindowThreadProcessId(hWnd, pID)
получаю комментарий : 'UPGRADE_ISSUE: Не удается выполнить синтаксический разбор предыдущей строки. Дополнительно: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="82EBB1AE-1FCB-4FEF-9E6C-8736A316F8A7"'

Попытка же запуска кода в "оригинальном состоянии" вызывает ошибку на
pID = GetWindowThreadProcessId(hWnd, pID)
"Попытка чтения или записи в защищенную память".
:((

Ответить

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

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



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