我想要捕获正在键入的内容并以较慢的速率释放它。换句话说,如果有人以每分钟100次的速度打字,我希望他们输入的文字只能以每周60次的速度出现。
我一直把我的代码基于this article。
CallNextHookEx(_hookID, nCode, wParam, lParam);
确定密钥是否出现在应用程序上。我试过制作这样的自定义类:
public class KeyOutput
{
public int vkcode;
public int nCode;
public IntPtr wParam;
public IntPtr lParam;
public KeyOutput(int in_vkcode, int in_code, IntPtr in_wParam, IntPtr in_lParam)
{
vkcode = in_vkcode;
nCode = in_code;
wParam = in_wParam;
lParam = in_lParam;
}
public int Getvkcode
{
get
{
return vkcode;
}
}
public int Getcode
{
get
{
return nCode;
}
}
public IntPtr GetwParam
{
get
{
return wParam;
}
}
public IntPtr GetlParam
{
get
{
return lParam;
}
}
}
我希望通过保存nCode,wParam,lParam我可以简单地调用CallNextHookEx
并显示该字符。当我试图遍历List<KeyOutput>
中的项目时,它只显示被按下的最后一个字符而不显示其余字符。
我已经像这样修改了HookCallback
(当前正在输入文字时显示文字):
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
KeyOutput key = new KeyOutput(vkCode, nCode, wParam, lParam);
listout.Add(key);
Console.WriteLine((Keys)vkCode);
}
if (listout.Count == 8)
{
foreach (KeyOutput key in listout)
{
Console.WriteLine((Keys)key.Getvkcode);
CallNextHookEx(_hookID, key.Getcode, key.GetwParam, key.GetlParam);
}
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
if(listout.Count == 8)
是任意的,除了测试之外,服务器没有用处。
感谢您的帮助!