C#SetforegroundWindow到VB.Net,然后发送键

C#SetforegroundWindow到VB.Net,然后发送键,c#,vb.net,automation,sendkeys,setforegroundwindow,C#,Vb.net,Automation,Sendkeys,Setforegroundwindow,我正在使一些过程自动化。我运行一个VB.net应用程序,需要输入一个密码,点击“登录”按钮,发送回车,点击“运行加载”按钮,然后点击回车。SendKey部分似乎不是问题所在;它将获得正确的应用程序来聚焦。我希望form.TopMost能帮上忙,但不幸的是事实并非如此 [DllImport("User32")] private static extern int SetForegroundWindow(int hwnd); public void runDailyW

我正在使一些过程自动化。我运行一个VB.net应用程序,需要输入一个密码,点击“登录”按钮,发送回车,点击“运行加载”按钮,然后点击回车。SendKey部分似乎不是问题所在;它将获得正确的应用程序来聚焦。我希望form.TopMost能帮上忙,但不幸的是事实并非如此

[DllImport("User32")]
        private static extern int SetForegroundWindow(int hwnd);
        public void runDailyWS()
        {
            string homeWSPath = "D:\\...";

            var home = Process.Start(homeWSPath);

            var procName = "DataLoad Home Test - Copy";
        Process[] p = Process.GetProcessesByName(procName);

        // Activate the first application we find with this name
        if (p.Count() > 0)
            {
                SetForegroundWindow(p[0].MainWindowHandle);
                SendKeys.SendWait("{TAB}");
                SendKeys.SendWait("password");
                SendKeys.SendWait("{TAB}");
                SendKeys.SendWait("{TAB}");
                SendKeys.SendWait("{TAB}");
                SendKeys.SendWait("{ENTER}");
            }
///Did not post rest of code after this point as it's unnecessary
我尝试了几种不同的方法将VB.net应用程序/进程带到前台,奇怪的是,它有时可以工作,但有时不够好。有人有什么想法吗?我也看了前6个左右的谷歌搜索结果。谢谢


编辑:为了澄清这一点,这段代码启动了一个VB.net应用程序,我正在尝试通过自动按键来输入凭据,并通过按enter键来启动应用程序。但是,为了使击键真正注册,VB.net应用程序需要是活动窗口。还将我的代码更改为工作的代码(它工作了1/7次)

I增加了
Thread.Sleep(2000) 我不太明白你的问题是什么。定义它应该做什么以及它应该做什么。这将有助于帮助你。还有一件小事,但在代码片段的末尾缺少了一个
}
。您不应该将hWnd传递给setForeGroundIndow()而不是arrProcesses.Length吗?@Sifu这是我需要帮助的代码部分;之后还有更多有用的东西。@HanH1113那么,为了清楚起见,您应该编辑您的问题并添加类似于以下内容的内容:
///Removed following working code;}。我的2美分。如果你知道它是VB.Net,而不是C#,F#,或者一般的一些.Net应用程序,这意味着你至少可以间接访问源代码。做出了这样的推断之后,似乎您最好创建对原始方法的直接调用。因此,.Net exe文件通常可以用作其他.Net应用程序中的引用,就像它们是DLL一样。