获取键盘消息有关问题

求助获取键盘消息问题
我想实现,在任意窗口输入键盘消息,在指定的edit下显示,如何利用全局键盘钩子实现?尽量展示代码!!

------解决方案--------------------
最简单的:
HHOOK g_hHook;

//---------------------------------------
long CALLBACK KeyProc(int code, WPARAM wParam, LPARAM lParam)
{
    KBDLLHOOKSTRUCT *key = (KBDLLHOOKSTRUCT *)lParam;
    Form1->Edit1->Text = key->vkCode;

    return 0;
}

// ---------------------------------------
bool InstallHook()
{
    if (!g_hHook)
        g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyProc, HInstance, NULL);

    return g_hHook != NULL;
}

// ---------------------------------------
bool UninstallHook()
{
    if (g_hHook && UnhookWindowsHookEx(g_hHook))
        g_hHook = NULL;

    return g_hHook == NULL;
}

// ---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    InstallHook();
}

// ---------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    UninstallHook();
}

------解决方案--------------------
老妖的代码最好,够简洁获取键盘消息有关问题

再加个判断避免打印两次vkCode好看点
if (key->flags == LLKHF_UP)
    Form1->Edit1->Text = key->vkCode;
------解决方案--------------------
你要的是全局钩子,用啥dll啊,又不是钩特定进程。
你那代码,得在每个函数前表面__stdcall,比如
LRESULT __stdcall CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam);