在另一个表单上查找文本框并写入其中

时间:2017-07-14 15:56:22

标签: c# winforms user32 window-handles

使用VS2010 C#

我完全失去了......

我有一个供应商计划,可以将专有格式的数据导出到CSV文件中。

我有大约20个磁盘,其中一个有255个这样的文件......

我希望自动化这个过程...这是非常简单的直到我需要将新文件名写入供应商程序的文件保存框中。

我有程序处理,但似乎无法提出正确的问题。

认为我需要一种方法来枚举所有控件,所以我有一个句柄来使用发送消息。

但是,正如我所说,我现在处于完全令人沮丧的损失之中。

对于提出哪些问题的建议将非常感激。

谢谢!

2 个答案:

答案 0 :(得分:0)

.FindAll()应该是你想要的。这将返回窗口句柄下的所有UI元素。 https://msdn.microsoft.com/en-us/library/system.windows.automation.automationelement.findall(v=vs.110).aspx

答案 1 :(得分:0)

我决定一个解决方案可以解决我的问题,并会在以后进一步研究......

看到它在AutoIt和幻影测试驱动程序(我最终使用的内容)中的容易程度是如此令人沮丧。

[已删除网站,已更改。]

基本上,我有一大堆包含.dtb文件的磁盘,确切地说是542。

我知道这很简单,我只写出了我要解决的问题的要点。 这些文件采用专有格式,需要使用Teradyne的软件,据我所知,没有脚本或命令行方法来使用该软件。

我不确定我是否最终使用了所有这些程序集,但这是列表:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;

我的第一个任务是找到CD上的所有.dtb文件,并将它们传输到工作文件夹,文件夹结构完好无损。 (因为不同文件夹中存在重复的文件名)为此,我使用了Beyond Compare。

此文件夹成为基本文件夹lblDrive.txt。它实际上包括整个路径。

string[] rawInput = Directory.GetFiles(lblDrive.Text, "*.dtb*", SearchOption.AllDirectories);

// lblDTBFilesFound

int dtbCount = 0;
foreach (string s in rawInput)
{
    lstFilesList.Items.Add(s.ToString());
    dtbCount++;
}
lblDTBFilesFound.Text = "DTB Files Found: " + dtbCount.ToString();

//创建所有.dtb文件的列表,包括其完整路径。 //文件计数可以在以后使用,以确保您转换了所有文件。

遍历将每个条目复制到wrkString的列表,这是.dtb文件的完整路径

Clipboard.SetText(wrkString.Substring(0, q));

//将除文件扩展名以外的所有内容复制到剪贴板

Process.Start(wrkString); // launching proprietary software

int maybe = 0;
while (maybe < 25)
{
    System.Threading.Thread.Sleep(10);
    maybe++;
}

//确保应用程序启动时稍加延迟

var process = Process.Start("DTB_Extraction.psc");
process.WaitForExit();

•启动phantom.exe(以前与phantom.exe关联的.psc) •脚本执行鼠标移动并单击以转换文件 •脚本包括从剪贴板到文件保存的粘贴 •强制等待脚本完成

if(File.Exists(wrkString.Substring(0, q) + ".csv"))
{
    // Do nothing
}
else
{
    lstDisp.Items.Add(wrkString.Substring(0, q) + ".csv");
}

//在极少数情况下出现问题并且未创建.csv

string[] rawInput = Directory.GetFiles(lblDrive.Text, "*.csv*", SearchOption.AllDirectories);
int dtbCount = 0;
foreach (string s in rawInput)
{
    lstFilesList.Items.Add(s.ToString());
    dtbCount++;
}
lblCSVFilesFound.Text = "CSV Files Found: " + dtbCount.ToString();

//创建工作目录中所有.csv文件的列表,这样我就可以遍历它并提取我需要的数据。 //可以比较文件计数。