c# - Sendkeys 无限循环
问题描述
我正在使用 RawInput 方法来拦截全局键盘击键然后将字符串发送到聚焦的前景窗口,我的问题是当我使用时sendkeys.send()
我得到一个无限循环(每次触发事件)
我试图删除事件然后添加它但没有用,我在一些主题上发现问题出现了,因为我发送字符串的地方仍然集中但我需要它仍然集中,例如我是什么正在做 :
- 用户在 facebook messenger 中按 numpad0
- 我用我自己的字符串替换了 numpad0
更新
public static bool Keypressed = false;
private void OnKeyPressed(object sender, RawInputEventArg e)
{
if (Keypressed){Keypressed=false;return;}
if (cpt == 0)
{
cpt++;
Console.WriteLine(e.KeyPressEvent.Name);
//Check the Device name first !!!!
//if(e.KeyPressEvent.Name.Contains(Settings.Default.DeviceName) || Settings.Default.DeviceName.Contains(e.KeyPressEvent.Name)) { }
String ActiveProcess = ActiveApp.getActiveProccess();
switch (ActiveProcess)
{
case "chrome":
if(API.getChromeUrl().Contains("facebook") || API.getChromeUrl().Contains("messenger"))
{
SendKeys.Send("1");
//Clipboard.SetText(""+Previous);
Console.WriteLine(API.getChromeUrl());
Keypressed = true;
// String Previous = Clipboard.GetText();
// Clipboard.SetText(FBEmo.numpad0);
}
break;
case "mozzila":
break;
case "Skype":
break;
case "Viber":
break;
}
Console.WriteLine(ActiveProcess);
解决方案
通过使用InputSimulator而不是 Sendkeys.Send() 可以正常工作。
InputSimulator cmd = new InputSimulator();
if (e.KeyPressEvent.KeyPressState.Equals("BREAK"))
{
cpt = 0;
Console.WriteLine(e.KeyPressEvent.Name);
//Check the Device name first !!!!
//if(e.KeyPressEvent.Name.Contains(Settings.Default.DeviceName) || Settings.Default.DeviceName.Contains(e.KeyPressEvent.Name)) { }
String ActiveProcess = ActiveApp.getActiveProccess();
switch (ActiveProcess)
{
case "chrome":
if(API.getChromeUrl().Contains("facebook") || API.getChromeUrl().Contains("messenger"))
{
switch (e.KeyPressEvent.VKeyName)
{
case "NUMPAD0":
cmd.Keyboard.TextEntry(FBEmo.numpad0);
break;
推荐阅读
- xslt - XSLT - 我有一个标头值映射并想在下面映射一个行值
- excel - 在哪里可以找到用于将其与 VBA 连接的 SAP 系统连接
- javascript - 如何创建新行或中断数组?
- xcode - UDUNITS-2 ---> clang:错误:没有这样的文件或目录:'_REENTRANT'
- graphql - GraphQL 枚举类型会自动解析它们的值吗?
- asp.net-mvc - ASP.NET MVC 电子邮件尝试捕获异常
- xml - ElementTree Python3 中的 utf-8 编码 XML 文本
- angular - Angular Pipe 未检测到具有多个参数的更改
- firebase - Firebase 身份验证自定义声明和没有写入权限的 Firestore 文档有什么区别?
- javascript - 如何检测 html 中嵌入网页的标题?