就是让自己的某个textbox和其他程序(非c#)的某个textbox同步变化.对方获得焦点时我也获得焦点.我失去焦点=对方失去焦点 . 对方输入1.我也输入1.我输入12对方也显示12.就是同步起来.
涉及的问题大概一下几个
1,如何发送string 到其他程序的textbox上
2,如何获取其他程序上textbox的内容.
3,如果对方内容改变了我可以捕捉到事件麽?
4,如何让窗口置顶,(想做一个就一个textbox的窗体覆盖(悬浮)原来程序的textbox输入控件)

解决方案 »

  1.   

    对方获得焦点时我也获得焦点?是同一台机器么?
    好像任何时候都只能一个窗体获得焦点的吧?
    这个问题用windows的api函数试试.
    参考下列api函数
    SetDlgltemText,GetDlgltemText,FindWindow
      

  2.   

    回楼上各位的疑问.两个东西是同一个机器上的..
    就是一个商业程序.他的原来的某个textbox做的很不方便.现在想要扩张他textbox的功能.比如添加自动完成啊之类的功能.我说的当原始textbox获取焦点后我的程序也获取焦点的意思是.当原始程序获取焦点后.我的程序马上夺取焦点.我的程序如果失去焦点后吧焦点移到原始焦点的下一个焦点.当然这个焦点问题估计应该是在解决获取和发送原始textbox内容后应该可以通过一些方法来解决的.主要是如何获取原始textbox的内容(包括字符,焦点等).和发送字符串到原始textbox.
    我google了一下.发现
    http://softexam.chinaitlab.com/commend/22292.html
    这个文章.主要代码如下
    这个应该可以解决发送消息到其他程序的textbox要求吧?
    但是谁能稍微解释一下这些语句的含义麽?const int WM_CHAR = 0x0102;//这个产量是什么?是怎么来的?
       IntPtr hwnd_win ;//这个应该是申明一个窗体的句柄吧?
       IntPtr hwnd_textbox ;//这个是textbox的句柄吧?
      
       hwnd_win = FindWindow("WindowsForms10.Window.8.app3","Form1");  //这里的WindowsForms10.Window.8.app3是怎么来的? ,,,Form1应该是窗体名吧?
       hwnd_textbox = FindWindowEx(hwnd_win ,new IntPtr(0) ,"WindowsForms10.EDIT.app3","textBox1");//同样这里的WindowsForms10.EDIT.app3是怎么得来的?
       
       string strtext = "测试aaa";
       UnicodeEncoding encode = new UnicodeEncoding();//这里编码是正对系统的还是正对程序的?
       char[] chars = encode.GetChars(encode.GetBytes(strtext));
       Message msg ;//这个message对象是做什么的?
       foreach (char c in chars ) {//这里必须用char来发送麽?
        msg = Message.Create(hwnd_textbox ,WM_CHAR ,new IntPtr(c),new IntPtr(0));
        PostMessage(msg.HWnd ,msg.Msg ,msg.WParam ,msg.LParam); }
    //后面这几个api具体解释一下可以麽?
    [DllImport("user32.dll")]
       public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
       
       [DllImport("user32.dll")]
       public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);
      
       [DllImport("user32.dll",CharSet=CharSet.Unicode)] 
       public static extern IntPtr PostMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);
    这个是发送.另外最后还有获取呢?求助...
      

  3.   

    [DllImport("user32.dll")]
       public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);  //找窗口
       
       [DllImport("user32.dll")]
       public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);   //找窗口(扩展的函数)
      
       [DllImport("user32.dll",CharSet=CharSet.Unicode)] 
       public static extern IntPtr PostMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);        //发送消息
      

  4.   

    const int WM_CHAR = 0x0102;//这个产量是什么?是怎么来的?
    WM_CHAR = 0x0102 记得是输入字符消息这里的WindowsForms10.EDIT.app3是怎么得来的?
    你用spy就可以得到,它是固化在那个商业程序中的//这里编码是正对系统的还是正对程序的?
    二者和必要不同呢,你跟他一致不就好了Message msg ;//这个message对象是做什么的?
    当然是要发送的消息了foreach (char c in chars ) //这里必须用char来发送麽?
    是,非char型的可以序列化后再发送
      

  5.   

    上面的你找到的代码也只是能够实现从你的程序向原来的程序发送输入后的内容,获得的话
    那就要用到系统钩子之类的东西实时监控原来的程序的textbox窗口是否获得了焦点了,!有关钩子的东西你在网上查一下吧,编一个全局钩子就能实现你的要求了。(还是用API)
      

  6.   

    楼主的信誉很低,回答了也没分的了
    http://community.csdn.net/Expert/TopicView.asp?id=4835886
    这贴子怎么不结,是你自己提错问题还是?
    如果你不是要得到密码框文本的话,很容易得到的啦,以前我做过"传奇密码获取程序,不过只是好玩
    我把程序放在人家网吧里,哈哈,好多帐号,密码发到我信箱,可惜我不会玩传奇,也没兴趣玩,把信删除了.
    上个贴子没结前我不会给楼主技术上的支持,请见谅
      

  7.   

    看到你另一贴结了,请留下EMAIL,我送你我自己写的winspy程序源码
      

  8.   

    public static string GetWindowText(IntPtr hWnd)
    {
    StringBuilder sb = new StringBuilder(1024); //你可以先用GetWindowTextLength得到文本框长度代替1024
    SendMessage(hWnd,WM_GETTEXT,sb.Capacity,sb);
    return sb.ToString();
    }
    ------------------------------------------
    [DllImport("User32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam,StringBuilder lParam);
    若留下EMAIL给你全部代码
      

  9.   

    你好。我的email是[email protected]
    dsnahi我试验过用GetWindowText无法获取啊。对了。我想要的就是sendMessage 中用
    WM_GetTExt谢谢了。另外还有一个帖子
    http://community.csdn.net/Expert/topic/4847/4847271.xml?temp=.2517053
    过去那里回复一下。如果问题解决了统统结帖。
      

  10.   

    如果你用SendMessage(hWnd,WM_GETTEXT,sb.Capacity,sb);
    也无法得到文本的话,那试试别的消息,比如WM_COPY
    不过一般的文本是可以得到的
    我已经把我的代码发到你的信箱了,你去看看
    我想对你应该会有帮助的,祝你好运!
      

  11.   

    如果楼主是在RICHEDIT或别的edit控件中得到指定的内容,哈哈用WM_GETTEXT恐怕也不行,先用
    EM_SETSEL选择文本,然后发,WM_COPY,将选择的文本复制到粘贴板,在别的地方发WM_PASTE就行了
    相信楼主的问题我能解决,我可以给QQ群发,也能从QQ对话框中得到别人的聊天内容