Найти её и обезвредить
Бывает такое, что при запуске своей программы необходимо обнаружить какую-то нежелательную программу и закрыть ее. Например, нам нужно во время работы нашей программы закрывать окна блокнота. Как же можно его обнаружить? Первый способ это находить в процессах "notepad.exe" и снимать задачу. Но как программу назовешь, под таким именем она и будет в процессах, нас могут обмануть, переименуют блокнот в "notepud.exe" и наша программа работать не будет. Второй способ найти окно по его заголовку, но заголовок зависит от названия файла .txt, и будет всегда разным - тоже не подходит. А вот найти окно по имени класса, которому оно принадлежит - это можно . У Блокнота имя класса окна - Notepad, и как бы не назывался исполняемый файл и файлы .txt имя класса у них будет одно и тоже - это Notepad. Давайте напишем две программы, первая по заголовку окна узнает его имя класса. Т.е. Вы введете в текстовом поле "Безымянный - Блокнот" и получите "Notepad". И вторая, будет следить за именами классов окон и если найдет "Notepad", то закроет его. Получение имени класса, которому принадлежит окноСоздайте проект Standart EXE. Добавьте на форму CommandButton и два TextBox'а: Option Explicit Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As _ Вот и все, давайте проверим. Откройте Пуск -> Выполнить и введите regedit - откроется редактор реестра. Запускайте проект и в TextBox1 введите заголовок окна редактора реестра, т.е. "Редактор реестра". Нажмите на кнопку, и в TextBox2 у Вас должно появиться имя класса - " RegEdit_RegEdit". Поэкспериментируйте с другими окнами. Найти её и обезвредитьТеперь мы можем узнавать имена классов любых окон, будь это какой либо отладчик, "монитор" или "шпион". Забудем про блокнот и вспомним, про замечательный "монитор" - Regmon, шпионящий за программами, которые работают с реестром. Напишем программку, которая будет закрывать Regmon во время своей работы. Создайте проект Standart EXE. Добавьте на форму Timer, Interval поставте равным единице: Option Explicit Готово. Запустите проект, а затем и Regmon v6.06 и Вы увидите как он закроется. Включайте Ваше воображение, делайте, чтобы программа приостанавливалась, появлялось сообщение о закрытии Regmon'a и т.д. Делайте наблюдение за несколькими классами.
Страница сайта http://silicontaiga.ru
Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=5111 |