在MS Office中如何可能我去编程覆盖热键?重写微软Office热键
我有一个全球热键(CTRL + SHIFT + 1)为我的应用程序在其他应用程序,但似乎迷路,当我在任何MS Office应用程序中尝试它。当我关闭我的应用程序时,热键在MS Office中再次运行,因为它们应该是这样。
在MS Office中如何可能我去编程覆盖热键?重写微软Office热键
我有一个全球热键(CTRL + SHIFT + 1)为我的应用程序在其他应用程序,但似乎迷路,当我在任何MS Office应用程序中尝试它。当我关闭我的应用程序时,热键在MS Office中再次运行,因为它们应该是这样。
你必须去与调用SetWindowsHookEx并设置dwThreadId 0
所以,你可以连接所有线程中的所有键盘输入(通过这种方式,可以使一个键盘记录..)
请阅读http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx
和
的情况下,有人在这里把这个要查看的其他回答。这也描述了一个钩子。
这是可能做到这一点使用键盘钩子。这方面的一个良好的钩类可以在此CodeProject Article
发现使用以下代码将防止WIN + LEFT或WIN + RIGHT的发生。你可以用它来覆盖你想要的任何键。
这甚至会覆盖您通过RegisterHotKey
赢API加入热键。
一旦你在你的项目中这些类,你可以像下面添加处理程序的静态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))
{
return true;
}
else
{
return false;
}
}
为什么`Python`标签? – user225312 2011-02-08 15:50:02