如题,用户用我写的软件输入了一些值之后打开了另一个程序,这时用户点击我写的程序的导入把用户输入的数据导入到他已经打开的那个程序,这个功能如何实现啊,求高手解答
另外,另一个程序的页面上有上一页下一页等一些按钮,我如何获取这些按钮呢??

解决方案 »

  1.   

    不太理解啊,能详细说一下嘛
    如果A程序做了相应的操作,则把命令传送到B程序上。
    在B程序上做个轮询(循环),实时接受命令。我现在就是这么解决我的教师端翻书,学生端跟着翻。希望能帮到你。
      

  2.   

    不太理解啊,能详细说一下嘛
    如果A程序做了相应的操作,则把命令传送到B程序上。
    在B程序上做个轮询(循环),实时接受命令。我现在就是这么解决我的教师端翻书,学生端跟着翻。希望能帮到你。
    你这是两个端口啊,你直接让学生端的屏幕显示你的不就行了嘛
      

  3.   

    不太理解啊,能详细说一下嘛
    如果A程序做了相应的操作,则把命令传送到B程序上。
    在B程序上做个轮询(循环),实时接受命令。我现在就是这么解决我的教师端翻书,学生端跟着翻。希望能帮到你。
    你这是两个端口啊,你直接让学生端的屏幕显示你的不就行了嘛是两个程序啊。 老师的机器是老师端,学生的机器是学生端,老师点控制的时候,才会控制学生端的操作。你说的直接显示,我没理解。。
      

  4.   

    个人观点,仅供参考
    情况1.如果客户程序中有textbox等控件存放输入数值,比较简单,只需修改你的程序
    在导入的点击事件中使用api查找客户窗体,然后再查找textbox,还是利用api给客户程序textbox赋值。
    情况2.如果客服程序没有textbox等控件存放输入数值,需要修改客户程序,而且麻烦
    客户程序打开后,要先判断你的程序是否打开,如果打开,要使用钩子,监视鼠标点击和键盘回车事件,如果是点击[导入],那么就用api获取输入(类似情况1)
      

  5.   

    不太理解啊,能详细说一下嘛
    如果A程序做了相应的操作,则把命令传送到B程序上。
    在B程序上做个轮询(循环),实时接受命令。我现在就是这么解决我的教师端翻书,学生端跟着翻。希望能帮到你。
    你这是两个端口啊,你直接让学生端的屏幕显示你的不就行了嘛是两个程序啊。 老师的机器是老师端,学生的机器是学生端,老师点控制的时候,才会控制学生端的操作。你说的直接显示,我没理解。。
    我的意思是  你 直接控制学生电脑的屏幕显示内容
      

  6.   

    C#可以调用Win32中的FindWindow函数来获得打开窗口的句柄,具体函数的使用可以参考MSDN或者参考下面的文章:http://www.cnblogs.com/zhili/p/OnlyInstance.html
      

  7.   

    说一点自己的拙见。
    方案1:
    你的程序为A,用户的程序为B,假如你有权限可以修改B的源码的话那就在B处开辟个线程,这个线程专门去轮询A的导入操作,加入A的导入操作是在按钮“导入”下完成的,那么这个按钮的TYPE和TITLE就是固定的,句柄是不固定的,不好去作判断,用这俩个条件一般就够了。B中线程只要捕捉到这个类型的按钮消息时就去获取数据,(获取该按钮句柄,类型,名称的小例子很多,这个可以找到)。但是怎么把值传过来我就没做过了,不过可以在A导入数据的里面写一个操作txt之类的功能,先将数据存起来。然后B获取改按钮的消息时自己去读TXT。
    方案2:
    假如无法去修改B,那就反过来,去写个小例子先。去找到B中要获取数据的窗体或者控件的唯一标示,在A中新加一个方法,只要A进行了导入,就去sendMessage,触发B。仅供参考。
      

  8.   

    看了半天那个api函数不太懂啊,能找到窗体了,但是如何找到窗体上的textbox和按钮呢
      

  9.   

    看了半天那个api函数不太懂啊,能找到窗体了,但是如何找到窗体上的textbox和按钮呢
    每一个控件在窗体上都被认为是一个子窗体 获取到窗体句柄之后 IntPtr hwnd = FindWindow(null, "你需要获取的窗体的标题,例如:Form1"); 
    IntPtr ButtonHwnd= FindWindowEx(hwnd, IntPtr.Zero, "控件的名字", null); 这样就能得到控件的句柄
     SendMessage(ButtonHwnd, WM_SETTEXT, IntPtr.Zero, name); 这样就能更改控件的内容了
    具体参考:
    http://www.cnblogs.com/vvv999vz/archive/2011/08/03/2125895.html
      

  10.   

    采用窗体传值和委托的知识点:
    我给你写几个代码你看看,在窗体Form1中的文本框中输入汉字,点击确定按钮,在Form2中的文本框中显示,然后在from2中的文本框中输入汉字,点击确定,让显示在Form1中的TextBox.Text中
    namespace _02窗体传值
    {
        public partial class Form1 : Form
        {
            public Form1(string st)
            {
                InitializeComponent();
                textBox1.Text = st;
            }
            public Form1()
            {
                InitializeComponent();
               
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form2 for2 = new Form2(textBox1.Text);
                for2.Show();
                Form1 for1 = new Form1(textBox1.Text);
                for1.Close();
     
            }        private void Form1_Load(object sender, EventArgs e)
            {        }
        }
    }下面是Form2窗体的代码
    namespace _02窗体传值
    {
        public partial class Form2 : Form
        {
            public Form2(string st)
            {
                InitializeComponent();
                textBox1.Text = st;
            }
                   private void Form2_Load(object sender, EventArgs e)
            {
               
            }        private void button1_Click(object sender, EventArgs e)
            {
              
                Form1 for1 = new Form1(textBox1.Text);
                for1.Show();
            }
        }
    }
      

  11.   

    看了半天那个api函数不太懂啊,能找到窗体了,但是如何找到窗体上的textbox和按钮呢
    每一个控件在窗体上都被认为是一个子窗体 获取到窗体句柄之后 IntPtr hwnd = FindWindow(null, "你需要获取的窗体的标题,例如:Form1"); 
    IntPtr ButtonHwnd= FindWindowEx(hwnd, IntPtr.Zero, "控件的名字", null); 这样就能得到控件的句柄
     SendMessage(ButtonHwnd, WM_SETTEXT, IntPtr.Zero, name); 这样就能更改控件的内容了
    具体参考:
    http://www.cnblogs.com/vvv999vz/archive/2011/08/03/2125895.html

    恩,已经大体实现功能了,但是遇到一个问题,就是那个窗体上的文本框很多,我已经定义好一个类来存储所有文本框的句柄了,但是我想写一个方法给定义这个类的属性赋值,不知道如何写?能给我个思路吗?
      

  12.   

    有人做过类似的东西吗?
    这个页面这么多textbox文本框,我已经定义好一个类,里面的属性都是IntPtr类型的用来存储这些textBox的句柄,我也已经知道FindWindowEx这个函数的第二个参数了,
    我想实现的是 如何通过一个方法来给我定义的那些属性赋值。
    下面是我获取一个textbox文本框的句柄并赋值StringBuilder sb = new StringBuilder(255);
                IntPtr win = FindWindow(null, "xxxx管理软件");
                //CloseWindow(win);
                GetClassName(win, sb, 255);
                string className = sb.ToString().Substring(sb.ToString().IndexOf(".app"));
                string name = "1";            IntPtr txt = FindWindowEx(win, IntPtr.Zero, "WindowsForms10.EDIT" + className, null);            SendMessage(txt, WM_SETTEXT, IntPtr.Zero, name);
      

  13.   

    看一本书,好像叫windows程序设计
      

  14.   

    说说你的第一个问题,如果被调用的程序也可以由你来控制的话,那么可以在调用时传递参数来实现,如Process.Start("test.exe", "www");
    你的第二个问题就比较难控制了,想一想可以通过API来实现,或者通过第三方的媒介,比如说,调用程序发布指令后写到某处,然后被调用程序实时轮巡,如果发现相应指令,内部控制进行执行
      

  15.   

      findwindows,enumchawindows,必要的时候可以用hook来获取都行。