当按下一个键的时候,触发另一个键的功能。如按下回车,相当于按下Tab键
最好能写出主要的函数代码

解决方案 »

  1.   

    应该没问题
    提供给你一个思路:hook 拦截 回车键的 消息,
    然后用SendMessage()函数发一个tab 键的消息。。
      

  2.   

    http://www.vckbase.com/document/listdoc.asp?mclsid=13&sclsid=1309
      

  3.   

    呵呵,我知道你的Hook已经做好了,
    只要在Hook函数中判断当前按键的虚拟键码,如果是VK_RETURN就发送三个消息
    SendMessage(WM_KEYDOWN, VK_TAB);
    SendMessage(WM_CHAR, VK_TAB);
    SendMessage(WM_KEYUP, VK_TAB);
    就行了
      

  4.   

    to overwind_slash(残翅迎风) 
    还想请教你,你给的函数
       SendMessage(WM_KEYDOWN, VK_TAB);已经被封装过了
    能不能用API函数SendMessage,就是带四个参数的
    因为我没有在vc的环境下写的,只是用了它的编译器
      

  5.   

    那就这样
    HWND hwnd = GetSafeHwnd();
    ::SendMessage(hwnd, WM_KEYDOWN, VK_TAB, 0);
    ::SendMessage(hwnd, WM_CHAR, VK_TAB, 0);
    ::SendMessage(hwnd, WM_KEYUP, VK_TAB, 0);
      

  6.   

    to overwind_slash(残翅迎风) 
    GetSafeHwnd()好像也只能在vc中使用
      

  7.   

    Sorry, Sorry! 不好意思

    hwnd = CreateWindow (...) ;的返回值,呵呵,老糊涂了
      

  8.   

    to: overwind_slash(残翅迎风) 
    我使用FindWindow()得到一个窗口,但是不能生效
    我有用了keybe_event()好像还是不能生效
    老兄,我把dll文件放在这儿,有空帮我看看
    #include <windows.h>
    #include <stdio.h>
    #include <assert.h>static HHOOK hkb=NULL;
    HINSTANCE hins; BOOL APIENTRY DllMain( HANDLE hModule,DWORD  ul_reason_for_call, LPVOID Reserved)
    {
        hins=(HINSTANCE)hModule;
        return TRUE;
    }
    LRESULT KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
          if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
    {
    switch(wParam)
    {
    case VK_TAB:
    MessageBox(NULL,"from tab","",0);
    break; case '0':
                                         HWND hwnd;
                                         hwnd =FindWindow(NULL,"a.txt - 记事本");
                                         assert(hwnd);
                                         SendMessage(hwnd, WM_KEYDOWN, VK_TAB, 0);
                                         SendMessage(hwnd, WM_CHAR, VK_TAB, 0);
                                         SendMessage(hwnd, WM_KEYUP, VK_TAB, 0);
                                         break;
    }
    }
         LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam ); 
         return RetVal;
    }
    BOOL installhook()
    {
    hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
    if(!hkb)
    MessageBox(NULL,"error","",NULL);
    return TRUE;
    }
    BOOL UnHook()
    {   
    BOOL unhooked = UnhookWindowsHookEx(hkb);
    return unhooked;
    }
      

  9.   

    我刚刚做了很多试验发现了你SendMessage无效的原因,你用FindWindow得到的是记事本框架窗口的句柄,而不是里面View的句柄,所以你的WM_KEYDOWN消息全部发给了记事本的框架窗口,View里自然不会有改变,至于怎么把消息发送至View,我试好了告诉你。
      

  10.   


    HWND hwnd;
    hwnd =FindWindow(NULL,"a.txt - 记事本");
    assert(hwnd);
    SendMessage(hwnd, WM_KEYDOWN, VK_TAB, 0);
    SendMessage(hwnd, WM_CHAR, VK_TAB, 0);
    SendMessage(hwnd, WM_KEYUP, VK_TAB, 0);
    改成
    HWND hwnd;
    HWND hwnd = ::FindWindow(NULL, "Untitled - Notepad");
    assert(hwnd);
    ::EnumChildWindows(hwnd, EnumChildProc,NULL);然后再加上一个全局函数
    BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 

    ::PostMessage(hwndChild, WM_KEYDOWN, VK_RETURN, 0);
        return TRUE; 
    } 就可以了
      

  11.   

    email:[email protected]
    msn:[email protected]