一个有趣的问题(在线急等)

yxp233 2010-11-24 11:01:14
各位朋友,我想实现在按下键盘上的一个键的时候,比如alt键,另一个键也同时被激活,比如tab键,相当于我按alt键的时候,tab键也被按了一下,虽然我并没有用手去按tab键。我写了个代码框架,中间的if语句需要填激活tab键的代码,但是我不会,希望能得到你们的帮助,谢谢了!

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if(keyData==Keys.Alt)
{
?????
}
return base.ProcessCmdKey(ref msg, keyData);
}


...全文
371 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxp233 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yeaicc 的回复:]
C# code


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.RButton | Keys.ShiftKey | Keys.Alt))
{
……
[/Quote]多谢,不过结果显示的是 “R”, 不是“看吧,我执行了。”
机器人 2010-11-24
  • 打赏
  • 举报
回复

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Tab | Keys.Alt))
return base.ProcessCmdKey(ref msg, keyData);

if (Keys.Alt == (Keys.Modifiers & keyData))
{
SendKeys.SendWait("%{Tab}");
return true;
}

return base.ProcessCmdKey(ref msg, keyData);
}

colorall 2010-11-24
  • 打赏
  • 举报
回复
不行是因为你的Alt键判断不对



protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.RButton | Keys.ShiftKey | Keys.Alt))
{
SendKeys.Send("%{TAB}");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

yxp233 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 colorall 的回复:]
C# code

SendKeys.Send("%{TAB}");
return true;
[/Quote]好像还是不行
yeaicc 2010-11-24
  • 打赏
  • 举报
回复


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.RButton | Keys.ShiftKey | Keys.Alt))
{
MessageBox.Show("看吧,我执行了。");
SendKeys.Send(Keys.Tab.ToString());
}
else
MessageBox.Show(keyData.ToString());
return base.ProcessCmdKey(ref msg, keyData);
}

bloodish 2010-11-24
  • 打赏
  • 举报
回复
Alt键比较特殊,可以这样处理一下
msg.LParam第29个Bit位,表示是否按下Alt键,
因此可以把代表Key的WParam直接改成Tab键

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((keyData & Keys.Alt) == Keys.Alt)
{
//virtual key Tab = 0x09
msg.WParam = new IntPtr(0x09);
}
return base.ProcessCmdKey(ref msg, keyData);
}
colorall 2010-11-24
  • 打赏
  • 举报
回复

SendKeys.Send("%{TAB}");
return true;
yxp233 2010-11-24
  • 打赏
  • 举报
回复
好心人快帮帮忙阿。
yxp233 2010-11-24
  • 打赏
  • 举报
回复
这个问题很难解决吗??
ynnubs 2010-11-24
  • 打赏
  • 举报
回复
關注中。。。。
yxp233 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zjx198934 的回复:]
引用 3 楼 yxp233 的回复:
引用 2 楼 sprc_lcl 的回复:
try:
if(keyData==Keys.Alt)
{
SendKeys.Send(Keys.Tab.ToString());
}
试了一下,没反应阿


怎么测试的 你监听了Tab按下后的时间吗?
[/Quote]监听了,只有Alt键的纪录,没有Tab的
zjx198934 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yxp233 的回复:]
引用 2 楼 sprc_lcl 的回复:
try:
if(keyData==Keys.Alt)
{
SendKeys.Send(Keys.Tab.ToString());
}
试了一下,没反应阿
[/Quote]

怎么测试的 你监听了Tab按下后的时间吗?
  • 打赏
  • 举报
回复
不知道干啥用的、 顶顶
yxp233 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qiang94614 的回复:]
学习,帮Up~
[/Quote]谢谢
subxli 2010-11-24
  • 打赏
  • 举报
回复
确实蛮有趣啊
yxp233 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sprc_lcl 的回复:]
try:
if(keyData==Keys.Alt)
{
SendKeys.Send(Keys.Tab.ToString());
}
[/Quote]试了一下,没反应阿
sprc_lcl 2010-11-24
  • 打赏
  • 举报
回复
try:
if(keyData==Keys.Alt)
{
SendKeys.Send(Keys.Tab.ToString());
}
qiang94614 2010-11-24
  • 打赏
  • 举报
回复
学习,帮Up~
yxp233 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 lijun84 的回复:]
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
i……
[/Quote]哇,你的code解决了问题,谢谢了。请问如果我想让光标从下往上走该怎么办?还有回车键的keybd_event(?,?,?,?)的四个值是多少呢?
mooniscrazy 2010-11-24
  • 打赏
  • 举报
回复
给这个窗口发送键盘按下的消息就可以了。
这个方法可以用来给任何窗口模拟键盘按下的消息。即使这个窗口不是用c#写的。
具体参看SendMessage函数。
加载更多回复(8)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧