C#SetforegroundWindow到VB.Net然后SendKeys

时间:2014-07-29 18:20:58

标签: c# vb.net automation sendkeys setforegroundwindow

我自动化某些流程。我运行一个VB.net应用程序,需要输入一个密码,选中"登录"按钮,发送回车,切换到"运行负载"按钮然后按Enter键。 SendKey部分似乎不是问题;它正确地获得了正确的应用程序。我希望形式.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应用程序需要是Active窗口。还将我的代码更改为有效的代码(它工作了1/7次尝试)。

1 个答案:

答案 0 :(得分:0)

我添加了Thread.Sleep(2000);,因为代码只是在应用程序甚至有机会完全加载之前输入了击键。我不知道这个解决方案是否会对其他人有所帮助,但它绝对值得考虑。感谢那些贡献的人。