在一个winform程序上有2个 TextBox 和1个Button  
我有个xml,要求做个程序自动把xml上的数据对应写入到winform的TextBox上,然后点Button 。 
取出xml上的数据我都可以搞定,现在问题是如何把取到的值填到winform的TextBox上? 
(winform是一个.exe运行程序,没有源码)  
请教大家帮忙看看,谢谢!

解决方案 »

  1.   

    没有源码,没有API能搞定吗?没见过,期待高手
      

  2.   

    感觉有点诡异,难的你会,简单的你反而有问题,用textbox.Text = (……).ToString();不就好了吗。
      

  3.   

    -_-!!! 那就再蹭点分。解决问题的步骤:
    1、找一个spy++(「开始」菜单\程序\Microsoft Visual Studio 2005\Visual Studio Tools)或者类似的工具(推荐老妖写的spy4win用起来比较简单功能也多)2、使用spy++分析TextBox(其他语言可能叫:Edit、TMemo、TEdit...)所在的Form(没有容器parent的窗体)类名和标题名3、获得类名和窗体标题,就可以通过FindWindow()API函数获得该窗体句柄。
    [DllImport("user32.dll")]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    比如:FindWindow("Notepad", "无标题 - 记事本")4、遍历子窗体,将所以子窗体的类名、句柄、标题输出分析。
    public delegate bool WNDENUMPROC(IntPtr hwnd, int lParam);[DllImport("user32.dll")]
    public static extern int EnumChildWindows(IntPtr hWndParent,
        WNDENUMPROC lpEnumFunc, int lParam);
    public bool EnumChild(IntPtr hwnd, int lParam)
    {
        StringBuilder vClassName = new StringBuilder(256);
        GetClassName(hwnd, vClassName, vClassName.Capacity);
        StringBuilder vWindowText = new StringBuilder(256);
        GetWindowText(hwnd, vWindowText, vWindowText.Capacity);
        Console.WriteLine("句柄:{0} 类名:{1} 标题:{2}", hwnd, vClassName, vWindowText);
        return true;
    }EnumChildWindows(vHandle, EnumChild, 0);
    5、用spy++工具获得textBox的句柄,根据4的打印的结果分析前后类名和标题是否有恒定的,可以作为参照点。6、更新参照点找到输入框的句柄
    假设类名:"Button" 标题:"About"后面第二个是输入框,可以这样写
    int index = -1; // 参照点开始的序号
    IntPtr edit = IntPtr.Zero;public bool EnumChild(IntPtr hwnd, int lParam)
    {
        StringBuilder vClassName = new StringBuilder(256);
        GetClassName(hwnd, vClassName, vClassName.Capacity);
        StringBuilder vWindowText = new StringBuilder(256);
        GetWindowText(hwnd, vWindowText, vWindowText.Capacity);
        if (index < 0)
        {
            if (vClassName.ToString() == "Button" && 
                vWindowText.ToString() == "About")
                index = 0;
        }
        else
        {
            index++;
            if (index == 2)
            {
                edit = hwnd;
                return false; // 停止遍历
            }
        }
        return true;
    }7、获得输入框的句柄就是填写内容了,用WM_SETTEXT消息 //具体数值可以搜索本地文件包含“WM_SETTEXT”的头文件(*.h)
    [DllImport("User32.DLL")]
    public static extern int SendMessage(IntPtr hWnd, 
        uint Msg, int wParam, string lParam);
    public const uint WM_SETTEXT = 0x000C;SendMessage(edit, WM_SETTEXT, 0, "Zswang 路过");
      

  4.   

    可以使用点东西作为交换变量保存你所取到的值,然后WINFORM再从你所保存的地方取出值来用。
    例如可以在WINFORM的文件目录下创建个inf文件,直接将值写入里边,运行完WINFORM就清空;或者是把那个值暂存入注册表某项中,待用时再取出使用。
    只附写注册表的代码,如我想要写入到:HKEY_USERS\.DEFAULT\Console\Registry.SetValue("HKEY_USERS\\.DEFAULT\\Console", "value", "0");//SetValue("注册表根值","键名","键值")
    string Value=Registry.GetValue("HKEY_USERS\\.DEFAULT\\Console\\browse", "admin", "false");
      

  5.   

    It's too hard to me
      

  6.   

    感谢 zswang  成功了!