我自动化某些流程。我运行一个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次尝试)。
答案 0 :(得分:0)
我添加了Thread.Sleep(2000);
,因为代码只是在应用程序甚至有机会完全加载之前输入了击键。我不知道这个解决方案是否会对其他人有所帮助,但它绝对值得考虑。感谢那些贡献的人。