Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

В чём бага? Пытаюсь отловить сообщение hook'ом...

5.2K
08 декабря 2003 года
RomahA
7 / / 08.12.2003
Вот код:

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

HHOOK hk;

LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MessageBox(NULL,"Hook","Hook",MB_OK);
return CallNextHookEx(hk, nCode, wParam, lParam);
}

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
hk = SetWindowsHookEx(WH_KEYBOARD,&HookProc, NULL, 0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
UnhookWindowsHookEx(hk);
}


При компиляции вылезает такая ошибка:

[C++ Error] Unit1.cpp(72): E2034 Cannot convert 'long (__stdcall *)(int,unsigned int,long)' to 'int (__stdcall *)()'
[C++ Error] Unit1.cpp(72): E2342 Type mismatch in parameter 'lpfn' (wanted 'int (__stdcall *)()', got 'long (__stdcall *)(int,unsigned int,long)')

Если при ссылке на HookProc не ставить амперсант &HookProc, такая же фигня! =(

Помогите плз, или подскажите альтернативный метод перехвата сообщений, лучше даже для конкретного окна обращаясь к нему через дескриптор...

Заранее спасибо!
415
08 декабря 2003 года
SLA
274 / / 08.08.2003
Однажды я пытался скомпилировать исходник, написанный на Visual C++, и у меня была аналогичная ошибка. Вконце концов я просто убрал из вызова цункции все "UNwanted" параметры, и все отлично заработало. Только вот у тебя в таком случае пришлось бы убрать ВСЕ параметры в вызове функции. :( А в каком именно месте вылетает эта ошибка?
5.2K
09 декабря 2003 года
RomahA
7 / / 08.12.2003
Ошибка вылетает в этой строке:

hk = SetWindowsHookEx(WH_KEYBOARD,&HookProc, NULL, 0);

Ты прав, WinAPI изучал по Visual c++ helpy =)

Но функции ведь те же, и параметры...
А ещё какие-нить методе знаешь для перехвата сообщений?
415
09 декабря 2003 года
SLA
274 / / 08.08.2003
Цитата:
Originally posted by RomahA
Ошибка вылетает в этой строке:
hk = SetWindowsHookEx(WH_KEYBOARD,&HookProc, NULL, 0)



Компилятор ругается на твой HookProc. Попробуй в этой строке вместо &HookProc написать (int (__stdcall *)())HookProc , и попробуй скомпилировать.

Цитата:
Но функции ведь те же, и параметры...



Нет, не совсем так. В том то и дело.
Кстати, Borland C++BuilderX 1.0 на все 100% совместим с Visual C++.

Цитата:
А ещё какие-нить методе знаешь для перехвата сообщений?



А разве есть что-то кроме SetWindowsHookEx? :) Я других не знаю.

5.2K
09 декабря 2003 года
RomahA
7 / / 08.12.2003
Вот теперь код компилится, но нифига не работает =)
Просто не попадает в процедуру HookProc
я пробовал на другие собщения типа SH_MOUSE, прописывал функцию обратного вызова
MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
всё равно никакой реакции... =(((
415
09 декабря 2003 года
SLA
274 / / 08.08.2003
Цитата:
Originally posted by RomahA
Вот теперь код компилится, но нифига не работает =)



А как у тебя объявлена функция HookProc() ?

??? HookProc(???)
{
}

5.2K
10 декабря 2003 года
RomahA
7 / / 08.12.2003
Цитата:
Originally posted by SLA


А как у тебя объявлена функция HookProc() ?

??? HookProc(???)
{
}



Никак не объявлена...

Короче задача такай, из определённого приложения вытащить сообщения посылаемые другому приложению... Скоро голова лопнет от этих Хуков =)
Увидеть бы паботающий код и желательно в обной прикладной программе, без подключения библиотек с описанием функций обратного вызова...

415
10 декабря 2003 года
SLA
274 / / 08.08.2003
Цитата:
Originally posted by RomahA
Никак не объявлена...



Ты хочешь сказать, что у тебя нет такой функции? Должна же она где-то быть, если все компилируется. :) Если она подключается из DLL, то напиши как именно.

5.2K
10 декабря 2003 года
RomahA
7 / / 08.12.2003
Цитата:
Originally posted by SLA


Ты хочешь сказать, что у тебя нет такой функции? Должна же она где-то быть, если все компилируется. :) Если она подключается из DLL, то напиши как именно.



Нет, функция такая есть, но нигде не объявлена, она описана в теле программы...
cpp файл представлен в первом сообщении, а в хедере ничего по поводу этой функции не добавлял...

Слушай, если тебя не очень напрягает, может по аське свяжемся? =)

415
10 декабря 2003 года
SLA
274 / / 08.08.2003
Цитата:
Originally posted by RomahA
она описана в теле программы...



Сорри. Уже заметил, в самом первом посте.
Я завтра попробую разобраться, а то поздно уже. :)

Цитата:
Слушай, если тебя не очень напрягает, может по аське свяжемся? =)



У меня нет аськи, зато есть очень полезный линк (статья "Кейлоггер? Это просто!"):
http://www.uinc.ru/articles/zametki/001.shtml

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог