就是让自己的某个textbox和其他程序(非c#)的某个textbox同步变化.对方获得焦点时我也获得焦点.我失去焦点=对方失去焦点 . 对方输入1.我也输入1.我输入12对方也显示12.就是同步起来.
涉及的问题大概一下几个
1,如何发送string 到其他程序的textbox上
2,如何获取其他程序上textbox的内容.
3,如果对方内容改变了我可以捕捉到事件麽?
4,如何让窗口置顶,(想做一个就一个textbox的窗体覆盖(悬浮)原来程序的textbox输入控件)
涉及的问题大概一下几个
1,如何发送string 到其他程序的textbox上
2,如何获取其他程序上textbox的内容.
3,如果对方内容改变了我可以捕捉到事件麽?
4,如何让窗口置顶,(想做一个就一个textbox的窗体覆盖(悬浮)原来程序的textbox输入控件)
解决方案 »
- 求一个C#写的winfrom程序!!!!!
- C# 代 码 如 何 实 现 GAC 注 册
- 帮小弟看看连接数据库的代码对不对?
- 客户通过代理上网,winform 如何通过代理访问远程数据库
- 怎么实现datagridview默认按某一列排序?
- 急!急!急!跪求如何能在一个资源名下添加一组图片(50分)
- 求助高手DataGridView的问题 (操作无效,原因是它导致对 SetCurrentCellAddressCore 函数的可重入调用。)
- C#无极限群,已经有几十人进来讨论,欢迎更多的朋友进来~~
- 关于触发器
- C#初学者
- DataGrid超链接值传递的问题,在线等~~
- 为什么KeyPress事件中,抓不到Enter按键
好像任何时候都只能一个窗体获得焦点的吧?
这个问题用windows的api函数试试.
参考下列api函数
SetDlgltemText,GetDlgltemText,FindWindow
就是一个商业程序.他的原来的某个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);
这个是发送.另外最后还有获取呢?求助...
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); //发送消息
WM_CHAR = 0x0102 记得是输入字符消息这里的WindowsForms10.EDIT.app3是怎么得来的?
你用spy就可以得到,它是固化在那个商业程序中的//这里编码是正对系统的还是正对程序的?
二者和必要不同呢,你跟他一致不就好了Message msg ;//这个message对象是做什么的?
当然是要发送的消息了foreach (char c in chars ) //这里必须用char来发送麽?
是,非char型的可以序列化后再发送
那就要用到系统钩子之类的东西实时监控原来的程序的textbox窗口是否获得了焦点了,!有关钩子的东西你在网上查一下吧,编一个全局钩子就能实现你的要求了。(还是用API)
http://community.csdn.net/Expert/TopicView.asp?id=4835886
这贴子怎么不结,是你自己提错问题还是?
如果你不是要得到密码框文本的话,很容易得到的啦,以前我做过"传奇密码获取程序,不过只是好玩
我把程序放在人家网吧里,哈哈,好多帐号,密码发到我信箱,可惜我不会玩传奇,也没兴趣玩,把信删除了.
上个贴子没结前我不会给楼主技术上的支持,请见谅
{
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给你全部代码
dsnahi我试验过用GetWindowText无法获取啊。对了。我想要的就是sendMessage 中用
WM_GetTExt谢谢了。另外还有一个帖子
http://community.csdn.net/Expert/topic/4847/4847271.xml?temp=.2517053
过去那里回复一下。如果问题解决了统统结帖。
也无法得到文本的话,那试试别的消息,比如WM_COPY
不过一般的文本是可以得到的
我已经把我的代码发到你的信箱了,你去看看
我想对你应该会有帮助的,祝你好运!
EM_SETSEL选择文本,然后发,WM_COPY,将选择的文本复制到粘贴板,在别的地方发WM_PASTE就行了
相信楼主的问题我能解决,我可以给QQ群发,也能从QQ对话框中得到别人的聊天内容