Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SendInput无法将enterkey发送到特定程序_C#_Sendkeys_Sendinput - Fatal编程技术网

C# SendInput无法将enterkey发送到特定程序

C# SendInput无法将enterkey发送到特定程序,c#,sendkeys,sendinput,C#,Sendkeys,Sendinput,我创建了一个程序,可以在游戏中向聊天室发送文本。 在我使用Sendkeys.SendWait(“我的文本”)之前,游戏有一个更新很遗憾,这不再有效 过了一会儿,我发现了一个问题。使用SendInput,这个问题的答案使它工作,除了激活聊天室的enter键 我的代码通过按下按钮激活,然后它将选择正确的流程 public void BringMainWindowToFront(string processName) { Process bProcess = Process.G

我创建了一个程序,可以在游戏中向聊天室发送文本。 在我使用Sendkeys.SendWait(“我的文本”)之前,游戏有一个更新很遗憾,这不再有效

过了一会儿,我发现了一个问题。使用SendInput,这个问题的答案使它工作,除了激活聊天室的enter键

我的代码通过按下按钮激活,然后它将选择正确的流程

   public void BringMainWindowToFront(string processName)
    {

    Process bProcess = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(processName)).FirstOrDefault();
    
    if (bProcess != null)
    {
        if (bProcess.MainWindowHandle == IntPtr.Zero)
        {
            ShowWindow(bProcess.Handle, ShowWindowEnum.Restore);
        }
        SetForegroundWindow(bProcess.MainWindowHandle);
    }
}
之后我调用TypeAll,这将为聊天输入所有字符

        private void TypeAll(string text)
    {
        IDictionary<string, string> lettersToScanCode = new Dictionary<string, string>();
        lettersToScanCode.Add("a", "KEY_A"); //This Dictionary translates the inputkeys to 
                                               the exact enum. 
        lettersToScanCode.Add("b", "KEY_B");
        lettersToScanCode.Add("c", "KEY_C");
        lettersToScanCode.Add("d", "KEY_D");
        lettersToScanCode.Add("e", "KEY_E");
        lettersToScanCode.Add("f", "KEY_F");
        lettersToScanCode.Add("g", "KEY_G");
        lettersToScanCode.Add("h", "KEY_H");
        lettersToScanCode.Add("i", "KEY_I");
        lettersToScanCode.Add("j", "KEY_J");
        lettersToScanCode.Add("k", "KEY_K");
        lettersToScanCode.Add("l", "KEY_L");
        lettersToScanCode.Add("m", "KEY_M");
        lettersToScanCode.Add("n", "KEY_N");
        lettersToScanCode.Add("o", "KEY_O");
        lettersToScanCode.Add("p", "KEY_P");
        lettersToScanCode.Add("q", "KEY_Q");
        lettersToScanCode.Add("r", "KEY_R");
        lettersToScanCode.Add("s", "KEY_S");
        lettersToScanCode.Add("t", "KEY_T");
        lettersToScanCode.Add("u", "KEY_U");
        lettersToScanCode.Add("v", "KEY_V");
        lettersToScanCode.Add("w", "KEY_W");
        lettersToScanCode.Add("x", "KEY_X");
        lettersToScanCode.Add("y", "KEY_y");
        lettersToScanCode.Add("z", "KEY_Z");
        lettersToScanCode.Add(":", "SEPARATOR");
        lettersToScanCode.Add(" ", "SPACE");
        lettersToScanCode.Add("0", "KEY_0");
        lettersToScanCode.Add("1", "KEY_1");
        lettersToScanCode.Add("2", "KEY_2");
        lettersToScanCode.Add("3", "KEY_3");
        lettersToScanCode.Add("4", "KEY_4");
        lettersToScanCode.Add("5", "KEY_5");
        lettersToScanCode.Add("6", "KEY_6");
        lettersToScanCode.Add("7", "KEY_7");
        lettersToScanCode.Add("8", "KEY_8");
        lettersToScanCode.Add("9", "KEY_9");       

        Send(ScanCodeShort.RETURN);  //Here I send the enter key so I open the chatbox

        char[] characters = text.ToCharArray(); //This foreach will send all the text.
        foreach (char i in characters)
        {
            string newI = i.ToString().ToLower();
            string str = lettersToScanCode[newI];
            Enum.TryParse(str, out ScanCodeShort test);
            Send(test);
        }
    }
private void TypeAll(字符串文本)
{
IDictionary letstoscancode=新字典();
lettersToScanCode.Add(“a”,“KEY_a”);//此字典将输入键转换为
确切的枚举数。
字母扫描代码。添加(“b”,“键b”);
字母扫描代码。添加(“c”,“键c”);
字母扫描代码。添加(“d”,“键d”);
字母扫描代码。添加(“e”,“KEY_e”);
字母扫描代码。添加(“f”,“键f”);
字母扫描代码。添加(“g”,“键g”);
字母扫描代码。添加(“h”,“键h”);
字母扫描代码。添加(“i”,“KEY_i”);
字母扫描代码。添加(“j”,“KEY_j”);
字母扫描代码。添加(“k”,“KEY_k”);
字母扫描代码。添加(“l”、“KEY_l”);
字母扫描代码。添加(“m”,“键m”);
字母扫描代码。添加(“n”,“KEY_n”);
字母扫描代码。添加(“o”,“KEY_o”);
字母扫描代码。添加(“p”,“键p”);
字母扫描代码。添加(“q”、“KEY_q”);
字母扫描代码。添加(“r”,“键r”);
字母扫描代码。添加(“s”、“键”);
字母扫描代码。添加(“t”、“键”);
字母扫描代码。添加(“u”,“键u”);
字母扫描代码。添加(“v”,“键v”);
字母扫描代码。添加(“w”,“KEY_w”);
字母扫描代码。添加(“x”,“键x”);
字母扫描代码。添加(“y”,“键y”);
字母扫描代码。添加(“z”,“键z”);
添加(“:”,“分隔符”);
添加(“,”空格“);
字母扫描代码。添加(“0”,“键0”);
字母扫描代码。添加(“1”、“1号键”);
字母扫描代码。添加(“2”,“键2”);
字母扫描代码。添加(“3”,“键3”);
字母扫描代码。添加(“4”,“键4”);
字母扫描代码。添加(“5”,“键5”);
字母扫描代码。添加(“6”,“6号键”);
字母扫描代码。添加(“7”,“图例7”);
字母扫描代码。添加(“8”,“8号键”);
字母扫描代码。添加(“9”,“键9”);
Send(ScanCodeShort.RETURN);//这里我发送了回车键,所以我打开了聊天框
char[]characters=text.ToCharArray();//此foreach将发送所有文本。
foreach(字符i)
{
字符串newI=i.ToString().ToLower();
字符串str=lettersToScanCode[newI];
TryParse计数(str,out-ScanCodeShort测试);
发送(测试);
}
}
是否有其他方法调用enter键? 或者让回车键按的时间长一点,这样游戏就可以看到它被按下了。

使用两个(丑陋的)线程。在这里睡觉游戏看到进入,它工作正常

        Thread.Sleep(100);
        Send(ScanCodeShort.RETURN);
        Thread.Sleep(100);
我将在一定程度上延迟进行测试。我希望我能把价格降得更低。因为我的winForm在窗体上使用计时器

编辑:

为了使操作更简洁,我对字母表进行了如下迭代:

for (char c = 'A'; c <= 'Z'; c++) {

用于(char c='A';c如果`*SendKeys.SendWait*不再有效,请将回车键按长一点,然后自行实现。请查看该方法的参考源代码,看看是否可以调整它以克服游戏更改。首先,我是c的初学者,我不认为我可以调整该方法使其工作……如果您下载ILSpy和n打开System.Winfows.Form.DLL,然后查看Microsoft SendKEys.SendWait方法的底层实现。我是说,根据他们的实现来创建您自己的实现,可以解决游戏中阻止回车键和/或等待一秒钟的问题。您回答得很快!哈哈,我在谷歌上搜索到了它,我认为它无法实现。Sendkeys根本不工作了,对我来说,改变整个方法似乎很困难。专业提示:作为一名开发人员,我的座右铭是“追求它;就像狗追求骨头”。通常,一个有效的解决方案只需再等5分钟。试着试一试:或者感谢Jeremy的编辑。我做了一些研究,但我似乎不明白代码的用途。我想我必须用for-each来更改它。但我不认为这会有什么好处。。。