Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поставить ловушку на активацию окон 
:(
    Опции темы
livo
Дата 23.11.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



Здравствуйте!
Помогите написать код, который бы позволял при активации нового окна, получать название этого окна. Пробовал сам, но винда заглючила страшно. Если надо код подгоню: вдруг его можно чуть подправить.
PM MAIL   Вверх
livo
Дата 13.12.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



Вот мой код:

ДЛЛ:

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#define EXPORT extern "C" __declspec(dllexport)

#pragma argsused

EXPORT LRESULT WINAPI VActivateHook(int nCode, WPARAM wParam, LPARAM lParam);
HINSTANCE ourHI = NULL;
String modName;

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
 if(reason == DLL_PROCESS_ATTACH)
  {
   if(!ourHI)
    {
     ourHI = hinst;
    }
  }
        return 1;
}
//---------------------------------------------------------------------------
//Здесь точно где-то ошибка
LRESULT WINAPI VActivateHook(int nCode, WPARAM wParam, LPARAM lParam)
{
 if(nCode==HCBT_ACTIVATE) // вызывается перед тем как система собирается активировать какоето окно или открыть новое
   SendMessage((HWND)wParam,WM_CLOSE,wParam,lParam);//хочу закрыть окно
 return 0;  
}

Кодовый модуль:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ActivHookU.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{  
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String s = "DLL\\HActivateDLLP.dll";
if(!FileExists(s))return;
hInstance = LoadLibrary(s.c_str());
Label1->Caption = "Библиотека "+String((hInstance)?"загружена":"не загружена!");
if(!hInstance)return;
VAHook = (FActiveHook)GetProcAddress(hInstance,"VActivateHook");
Label1->Caption = "Функция "+String((VAHook)?"загружена":"не загружена!");
if(!VAHook)return;
hHook = SetWindowsHookEx(WH_CBT,(HOOKPROC)VAHook,hInstance,0);
if(!hHook)Label1->Caption = "Хук не установлен!";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
bool unHook=1,freeLibr=1;
if(hHook)unHook=UnhookWindowsHookEx(hHook);
if(hInstance)freeLibr=FreeLibrary(hInstance);
Label1->Caption ="Хук " + String(unHook?"снят":"не снят");
Label1->Caption = Label1->Caption + "\nЭкземпляр " + String(freeLibr?"удален":"не удален");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Button2Click(Form1);
}
//---------------------------------------------------------------------------

Заголовочный файл:
Код

//---------------------------------------------------------------------------

#ifndef ActivHookUH
#define ActivHookUH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TButton *Button1;
        TButton *Button2;
        TLabel *Label1;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:    // User declarations
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
        typedef LRESULT WINAPI (*FActiveHook)(int,WPARAM,LPARAM);//описание указателя на функцию в библиотеке
        FActiveHook VAHook;
        HINSTANCE hInstance;
        HHOOK hHook;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Код компилится нормально, хук устанавливается, но при запуске, например приложения, глюки.
Помогите исправить. Спс.
PM MAIL   Вверх
SABROG
Дата 13.12.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 3
Всего: 91



Это что-то типа вредоносного приложения, т.е. ты пытаешься тут же закрыть любое окно, которое пытается открыть пользователь smile ?

Код

LRESULT WINAPI VActivateHook(int nCode, WPARAM wParam, LPARAM lParam)
{
 if(nCode==HCBT_ACTIVATE) // вызывается перед тем как система собирается активировать какоето окно или открыть новое
   SendMessage((HWND)wParam,WM_CLOSE,wParam,lParam);//хочу закрыть окно
 return 0;  
}


А CallNextHookEx почему не вызываешь ?

Это сообщение отредактировал(а) SABROG - 13.12.2007, 15:23


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
livo
Дата 14.12.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



Да, описал код, как у вредоносного приложения. Но закрывать окно, которое пользователь пытается открыть, не обязательно: это я к примеру взял закрытие. Можно, например, записывать название этого окна в какой-нибудь файл. Что-то вроде шпиона.
Мне важно правильно вызвать хук-процедуру (чтобы без збоев).
Цитата

А CallNextHookEx почему не вызываешь ?


Покажите как. Я вызывал и очевидно не правильно: после вызова процедуры в итоге пришлось перезагрузить винду.
PM MAIL   Вверх
SABROG
Дата 14.12.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 3
Всего: 91



Цитата

LRESULT CallNextHookEx(

    HHOOK hhk,    // handle to current hook
    int nCode,    // hook code passed to hook procedure
    WPARAM wParam,    // value passed to hook procedure
    LPARAM lParam  // value passed to hook procedure
   );


Код

LRESULT WINAPI VActivateHook(int nCode, WPARAM wParam, LPARAM lParam)
{
 if(nCode==HCBT_ACTIVATE) // вызывается перед тем как система собирается активировать какоето окно или открыть новое
   SendMessage((HWND)wParam,WM_CLOSE,wParam,lParam);//хочу закрыть окно
   return CallNextHookEx(ourHI, nCode, wParam, lParam);
}


Это сообщение отредактировал(а) SABROG - 14.12.2007, 17:47


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.