C# 键盘模拟按下事件出现问题

C# 键盘模拟按下事件出现问题,c#,macros,key,C#,Macros,Key,我正在尝试为工作中的dispatcher应用程序制作一个自动工具,用于在文本框中插入用户名 如果inputArrayX[i]数组包含a、b、c,我在尝试模拟按键时遇到一些问题 键盘SIM会按abc键,但如果数组包含a、b、b、c、c,它仍然只会键入abc,而不是我希望它这样做的abbcc 有人知道我做错了什么吗 private void MouseMacroChangeUser() { //move form to 0,0 this.Locati

我正在尝试为工作中的dispatcher应用程序制作一个自动工具,用于在文本框中插入用户名

如果inputArrayX[i]数组包含a、b、c,我在尝试模拟按键时遇到一些问题

键盘SIM会按abc键,但如果数组包含a、b、b、c、c,它仍然只会键入abc,而不是我希望它这样做的abbcc

有人知道我做错了什么吗

    private void MouseMacroChangeUser()
    {

        //move form to 0,0
        this.Location = new Point(0, 0);
        //set xy to mouse current pos
        userMousePos();
        //inputBlocker();
        xX = int.Parse(this.Location.X.ToString());
        yY = int.Parse(this.Location.Y.ToString());
        defaultMousePos();
        //Thread.Sleep(600);

        Cursor.Position = new Point(Cursor.Position.X + 739, Cursor.Position.Y + 162);
        //Thread.Sleep(100);
        MouseSimulator.DoubleClick(MouseButton.Left);
        for (int i = 0; i < inputArrayX.Length; i++)
        {
            string tempX = inputArrayX[i].ToString();
            Keys keys = mapToKeyboardMacro(tempX);
            KeyboardSimulator.KeyDown(keys);
        }
        KeyboardSimulator.KeyPress(Keys.Enter);
        MouseSimulator.Click(MouseButton.Left);

        //reset mouse to user pos.
        Cursor.Position = new Point(x, y);

        needUnblock = true;

        //inputBlocker();
    }

    private Keys mapToKeyboardMacro(string key)
    {
        if (key == "space")
        {
            return Keys.Space;
        }
        else if (key == "a")
        {
            return Keys.A;
        }
        else if (key == "b")
        {
            return Keys.B;
        }
        else if (key == "c")
        {
            return Keys.C;
        }
        else if (key == "d")
        {
            return Keys.D;
        }
    }
private void MouseMacroChangeUser()
{
//将窗体移动到0,0
该位置=新点(0,0);
//将xy设置为鼠标当前位置
userMousePos();
//输入拦截器();
xX=int.Parse(this.Location.X.ToString());
yY=int.Parse(this.Location.Y.ToString());
defaultMousePos();
//睡眠(600);
Cursor.Position=新点(Cursor.Position.X+739,Cursor.Position.Y+162);
//睡眠(100);
鼠标模拟器。双击(鼠标按钮。左);
for(int i=0;i
您永远不会从键盘模拟器启动KeyUp命令。当按键按下时,不能再次按下。您必须让KeyUp启动新的KeyDown事件。

您永远不会从键盘模拟器启动KeyUp命令。当按键按下时,不能再次按下。您必须让KeyUp启动新的KeyDown事件。

尝试更改KeyboardSimulator.KeyDown(按键) 使用
键盘模拟器。按键(按键)


我不确定KeyDown事件是否会检查钥匙的状态(如果钥匙已关闭)。

尝试
更改键盘模拟器。KeyDown(钥匙)
使用
键盘模拟器。按键(按键)


我不确定KeyDown事件是否会检查钥匙的状态(如果钥匙已经关闭)。

Jeff我第一次给你打了+1。。我不知道为什么我的答案被接受了,但我觉得这是一个和我一样好的答案。谢谢-但我确实认为你的答案更清楚一点,因为他只有一个电话要打给你,两个电话要打给我的解决方案。不管怎样,猫被剥皮,一天就结束了。所以我的+1也会对你说。杰夫,你第一个得到了我的+1。。我不知道为什么我的答案被接受了,但我觉得这是一个和我一样好的答案。谢谢-但我确实认为你的答案更清楚一点,因为他只有一个电话要打给你,两个电话要打给我的解决方案。不管怎样,猫被剥皮,一天就结束了。所以+1从我的右背对着你。