日期:2014-05-19  浏览次数:21209 次

WinForm中,如果实现拦截 Ctrl+Tab的组合键拦截
在一个Form中放一个TabControl,按下Ctrl+Tab,   TabControl中的TabPage就会按顺序切换.
可是我想把这个组合键拦截掉,而是根据一定的情况再响应;例如某个变量canChange的值为真时,才使切换生效.有什么办法呢?

------解决方案--------------------
Ctrl键属于NTDLL直接管理,ring3下没办法完全控制,需要写驱动...
------解决方案--------------------
相同的还有Alt和Delete
------解决方案--------------------
KeyDown
------解决方案--------------------
form1.keypreview=true;

private void Form1_KeyDown(object sender, KeyEventArgs e)
{

if( e.KeyData==(Keys.Tab | Keys.Control ))
{
if (this.ActiveControl == tabControl1)
{
e.Handled = true;
}
}

}

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

最新版本:20070212

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
------解决方案--------------------
用windows的消息循环,捕获到 Ctrl+Tab 的句柄掩码,如果收到,什么也不执行即可!!!

protected override void WndProc(ref Message m)
{
//
//响应消息
if (m.Msg == 0x4D)//在这里判断,Ctrl+Tab 的句柄掩码自己找找吧,如果等与什么也不执行即可!!!!
{

switch (recdPtr.m_data_type)
{
case 0x01: //注册包


break;
}

else
{
//缺省消息处理
base.WndProc (ref m);
}
}
------解决方案--------------------
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;//Ctrl的序号我不知道,你自己查查
const int SC_CLOSE = 256;//Tab的序号
if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE) ctrl+Tab
{
//什么也不执行,即可屏蔽 Ctrl + tab.把这个函数,复制在 窗体里即可,随便找个位置。构造函数下面也行

}
base.WndProc(ref m);
}

------解决方案--------------------
原来用hook实现过,你查一下相关资料吧
------解决方案--------------------
Ctrl+Tab组合的时候是响应的,key.
------解决方案--------------------
请问还有其它办法可以实现上述功能吗?
就着些,能实现就行,管那么多的。
------解决方案--------------------
在事件中写
你自己找Ctrl和Tab健
{
Keys a = e.KeyCode;
int rr = e.KeyValue;
e.SuppressKeyPress = (e.KeyCode == Keys.Space || e.KeyCode == Keys.OemBackslash ||
e.KeyCode == Keys.OemCloseBrackets || e.KeyCode == Keys.Oemcomma ||
e.KeyCode == Keys.OemOpenBrackets || e.KeyCode == Keys.OemPipe ||
e.KeyCode == Keys.Oemplus || e.KeyCode == Keys.OemQuestion || e.KeyCode == Keys.OemQuotes ||
e.KeyCode == Keys.OemSemicolon || e.KeyCode == Keys.Oemtilde || e.KeyCode == Keys.Multiply || e.KeyCode == Keys.LControlKey ||
e.KeyCode == Keys.Divide || e.KeyCode == Keys.Decimal || e.KeyCode == Keys.Subtract || e.KeyCode == Keys.RControlKey ||
e.KeyCode == Keys.A || e.KeyCode == Keys.Add || e.KeyCode == Keys.B ||
e.KeyCode == Keys.C || e.KeyCode == Keys.D || e.KeyCode == Keys.E || e.KeyCode == Keys.F ||
e.KeyCode == Keys.G || e.KeyCode == Keys.H || e.KeyCode == Keys.I || e.KeyCode == Keys.K ||