그냥 VC처럼 messagemap을 쓰시면 됩니다.
그밖에도 여러가지 방법이 있지만...
//Form클래스에 header 파일에 다음과 같이 하구요
class TForm2 : public TForm
{
__published: // IDE-managed Components
TButton *Btn_InstallHook;
TButton *Btn_UnInstallHook;
void __fastcall Btn_InstallHookClick(TObject *Sender);
void __fastcall Btn_UnInstallHookClick(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
void __fastcall WMUser1(TMessage &Msg); //호출되는 메소드
//메세지 맵
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_USER+1,TMessage,WMUser1)
END_MESSAGE_MAP(TForm)
};
//cpp파일에는 대충 다음과 같이 하면 될듯 하네요..
HINSTANCE g_Inst;
void __fastcall TForm2::Btn_InstallHookClick(TObject *Sender)
{
g_Inst=LoadLibraryA("HookDll.dll");
typedef void __stdcall ( *TFuncInstallHook )(HWND hWnd);
TFuncInstallHook InstallHook=(TFuncInstallHook)GetProcAddress(g_Inst,"InstallHook");
if(InstallHook)InstallHook(this->Handle);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Btn_UnInstallHookClick(TObject *Sender)
{
typedef void (*TFuncUnInstallHook)();
TFuncUnInstallHook UnInstallHook=(TFuncUnInstallHook)GetProcAddress(g_Inst,"UnInstallHook");
if(UnInstallHook)UnInstallHook();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::WMUser1(TMessage &Msg)
{
if(Msg.Msg==(WM_USER+1))
{
//어쩌고 저쩌고..
}
}
그밖에도 메세지를 받는 방법은 WndProc를 오버라이딩 하는 방법도 있구요
WindowProc설정을 바꾸는 등의 sub-classing방법도 있구요 여러가지 가 있겠네요...
그럼..
후킹초보 님이 쓰신 글 :
: LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)
: {
: if (nCode>=0) {
: SendMessage(hWndBeeper,WM_USER+1,wParam,lParam);
: }
: return CallNextHookEx(hKeyHook,nCode,wParam,lParam);
: }
: extern "C" __declspec(dllexport) void InstallHook(HWND hWnd)
: {
: hWndBeeper=hWnd;
: hKeyHook=SetWindowsHookEx(WH_KEYBOARD,KeyHookProc,hModule,NULL);
: }
: extern "C" __declspec(dllexport) void UninstallHook()
: {
: UnhookWindowsHookEx(hKeyHook);
: }
: BOOL WINAPI DllMain(HINSTANCE hInst, DWORD fdwReason, LPVOID lpRes)
: {
: switch (fdwReason) {
: case DLL_PROCESS_ATTACH:
: hModule=hInst;
: break;
: case DLL_PROCESS_DETACH:
: break;
: }
: return TRUE;
: }
: 위에보면 WM_USER+1 으로 메시지보내자나요?
: 빌더에선 이게 사용가능한가요? 빌더에서하려면 vcl방식이아니어야하나요 ㅜ.ㅜ
:
: 그대로해서 dll 파일을 만들긴햇는데
: 메시지를 어디서 받는지 모르겟어요
: 설치만 해놓고 인스펙터의 이벤트의 OnKeyDown 에서 그대로
: 사용하면되는건가요 저렇게해노코 메시지는 어디서받아서처리하는지 모르겟어요;;
: 메시지를어디서받는디를 몰라서요;;