当前位置: 代码迷 >> C# >> 这个效能能实现吗
  详细解决方案

这个效能能实现吗

热度:248   发布时间:2016-05-05 02:55:48.0
这个功能能实现吗?
我想要实现的功能是:在其他的窗口里面有一个类似于Textbox的控件,譬如说QQ窗口里面编辑聊天内容的控件,我想要通过sendmessage将一条文本信息出现在类似于Textbox的Text里面,譬如说,我想让"你好"直接出现在QQ窗口的聊天内容里面。

这个功能能不能实现?
如果能的话,能不能给一个方向,然后我自己去找资料。

谢谢。
------解决思路----------------------
用Windows API 可以的
FindWindow 得到句柄 然后PostMessage() 将内容投递到得到句柄中
------解决思路----------------------

有这个东西 MS有个组件,名给忘了,他不是以SendMessage发送的,现在QQ有返HOOK的东西,

http://www.haolizi.net/example/view_59.html 你试用这个看看吧
------解决思路----------------------

[DllImport("user32.dll")]
public static extern bool SetWindowText(IntPtr hWnd,string lpctStr);
/=======
SetWindowText(目标TextBox的句柄,你的TextBox.Text);

------解决思路----------------------
如果你给出理由说“我要做的不是一个简单暴力的流氓软件”,那么正规的做法就是你的目标软件提供一个tcp、udp、msmq、命名管道、共享内存等等之中任何一种服务,然后让别的进程给它发送自定义的消息信息即可。除了这个需求,那么就是想搞流氓了。
------解决思路----------------------
qq为了防止恶意添加信息,做了过滤,一般的软件,用api就可以。
------解决思路----------------------
引用:
SetWindowText跨进程用不了的。
可以用SendMessage WM_SETTEXT,或者SendMessage WM_PASTE。前提是对方的程序是Win32应用程序,而且没有屏蔽相关的消息。

好吧 经过测试 SetWindowText 对文本类控件无效 但是 其他控件是可以的 如按钮 label 窗体title等。。SetWindowText 是可以跨进程的 在早期的Windows系统中 所有程序都公用一个内存 而不是现在的一个进程一个地址控件 所以那个时候没有跨进程这种说法 为了兼容一些老的程序 所以Windows保留一些老的函数的功能 自己内部帮你处理了(根据<Windows核心编程>一书上的理解)
试了SendMessage发送WM_SETTEXT是可以的

Win32.SendMessage((IntPtr)0x0006042A, Win32.WM_SETTEXT, IntPtr.Zero, System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi("this is a test"));


这个是 notepad 的查找对话框 上面除了那个文本框使用SendMessage设置的 其他的用的是SetWindowText设置的
  相关解决方案