В чём бага? Пытаюсь отловить сообщение hook'ом...
//---------------------------------------------------------------------------
#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, такая же фигня! =(
Помогите плз, или подскажите альтернативный метод перехвата сообщений, лучше даже для конкретного окна обращаясь к нему через дескриптор...
Заранее спасибо!
hk = SetWindowsHookEx(WH_KEYBOARD,&HookProc, NULL, 0);
Ты прав, WinAPI изучал по Visual c++ helpy =)
Но функции ведь те же, и параметры...
А ещё какие-нить методе знаешь для перехвата сообщений?
Ошибка вылетает в этой строке:
hk = SetWindowsHookEx(WH_KEYBOARD,&HookProc, NULL, 0)
Компилятор ругается на твой HookProc. Попробуй в этой строке вместо &HookProc написать (int (__stdcall *)())HookProc , и попробуй скомпилировать.
Нет, не совсем так. В том то и дело.
Кстати, Borland C++BuilderX 1.0 на все 100% совместим с Visual C++.
А разве есть что-то кроме SetWindowsHookEx? :) Я других не знаю.
Просто не попадает в процедуру HookProc
я пробовал на другие собщения типа SH_MOUSE, прописывал функцию обратного вызова
MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
всё равно никакой реакции... =(((
Вот теперь код компилится, но нифига не работает =)
А как у тебя объявлена функция HookProc() ?
??? HookProc(???)
{
}
А как у тебя объявлена функция HookProc() ?
??? HookProc(???)
{
}
Никак не объявлена...
Короче задача такай, из определённого приложения вытащить сообщения посылаемые другому приложению... Скоро голова лопнет от этих Хуков =)
Увидеть бы паботающий код и желательно в обной прикладной программе, без подключения библиотек с описанием функций обратного вызова...
Никак не объявлена...
Ты хочешь сказать, что у тебя нет такой функции? Должна же она где-то быть, если все компилируется. :) Если она подключается из DLL, то напиши как именно.
Ты хочешь сказать, что у тебя нет такой функции? Должна же она где-то быть, если все компилируется. :) Если она подключается из DLL, то напиши как именно.
Нет, функция такая есть, но нигде не объявлена, она описана в теле программы...
cpp файл представлен в первом сообщении, а в хедере ничего по поводу этой функции не добавлял...
Слушай, если тебя не очень напрягает, может по аське свяжемся? =)
она описана в теле программы...
Сорри. Уже заметил, в самом первом посте.
Я завтра попробую разобраться, а то поздно уже. :)
У меня нет аськи, зато есть очень полезный линк (статья "Кейлоггер? Это просто!"):
http://www.uinc.ru/articles/zametki/001.shtml