可以用HOOK或子类化
如果只是捕获的话用HOOK比较方便,但要用代码代替可能就要用子类化了,但是只能用于已经得到窗口句柄的情况下,你查一下这几个函数的用法应该就行了
SetWindowsHook ,SetWindowLong 与 GetAsyncKeyState
以上只是我的想法,并没有实际做过

解决方案 »

  1.   

    呵呵,这个问题我刚解决,我想你指的是截获自己程序中的按键?要是这样的话请看:
    http://www.csdn.net/expert/topic/119/119578.shtm
    要是截全部进程的话只好架钩子了。
      

  2.   

    Ctrl+c这个嘛就是复制啊,剪贴板内容会有变化,你SetClipboardViewer监视剪贴板就应该、、能做些事情了..
      

  3.   

    give u a source
    #include "windows.h"
    #define VK_X 0x58
    int WINAPI WinMain (HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    if (!CreateMutex(NULL,TRUE,"No Previous Instance!"))
    {
    MessageBox(NULL,"创建Mutex失败!","NoPrev",MB_OK|MB_SYSTEMMODAL);
    return FALSE;
    }
    if (GetLastError()==ERROR_ALREADY_EXISTS)
    {
    MessageBox(NULL,"已有NoPrev的一个实例在运行, 当前实例将被终止!",
    "NoPrev",MB_OK|MB_SYSTEMMODAL);
    return FALSE;
    }
    if(!RegisterHotKey(NULL,0x00001,MOD_CONTROL|MOD_SHIFT,VK_X))
    {
    MessageBox(NULL,"注册热键Ctrl+Shift+X失败!",
    "NoPrev",MB_OK|MB_SYSTEMMODAL);
    return FALSE;
    }
    MessageBox(NULL,"NoPrev已启动!\n\n按下热键Ctrl+Shift+X将终止NoPrev.",
    "NoPrev",MB_OK|MB_SYSTEMMODAL);
    MSG msg;
    while (GetMessage(&msg,NULL,0,0))
    {
    switch (msg.message)
    {case WM_HOTKEY:
    if (int(msg.wParam)==0x0001)
    if (MessageBox(NULL,"终止NoPrev?",
    "NoPrev",MB_YESNO|MB_SYSTEMMODAL)==IDYES)
    return TRUE;
    }
    }
    return TRUE;
    }