c#设置foregroundwindow到VB.Net,然后是SendKeys

本文关键字:然后 SendKeys Net VB 设置 foregroundwindow | 更新日期: 2023-09-27 18:15:33

我正在自动化一些流程。我运行一个VB.net应用程序,需要输入一个密码,tab通过"登录"按钮,发送回车,tab通过"运行加载"按钮,并按回车。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应用程序需要是活动窗口。也改变了我的代码是有效的代码(它工作1/7次尝试)。

c#设置foregroundwindow到VB.Net,然后是SendKeys

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