如何使用c ++ / cli禁用键盘快捷键(alt + tab和alt + esc) [英] how to disable keyboard shortcut keys(alt+tab and alt+esc) using c++/cli

查看:105
本文介绍了如何使用c ++ / cli禁用键盘快捷键(alt + tab和alt + esc)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我想在我的项目中阻止短键(alt + tab和alt + esc)。我怎么能这样做c ++ / cli? 


谢谢..

解决方案

i发现了这段代码。但它给出了两个错误。任何人都可以建议我吗?


错误C3352:'LRESULT LowLevelKeyboardProc(INT,WPARAM,LPARAM)':指定的函数与委托类型'LRESULT(INT)不匹配,WPARAM,LPARAM)'¥
错误C2664:'SetWindowsHookExW':无法将参数2从'DelegateLowLevelKeyboardProc ^'转换为'HOOKPROC'


public:

       委托LRESULT DelegateLowLevelKeyboardProc(INT nCode,WPARAM wParam,LPARAM lParam);

    static DelegateLowLevelKeyboardProc ^ m_pLowLevelKeyboardProc;


LRESULT CALLBACK LowLevelKeyboardProc(INT nCode,WPARAM wParam,LPARAM lParam)

    {

        static BOOL fShiftPressed = FALSE;



        BOOL fHandled = FALSE;



        if(nCode == HC_ACTION)

        {

            KBDLLHOOKSTRUCT * pkbdllhook =(KBDLLHOOKSTRUCT *)lParam;



           开关(wParam)

            {

                case WM_SYSKEYDOWN:

                    switch(pkbdllhook-> vkCode)

                    {

                       案例VK_LSHIFT:

                       案例VK_RSHIFT:

                        {

                            //用户按下了shift键

                            fShiftPressed = TRUE;

                           休息;

                        }
                       案例VK_TAB:

                        {

                            if(pkbdllhook-> flags& LLKHF_ALTDOWN)

                            {

                                //用户按下Alt + Tab,执行AltTab热键处理程序

                                fHandled = TRUE;

                            }
                           休息;

                        }
                       案例VK_ESCAPE:

                        {

                            if(pkbdllhook-> flags& LLKHF_ALTDOWN)

                            {

                                //用户按下Escape,结束AltTab容器


                                //窗口未切换所选窗口

                                fHandled = TRUE;

                            }
                           休息;

                        }
                    }


                   休息;



               案例WM_KEYUP:

                case WM_SYSKEYUP:

                    switch(pkbdllhook-> vkCode)

                    {

                       案例VK_LMENU:

                       案例VK_RMENU:

                        {

                            //用户放开Alt键,结束AltTab容器

                            //窗口切换到所选窗口

                           休息;

                        }
                       案例VK_LSHIFT:

                       案例VK_RSHIFT:

                        {

                            //用户发布了换班钥匙

                            fShiftPressed = FALSE;

                           休息;

                        }
                    }


                   休息;

            }
        }
        return(fHandled?TRUE:CallNextHookEx(g_hKeyboardHook,nCode,wParam,lParam));

    }


         

         

    LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)

        {

           开关(uMsg)

            {

              案例WM_ACTIVATEAPP:

                    // g_bWindowActive用于控制是否通过键盘钩子过滤了Windows键。

                    if(wParam == TRUE)

                        Y'ouml; neticiMod  = true;          


                   否则


                        Y'ouml; neticiMod  = false;          


                   休息;

            }
           返回false;

        }




private:System :: Void AnaMenu_Load(System :: Object ^  sender,System :: EventArgs ^  e ){



            m_pLowLevelKeyboardProc = gcnew DelegateLowLevelKeyboardProc(& Fatura_Odeme_Demo :: AnaMenu :: LowLevelKeyboardProc);


            g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL,m_pLowLevelKeyboardProc,GetModuleHandle(NULL),0);


}


hi,

I want to block short keys(alt+tab and alt+esc) at my project. How can i do this c++/cli? 

thanks..

解决方案

i found this code. but it give two errors.Anyone can advise me?

error C3352: 'LRESULT LowLevelKeyboardProc(INT,WPARAM,LPARAM)' : the specified function does not match the delegate type 'LRESULT (INT,WPARAM,LPARAM)'
error C2664: 'SetWindowsHookExW' : cannot convert parameter 2 from 'DelegateLowLevelKeyboardProc ^' to 'HOOKPROC'

public:
        delegate LRESULT DelegateLowLevelKeyboardProc(INT nCode, WPARAM wParam, LPARAM lParam);
    static DelegateLowLevelKeyboardProc^ m_pLowLevelKeyboardProc;

LRESULT CALLBACK LowLevelKeyboardProc(INT nCode, WPARAM wParam, LPARAM lParam)
    {
        static BOOL fShiftPressed = FALSE;

        BOOL fHandled = FALSE;

        if (nCode == HC_ACTION)
        {
            KBDLLHOOKSTRUCT *pkbdllhook = (KBDLLHOOKSTRUCT *)lParam;

            switch (wParam)
            {
                case WM_SYSKEYDOWN:
                    switch (pkbdllhook->vkCode)
                    {
                        case VK_LSHIFT:
                        case VK_RSHIFT:
                        {
                            // the user pressed the shift key
                            fShiftPressed = TRUE;
                            break;
                        }
                        case VK_TAB:
                        {
                            if (pkbdllhook->flags & LLKHF_ALTDOWN)
                            {
                                // the user pressed Alt+Tab, execute AltTab hotkey handler
                                fHandled = TRUE;
                            }
                            break;
                        }
                        case VK_ESCAPE:
                        {
                            if (pkbdllhook->flags & LLKHF_ALTDOWN)
                            {
                                // the user pressed Escape, end the AltTab container
                                // window without switching the selected window
                                fHandled = TRUE;
                            }
                            break;
                        }
                    }

                    break;

                case WM_KEYUP:
                case WM_SYSKEYUP:
                    switch (pkbdllhook->vkCode)
                    {
                        case VK_LMENU:
                        case VK_RMENU:
                        {
                            // the user let go of the Alt key, end the AltTab container
                            // window switching to the selected window
                            break;
                        }
                        case VK_LSHIFT:
                        case VK_RSHIFT:
                        {
                            // the user released the shift key
                            fShiftPressed = FALSE;
                            break;
                        }
                    }

                    break;
            }
        }
        return (fHandled ? TRUE : CallNextHookEx(g_hKeyboardHook, nCode, wParam, lParam));
    }

         
         
    LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
        {
            switch( uMsg )
            {
               case WM_ACTIVATEAPP:
                    // g_bWindowActive is used to control if the Windows key is filtered by the keyboard hook or not.
                    if( wParam == TRUE )
                        YöneticiMod  = true;          
                    else
                        YöneticiMod  = false;          
                    break;
            }
            return false;
        }


private: System::Void AnaMenu_Load(System::Object^  sender, System::EventArgs^  e) {

            m_pLowLevelKeyboardProc = gcnew DelegateLowLevelKeyboardProc(&Fatura_Odeme_Demo::AnaMenu::LowLevelKeyboardProc);
            g_hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, m_pLowLevelKeyboardProc, GetModuleHandle(NULL), 0 );
}


这篇关于如何使用c ++ / cli禁用键盘快捷键(alt + tab和alt + esc)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆