我想给一个程序做一个外挂,基本的功能就是我的程序A启动其他的程序B,程序A始终依附在程序B的边框上.
就有点像以前winamp播放器的那种外挂.
程序B移动的时候程序A也跟着移动
程序B关闭的时候程序A也跟着关闭
程序B可以向程序A文本框中写数据
在网上查了写资料,好像都要用到钩子之类的技术~~~各位高手有什么高见,分不够可以再加
就有点像以前winamp播放器的那种外挂.
程序B移动的时候程序A也跟着移动
程序B关闭的时候程序A也跟着关闭
程序B可以向程序A文本框中写数据
在网上查了写资料,好像都要用到钩子之类的技术~~~各位高手有什么高见,分不够可以再加
或者写dll注入目标进程,使用SetWindowLong增加目标窗体的WndProc,然后也是截获该窗体的消息进行处理。前者实现方便些,后者效率高些。
不过用.NET都不好办。
lake_cx:在c++下实现也可以,能不能详细介绍一下,谢谢
本人的C++水平真的有限啊
期待高手啊!
顺便问一下vs2005里的c++可以么?
真的没在vs2005里面用过c++
B frm = new B();
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
frm.Show(this);
}
protected override void OnLayout(LayoutEventArgs levent)
{
base.OnLayout(levent);
frm.Height = this.Height;
frm.Top = this.Top;
frm.Left = this.Right;
}
protected override void OnLocationChanged(EventArgs e)
{
base.OnLocationChanged(e);
frm.Height = this.Height;
frm.Top = this.Top;
frm.Left = this.Right;
}
现在的问题是A和B是两个独立的程序,
B程序是以前的工程师写的,
因为里面有很多参数要计算获得,操作上不方便
我想在他的基础上做点操控上的扩展,
B的源代码已经没有了
:-(...
不过貌似微软自己的dll也用了Hook,但是不知道他怎么搞的
在网上看了半天似乎C#是不支持键盘鼠标以外的全局钩子的还有写全局钩子是不是要写在dll里啊?小弟第一次接触钩子程序,对mfc也不熟悉,请对指教
谢谢
1、假设你的主程序为项目A,HookDll为项目B,项目B中导出两个函数叫SetHook和UnHook(举例而已,下同)。
2、项目A启动就CreateFileMapping、MapViewOfFile写进去一个用于接受消息的窗体(项目A中的一个Handle),然后调用HookDll的SetHook。
3、项目B中的SetHook函数中使用SetWindowsHookEx安装钩子(你可以试试WH_GETMESSAGE的钩子),并设置一个钩子函数HookProc,HookDll中的HookProc中使用OpenFileMapping、MapViewOfFile读取项目A中的那个窗体的Hanlde(设置个全局变量让它只读一次),然后直接将消息用SendMessage转发给这个Handle(加一个自定义消息进行转发)。
4、项目A中添加接受消息的窗体的消息映射,处理它的窗体移动、改变大小等消息(需要用FindWindow定位目标窗体的Handle,过滤掉非此窗体的消息)。
注意:写代码时谨记,HookDll是多份映像,并非只有A进程中才有。事实上SetHook以后目标进程会装载HookDll,此时HookProc是在目标进程中执行的,因此只能通过内存文件映射等方法进行通信(进程间通信)
http://topic.csdn.net/u/20080227/14/8bce0844-bd15-42f0-9cda-a343d5d6601b.html?seed=2111206245
http://topic.csdn.net/u/20080227/14/8bce0844-bd15-42f0-9cda-a343d5d6601b.html?seed=2111206245
http://topic.csdn.net/u/20080227/14/8bce0844-bd15-42f0-9cda-a343d5d6601b.html?seed=2111206245
http://www.codeproject.com/KB/system/globalsystemhook.aspx是一个c++和c#混合实现Global Hook的例子
很有参考价值各位高手一起研究啊!!!
莫非真像有写帖子上讲的vs2005编译器编译的全局钩子都不好用?期待高手一同测试~~~
是否可行?
我还真没考虑过能不能把另外一个进程放到自己的窗体里
就好比我做一个框架程序,把别人的进程放到自己的框架里如果能的话也许也不矢是一个解决办法