Страница: 1 |
На днях я вот эксперементировал с процессами с системными сообщениями. Сначала я захотел чтобы моя прога закрывала все экземпляры программы "блокнот". У меня получилось вот это: Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Sub Command1_Click() Dim hw& Do hw& = FindWindow(vbNullString, "Безымянный - Блокнот") SendMessage hw&, &H10, &O0, &O0 Loop Until hw& = 0 End Sub Программа работает неплохо, но тут у меня возникла проблема. Я получал Handle окна которое хотел закрыть с помощью FindWindow, пытаясь найти заголовок. А если мне не известен заголовок окна или его просто нет, можно его как-нибудь закрыть? Например мне известен адрес екзешника, ну C:/Windows/internat.exe например. Как мне его выгрузить? (нет, я не собираюсь подсунуть вместо этого файла свой, я не вирусописатель, а борец за справедливость :-)) Я подумал, что можно TerminateProcess юзать, но я не пользовался пока, в книге Эплмана не рекомендуется её использовать, да там ещё надо ExitCode какой-то получать... Вобщем надо мне ещё подучиться с ней работать, если кто поможет примером-буду рад (тут на сайте скачивал пример Killer - штука класс, но там кажись часть функций в UserControl переложены, не могу разобраться до конца. Да и тут ещё один вопросик возникает: если мою прогу хотят убить TerminateProcess'ом то Form_Unload не выполняется, как мне зашитить свою прогу от гроханья чужыми? Буду рад если подскажите как во время этой ерунды выполнить Form_Unload или например, поставить Hook (как вы уже догадались-я не умею) и отловить TerminateProcess и WM_CLOSE. Там есть событие Form_Terminate, но кажется оно не лучше Unload. Спасибо за внимание.
Option Explicit Private Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szExeFile As String * 260 End Type Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long) 'ProcessList это список (через запятую) имен exeфайлов (без пути), процессы для которых нужно закрыть Public Sub KillProcess(ProcessList As String) Dim hSnapShot As Long, nProcess As Long Dim uProcess As PROCESSENTRY32 Dim hProcess As Long Огромное спасибо! Код работает идеально. А про защиту и хуки не знаешь где мона инфу накачать? Страница: 1 |
Вопрос: Процессы, их уничтожение, Hook'и, WM_CLOSE
Добавлено: 22.08.03 05:37
Автор вопроса: Morpheus | Web-сайт:
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
Malyav
ICQ: 8440085
Вопросов: 15
Ответов: 117
Web-сайт:
Профиль | | #1
Добавлено: 22.08.03 07:27
Номер ответа: 2
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #2
Добавлено: 22.08.03 12:20
Номер ответа: 3
Автор ответа:
Malyav
ICQ: 8440085
Вопросов: 15
Ответов: 117
Web-сайт:
Профиль | | #3
Добавлено: 22.08.03 14:15
Нет, никогда этим не интересовался. А что помог, приятно.