将用户名和密码发送到另一个应用程序
Send username and password to another application
我想将用户名和密码发送到另一个应用程序,并处理输入。
所以我的应用程序 A 有一个 window 需要用户名和密码。
我们有 运行 的应用程序 B。应用程序 B 需要搜索应用程序 A,登录 window,并将用户名和密码发送到其中的文本框,然后通过确定按钮处理这些输入。
是否有任何库可以满足这些需求?
任何帮助天气它是网站或 dll 参考或示例将是伟大的
注意:-
应用程序 A 不是我构建的,也无法访问其代码或任何东西,我可以启动它,仅此而已。
这里的过程只是为了让事情变得清晰,因为有些人感到困惑:-
应用程序B是一个EXE应用程序,当点击时,它会做一些逻辑,然后启动应用程序A。
应用程序A一启动,就会弹出一个对话框提示用户输入用户名和密码这不是我做的,这是应用程序做的。我的问题是我能否访问此对话框 window,并向其发送输入。
表单代码
public partial class Form1 : Form {
[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);
public Form1() {
InitializeComponent();
var process = new ProcessStartInfo(@"arcmap.exe");
var pr=Process.Start(process);
SetForegroundWindow(pr.Handle);
SendKeys.Send("ne{TAB}ne{ENTER}");
}
}
}
我觉得这不是一个合适的设计策略。为什么不将两个应用程序合并为一个并在不同的应用程序表单之间传递请求的值?
如果出于某种原因您需要使用两个不同的应用程序,只需在用户在应用程序 A 中输入其登录凭据后打开应用程序 B,并将这些值作为参数传递给您的第二个应用程序。
您还可以考虑使用 TCP class 以便使用套接字虚拟连接您的两个应用程序。
您需要启动 Arcmap(使用 Process.Start(string path);
是一项相当简单的任务,然后使用 Thread.Sleep(int miliseconds)
给它一些时间来启动,然后它会变得棘手。
您必须获取 Arcmap 进程(可能是名称)并通过导入此方法将其设置为前台 window:
[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);
然后这样调用:
Process process = Process.GetProcessesByName("arcmapProcessName").FirstOrDefault();
SetForegroundWindow(process);
稍后您只需使用
发送密钥
SendKeys.Send("login{TAB}password{ENTER}");
那么你必须参考 SendInput
function to programatically inject keyboard keypresses into the input stream. Perhaps, since it's a lot of hassle to reinvent the wheel and you're asking for an external library anyway, you could use C# Input Simulator.
我想将用户名和密码发送到另一个应用程序,并处理输入。 所以我的应用程序 A 有一个 window 需要用户名和密码。 我们有 运行 的应用程序 B。应用程序 B 需要搜索应用程序 A,登录 window,并将用户名和密码发送到其中的文本框,然后通过确定按钮处理这些输入。
是否有任何库可以满足这些需求? 任何帮助天气它是网站或 dll 参考或示例将是伟大的
注意:- 应用程序 A 不是我构建的,也无法访问其代码或任何东西,我可以启动它,仅此而已。
这里的过程只是为了让事情变得清晰,因为有些人感到困惑:- 应用程序B是一个EXE应用程序,当点击时,它会做一些逻辑,然后启动应用程序A。
应用程序A一启动,就会弹出一个对话框提示用户输入用户名和密码这不是我做的,这是应用程序做的。我的问题是我能否访问此对话框 window,并向其发送输入。
表单代码
public partial class Form1 : Form {
[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);
public Form1() {
InitializeComponent();
var process = new ProcessStartInfo(@"arcmap.exe");
var pr=Process.Start(process);
SetForegroundWindow(pr.Handle);
SendKeys.Send("ne{TAB}ne{ENTER}");
}
}
}
我觉得这不是一个合适的设计策略。为什么不将两个应用程序合并为一个并在不同的应用程序表单之间传递请求的值?
如果出于某种原因您需要使用两个不同的应用程序,只需在用户在应用程序 A 中输入其登录凭据后打开应用程序 B,并将这些值作为参数传递给您的第二个应用程序。
您还可以考虑使用 TCP class 以便使用套接字虚拟连接您的两个应用程序。
您需要启动 Arcmap(使用 Process.Start(string path);
是一项相当简单的任务,然后使用 Thread.Sleep(int miliseconds)
给它一些时间来启动,然后它会变得棘手。
您必须获取 Arcmap 进程(可能是名称)并通过导入此方法将其设置为前台 window:
[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);
然后这样调用:
Process process = Process.GetProcessesByName("arcmapProcessName").FirstOrDefault();
SetForegroundWindow(process);
稍后您只需使用
SendKeys.Send("login{TAB}password{ENTER}");
那么你必须参考 SendInput
function to programatically inject keyboard keypresses into the input stream. Perhaps, since it's a lot of hassle to reinvent the wheel and you're asking for an external library anyway, you could use C# Input Simulator.