如何使用c ++ / cli禁用键盘快捷键(alt + tab和alt + esc) [英] how to disable keyboard shortcut keys(alt+tab and alt+esc) using c++/cli
问题描述
我想在我的项目中阻止短键(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屋!