在写一键盘测试程序,要求做一个界面,按键盘上的健时,界面要反映按的是什么健,而且按下和松开要以不同颜色区分。
现其他健功能已经实现,就是win健不能实现颜色变化,用底层钩子屏蔽win健,只能让按下win健没反应,如何才能实现按下win健是一种颜色,松开是另一种颜色呢?
不知道问题又没有描述清楚?

解决方案 »

  1.   

    现在关键就是不知道如何在dll中定义自己的消息,然后发给界面,而且界面如何处理这个消息呢?
    在网上找了一个星期了,还是无法解决:(
      

  2.   

    通过设计一个dll导出函数将主窗口的句柄传入Dll,通过句柄发送消息
    GetAsyncKeyState(VK_LMENU)
    GetAsyncKeyState(VK_RMENU)
      

  3.   

    将界面句柄放入dll,将message传回句柄
      

  4.   

    to:orbit(走了走了) ( ) 
    pripor(蹲在墙头等红杏)
    能不能在具体点,我对这个不熟悉,当时这样想过,但传的消息收不到~
    谁能给个函数的原型?   将message传回句柄,用sendmessage传么?参数不知道怎么设?
    传回的消息在我处理其他键的WM_KEYDOWN,WM_KEYUP事件时处理么?
      

  5.   

    问题是要做到屏蔽win键的弹出,然后传消息给界面,界面能即时收到,并且根据WM_KEYDOWN,WM_KWYUP绘出不同颜色
      

  6.   

    对键盘事件进行判断,如果是win键,那么屏蔽它自身事件,发送你自己的时间给界面程序就好了!
      

  7.   

    to:
      wupangzi(无本之木) 呵呵,我现在就是不知道如何发送自己的事件给界面程序~
    我现在做到的就是是win键就返回~只把win键彻底屏蔽掉了
      

  8.   

    你要做的就是
    键盘事件 --〉在你的App中显示出来;你可以使用在系统中下一个键盘钩子或者日记记录钩子,
    简单处理的话,可以把你所要显示的DialogItem的句柄传入钩子DLL,
    获得键盘状态,再使用ToAssic函数转换一下,直接把装换后的字符串发送DialogItem去显示
    (WM_SETTEXT);有需要的话,自己定义消息去处理;
    End;
      

  9.   

    你在你的界面程序中定义一个自定义消息
    并在自定义消息处理函数中处理win键的颜色变化同时将界面的hwnd传递给dll在dll里面判断是否按住了win键,并发送消息给界面
    如下:::SendMessage(m_hFaceWnd,WM_WINKEY_PUSH,0,0)  //松下
    ::SendMessage(m_hFaceWnd,WM_WINKEY_PUSH,1,0)  //按住
      

  10.   

    to:
    stevecrisewu(月亮骑士) 
    我先试试,这个方法好像可行,但我就是一直实现不了 :(
      

  11.   

    捕获WM_KEYDOWN和WM_KEYUP,向界面发送自定义消息。不难的。
      

  12.   

    今天尝试了一下,加载dll时传入窗口的句柄,然后用sendmessage,但是界面程序好像收不到这个自定义消息,可能使我没处理好~,可是像窗口,句柄这些怎么调试啊?   他们并能输出显示啊,这样的话,是不是传对了我也不知道 :(
      

  13.   

    试一下PostMessage,和SendMessage一样
      

  14.   

    楼主给我发个邮件 我给个现成的你 VC6
    amziwei<<at>>sohu.com   <<at>> 改@
      

  15.   

    今天终于实现了发自定义消息给界面,但是只能收到winkey down 或者 up 的一种,
    不知道是不是处理自定义消息不能循环啊?
      

  16.   

    现在的问题是只能处理一个消息,要么处理down,要么up,我试过写两个自定义的消息处理函数,可是只有一个起作用。onmymessage1(WPARAM wParam, LPARAM lParam)
                        onmymessage2(WPARAM wParam, LPARAM lParam)
                        
                        on_message(wm_winekey_up,onmessage1)
                        on_message(wm_winkey_down,onmessage2)
    不会要用多线程吧,那就麻烦了呀。
      

  17.   

    谁告诉我一下,如何同时处理两个自定义消息呀?还是写两个dll,一个处理down,一个处理up??
      

  18.   

    http://topic.csdn.net/t/20041015/16/3460021.html
    楼主看一下这个贴
    另外哆嗦一句, 楼主见谅在问问题之前, 可以先搜索一下以前的贴子, 很多问题以前别人都问过了
    而且最重要的是, 这些问题或许都解决了.
    直接翻贴子可以帮你省下很多时间
      

  19.   

    http://search.csdn.net
    这个地址可以搜以前的贴子
    打开后, 个人建议搜索 "论坛" 子标签
      

  20.   

    TO amziwei(潜城) 
    谢谢。
    邮件我已经收到了,之前的帖子我也看过,但是还是没有我要实现的功能,只是实现了对WIN健的屏蔽,我要实现的是界面能即时响应WIN KEY的DOWN 或UP状态,屏蔽的话一个状态就可以了。现在虽然用自定义消息可以即时响应,但只能响应一个状态。
    TO kugou123(酷狗)(君看一叶舟,出没风波里)
    是我贴出的消息映射和自定义函数有问题吗?
      

  21.   

    LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
        BOOL fEatkeystroke = NULL;
        PKBDLLHOOKSTRUCT p = NULL;
        if (nCode == HC_ACTION)
        {
            switch (wParam)
            {
                case WM_KEYDOWN:
                case WM_SYSKEYDOWN:
                fEatkeystroke = (p->vkcode == vk_lwin)
                if (fEatkeystroke)
                sendmessage(glhTarWnd, wm_winkey_down, 0, 0);
                break;
                case WM_KEYUP:
                case WM_SYSKEYUP:
                fEatkeystroke = (p->vkcode == vk_lwin)
                if (fEatkeystroke)
                sendmessage(glhTarWnd, wm_winkey_UP, 0, 0)
        }
    }
    WM_WINKEY_DOWN WM_WINKEY_UP为自定义消息,在界面中,用onmymessage1(WPARAM wParam, LPARAM lParam)
                        onmymessage2(WPARAM wParam, LPARAM lParam)
                        
                        on_message(wm_winekey_up,onmessage1)
                        on_message(wm_winkey_down,onmessage2)。但是好像只有一个起作用了,不知道能不能这样处理消息。
      

  22.   

    "邮件我已经收到了,之前的帖子我也看过,但是还是没有我要实现的功能,只是实现了对WIN健的屏蔽,我要实现的是界面能即时响应WIN KEY的DOWN 或UP状态,屏蔽的话一个状态就可以了"
    我改了一下, 重新发了一个邮件给你, 希望可以帮到你
    里面实现了 Win 和 Tab 键按下和弹起状态的钩取, 再发送消息到主程序
    其它键依样画葫芦即可