Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C禁用/覆盖Windows 10热键#_C#_Windows 10_Hotkeys - Fatal编程技术网

C# 如何使用C禁用/覆盖Windows 10热键#

C# 如何使用C禁用/覆盖Windows 10热键#,c#,windows-10,hotkeys,C#,Windows 10,Hotkeys,我正在尝试注册某些热键,但无法注册,因为它们是Windows默认设置 CTRL+WIN+1 minimizes the current window. I'd like it to do something else. I'd like to completely disable WIN+LEFT/RIGHT. I'm also trying to handle the CTRL+WIN+Arrow in my own virtual desktop manager. 如有必要,必须使用c#

我正在尝试注册某些热键,但无法注册,因为它们是Windows默认设置

CTRL+WIN+1 minimizes the current window. I'd like it to do something else.
I'd like to completely disable WIN+LEFT/RIGHT.
I'm also trying to handle the CTRL+WIN+Arrow in my own virtual desktop manager.

如有必要,必须使用c#和Win32 API完成此操作。它绝对不能使用自动热键

我找到的每一页都描述了如何使用自动热键来实现这一点

我想发布代码,但我真的不知道从哪里开始。我使用Win32注册热键。我想有办法覆盖它们,但我找不到任何信息


有人有主意吗?

使用键盘挂钩可以做到这一点。这方面的一个很好的钩子类可以在这个

使用以下代码将防止WIN+LEFT或WIN+RIGHT发生。您可以使用此选项覆盖您想要的任何键

这甚至会覆盖通过
RegisterHotKey
winapi添加的热键

一旦在项目中有了这些类,就可以向静态
HookManager
类添加处理程序,如下所示

//It's worth noting here that if you subscribe to the Key_Press event then it will break the international accent keys.
HookManager.KeyPress += HookManager_KeyPress;
HookManager.KeyDown += HookManager_KeyDown;
HookManager.KeyUp += HookManager_KeyUp;
您还可以添加鼠标事件,但为了简单起见,我只展示了键盘挂钩

我还创建了一个通用列表,以便知道哪些键当前处于关闭状态,并在
KeyUp
事件中将这些键从列表中删除

public static List<Keys> keysDown = new List<Keys>();
private static void HookManager_KeyDown(object sender, KeyEventArgs e)
        {
            //Used for overriding the Windows default hotkeys
            if(keysDown.Contains(e.KeyCode) == false)
            {
                keysDown.Add(e.KeyCode);
            }

            if (e.KeyCode == Keys.Right && WIN())
            {
                e.Handled = true;
                //Do what you want when this key combination is pressed
            }
            else if (e.KeyCode == Keys.Left && WIN())
            {
                e.Handled = true;
                //Do what you want when this key combination is pressed
            }

        }

        private static void HookManager_KeyUp(object sender, KeyEventArgs e)
        {
            //Used for overriding the Windows default hotkeys
            while(keysDown.Contains(e.KeyCode))
            {
                keysDown.Remove(e.KeyCode);
            }
        }

        private static void HookManager_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Used for overriding the Windows default hotkeys

        }

        public static bool CTRL()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.LControlKey) || 
                keysDown.Contains(Keys.RControlKey) || 
                keysDown.Contains(Keys.Control) || 
                keysDown.Contains(Keys.ControlKey))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static bool SHIFT()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.LShiftKey) || 
                keysDown.Contains(Keys.RShiftKey) ||
                keysDown.Contains(Keys.Shift) ||
                keysDown.Contains(Keys.ShiftKey))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static bool WIN()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.LWin) || 
                keysDown.Contains(Keys.RWin))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static bool ALT()
    {
        //return keysDown.Contains(Keys.LShiftKey)
        if (keysDown.Contains(Keys.Alt) ||
            keysDown.Contains(Keys.LMenu) ||
            keysDown.Contains(Keys.RMenu))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
publicstaticlist-keysDown=newlist();
私有静态void HookManager_KeyDown(对象发送方,KeyEventArgs e)
{
//用于覆盖Windows默认热键
if(keysDown.Contains)(例如KeyCode)=false)
{
keysDown.Add(例如KeyCode);
}
如果(e.KeyCode==Keys.Right&&WIN())
{
e、 已处理=正确;
//按此组合键时,执行所需操作
}
else if(e.KeyCode==Keys.Left&&WIN())
{
e、 已处理=正确;
//按此组合键时,执行所需操作
}
}
私有静态void HookManager_KeyUp(对象发送方,KeyEventArgs e)
{
//用于覆盖Windows默认热键
while(keysDown.Contains(例如KeyCode))
{
keysDown.删除(例如KeyCode);
}
}
私有静态void HookManager_KeyPress(对象发送器,KeyPressEventArgs e)
{
//用于覆盖Windows默认热键
}
公共静态boolctrl()
{
//return Keys down.Contains(Keys.LShiftKey)
if(keysDown.Contains(Keys.LControlKey)|
keysDown.Contains(Keys.RControlKey)|
keysDown.Contains(Keys.Control)|
keysDown.Contains(Keys.ControlKey))
{
返回true;
}
其他的
{
返回false;
}
}
公共静态布尔移位()
{
//return Keys down.Contains(Keys.LShiftKey)
if(keysDown.Contains(Keys.LShiftKey)|
keysDown.Contains(Keys.RSHIFT KEY)||
keysDown.Contains(Keys.Shift)||
keysDown.Contains(Keys.ShiftKey))
{
返回true;
}
其他的
{
返回false;
}
}
公共静态bool-WIN()
{
//return Keys down.Contains(Keys.LShiftKey)
if(keysDown.Contains(Keys.LWin)|
keysDown.Contains(Keys.RWin))
{
返回true;
}
其他的
{
返回false;
}
}
公共静态bool ALT()
{
//return Keys down.Contains(Keys.LShiftKey)
if(keysDown.Contains)(Keys.Alt)||
keysDown.Contains(Keys.LMenu)||
keysDown.Contains(Keys.RMenu))
{
返回true;
}
其他的
{
返回false;
}
}

可以使用键盘挂钩来完成此操作。这方面的一个很好的钩子类可以在这个

使用以下代码将防止WIN+LEFT或WIN+RIGHT发生。您可以使用此选项覆盖所需的任何键

这甚至会覆盖通过
RegisterHotKey
winapi添加的热键

一旦在项目中有了这些类,就可以向静态
HookManager
类添加处理程序,如下所示

//It's worth noting here that if you subscribe to the Key_Press event then it will break the international accent keys.
HookManager.KeyPress += HookManager_KeyPress;
HookManager.KeyDown += HookManager_KeyDown;
HookManager.KeyUp += HookManager_KeyUp;
您还可以添加鼠标事件,但为了简单起见,我只展示了键盘挂钩

我还创建了一个通用列表,以便知道哪些键当前处于关闭状态,并在
KeyUp
事件中将这些键从列表中删除

public static List<Keys> keysDown = new List<Keys>();
private static void HookManager_KeyDown(object sender, KeyEventArgs e)
        {
            //Used for overriding the Windows default hotkeys
            if(keysDown.Contains(e.KeyCode) == false)
            {
                keysDown.Add(e.KeyCode);
            }

            if (e.KeyCode == Keys.Right && WIN())
            {
                e.Handled = true;
                //Do what you want when this key combination is pressed
            }
            else if (e.KeyCode == Keys.Left && WIN())
            {
                e.Handled = true;
                //Do what you want when this key combination is pressed
            }

        }

        private static void HookManager_KeyUp(object sender, KeyEventArgs e)
        {
            //Used for overriding the Windows default hotkeys
            while(keysDown.Contains(e.KeyCode))
            {
                keysDown.Remove(e.KeyCode);
            }
        }

        private static void HookManager_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Used for overriding the Windows default hotkeys

        }

        public static bool CTRL()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.LControlKey) || 
                keysDown.Contains(Keys.RControlKey) || 
                keysDown.Contains(Keys.Control) || 
                keysDown.Contains(Keys.ControlKey))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static bool SHIFT()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.LShiftKey) || 
                keysDown.Contains(Keys.RShiftKey) ||
                keysDown.Contains(Keys.Shift) ||
                keysDown.Contains(Keys.ShiftKey))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static bool WIN()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.LWin) || 
                keysDown.Contains(Keys.RWin))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static bool ALT()
    {
        //return keysDown.Contains(Keys.LShiftKey)
        if (keysDown.Contains(Keys.Alt) ||
            keysDown.Contains(Keys.LMenu) ||
            keysDown.Contains(Keys.RMenu))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
publicstaticlist-keysDown=newlist();
私有静态void HookManager_KeyDown(对象发送方,KeyEventArgs e)
{
//用于覆盖Windows默认热键
if(keysDown.Contains)(例如KeyCode)=false)
{
keysDown.Add(例如KeyCode);
}
如果(e.KeyCode==Keys.Right&&WIN())
{
e、 已处理=正确;
//按此组合键时,执行所需操作
}
else if(e.KeyCode==Keys.Left&&WIN())
{
e、 已处理=正确;
//按此组合键时,执行所需操作
}
}
私有静态void HookManager_KeyUp(对象发送方,KeyEventArgs e)
{
//用于覆盖Windows默认热键
while(keysDown.Contains(例如KeyCode))
{
keysDown.删除(例如KeyCode);
}
}
私有静态void HookManager_KeyPress(对象发送器,KeyPressEventArgs e)
{
//用于覆盖Windows默认热键
}
公共静态boolctrl()
{
//return Keys down.Contains(Keys.LShiftKey)
if(keysDown.Contains(Keys.LControlKey)|
钥匙