1

我正在自动化一些流程。我运行一个 VB.net 应用程序,需要输入密码,Tab 到“登录”按钮,发送回车,Tab 到“运行加载”按钮,然后按 Enter。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 次尝试)。

4

1 回答 1

1

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

于 2014-07-29T19:01:33.447 回答