大名鼎鼎的WinVNC远程控制软件几年前就公开了VC源码,不过一直没有DELPHI的源码,最近终于从网上搜索到的,对比VC的源码,基本上是直接转过来的,不过有点问题,只能截获到当前EXE主窗口的消息,很奇怪,大家看看,哪里有问题,希望能解决这个问题
由于CSDN的回复长度有限制,所以贴在了大富翁论坛上,地址:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=3421488
由于CSDN的回复长度有限制,所以贴在了大富翁论坛上,地址:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=3421488
http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=919
简单的修改你的错误:>>只能截获到当前EXE主窗口的消息
最简单,可以如下修改:
// PostMessage(
// hVeneto,
// UpdateRectMessage,
// vwParam,
// vlParam
// ); PostMessage(
HWND_BROADCAST,
UpdateRectMessage,
vwParam,
vlParam
);hVeneto 改为 HWND_BROADCAST还有几种其它的改法, 代码不是直接修改你的,有点小区别,但原理是一样的,如:
library hthooks;function StartHook(hForm: THandle): Integer; stdcall;
begin
....
hMemFile := CreateFileMapping(MAXDWORD, nil, PAGE_READWRITE, 0,
SizeOf(THandle), memFileName);
pFormHnd := MapViewOfFile(hMemFile, FILE_MAP_WRITE, 0, 0, 0);
if pFormHnd = nil then
begin
Result := 4;
UnhookWindowsHookEx(hMouseHook);
Exit;
end else
pFormHnd^ := hForm;begin
DLLProc := @EntryProc;
hMemFile := OpenFileMapping(FILE_MAP_WRITE, False, memFileName);
if hMemFile <> 0 then
pFormHnd := MapViewOfFile(hMemFile, FILE_MAP_WRITE, 0, 0, 0);
end.
全局HOOK, 在不同的程序,对应的 hVeneto 的值是不同的,这点如果你明白了,你的问题所在就很清楚了。另外,一些声明错了,如stdcall, cdecl
另外,label1, label2 的取值有些问题,
dll中的消息处理,也是一塌糊涂的感觉!
自己注意下