我在自动化一些流程。我运行一个VB.net应用程序,需要输入密码,按tab键转到“登录”按钮,发送enter,按tab键转到"run loads“按钮,然后按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次)。
发布于 2014-07-30 03:01:33
我添加了Thread.Sleep(2000);,因为代码只是在应用程序有机会完全加载之前输入击键。我不知道这个解决方案是否会对其他人有帮助,但它肯定是值得考虑的。感谢那些做出贡献的人。
https://stackoverflow.com/questions/25022333
复制相似问题