好的,我创建了一个名为Sharknadoo的应用程序,这个应用程序从组合框中读取值从1到任意数字,并在其右侧创建该数量的文本框。
现在让我们假设我没有这个sharknadoo应用程序的代码只是我桌面上安装的应用程序。我的问题是如何将我的listbox.items从“我的惊人的应用程序”发送到sharknadoo文本框?假设我的列表框中有相同数量的项目,因为我在其他应用程序中有文本框。很抱歉,我真的想学习如何做到这一点,有人告诉我有可能实现,但我不知道如何实现它是考虑使用坐标或类似的东西,但从我的理解你甚至可以坚持sharknadoo应用程序使用文本框甚至没有访问其源代码的事实。谢谢你事先的朋友:D。
Process[] processes = Process.GetProcessesByName("Sharknadoo.exe");
int i = 0;
foreach (Process p in processes)
{
IntPtr windowHandle = p.MainWindowHandle;
string item = listBox1.Items[i].ToString();
listBox1.Items.Add(item);
i++;
}
我意识到我的代码的逻辑并不好,但这是我能想到的。
答案 0 :(得分:2)
此答案遵循与您的代码类似的逻辑,但是模拟键盘笔划并依赖于使用TAB导航框,但它应该适用于您的情况。
首先添加一些我们稍后将用于获取Sharknadoo应用程序链接的代码:
// Get a handle to an application window.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
// Activate an application window.
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
现在假设您没有触及应用程序中的任何内容(非常危险的假设,最好在执行任何此操作之前从代码中启动Sharknadoo),选项卡索引应为0,因此我们可以执行以下操作当您单击“发送到Sharknadoo”按钮时:
// Send a your array of names to the Sharknadoo application.
public void sendToSharknadoo(String[] detailsToSend)
{
// Get a handle to the Sharknadoo application. The window class
// and window name can be obtained from Sharknadoo using the
// Spy++ tool.
IntPtr windowHandle = FindWindow("SharknadooFrame","Sharknadoo");
// Verify that Sharknadoo is a running process.
if (windowHandle == IntPtr.Zero)
{
MessageBox.Show("Sharknadoo is not running.");
return;
}
// Make Sharknadoo the foreground application and set the number
// of text boxes for your info
SetForegroundWindow(windowHandle);
// Get to first box
SendKeys.SendWait("{TAB}");
// enter number of boxes
SendKeys.SendWait("{DOWN}");
SendKeys.SendWait((string)detailsToSend.Length);
// Now enter your details into each of those boxes
foreach (String s in detailsToSend)
{
// Get next textbox box
SendKeys.SendWait("{TAB}");
// enter text into box
SendKeys.SendWait(s);
}
}
任何运气都可以解决问题。但是你可能需要把订单弄得乱七八糟。
注意:如果您想要在用户干扰之前执行更快更积极的方法,请尝试SendKeys.Send()
而不是SendKeys.SendWait()
来源:
https://msdn.microsoft.com/en-us/library/ms171548(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys(v=vs.110).aspx
其他Stack Overflow问题如下: