通过Windows的消息,在局域网内可以给另一台计算机发消息。可以通过Windows API
NetMessageBufferSend函数进行消息发送/
但Windows的消息不能保存,我想将别人发来的Windows消息进行保留,应该如何捕捉这样的信息?
NetMessageBufferSend函数进行消息发送/
但Windows的消息不能保存,我想将别人发来的Windows消息进行保留,应该如何捕捉这样的信息?
解决方案 »
- 图片的动态切换问题
- 如何Hook程序中代码的某段,并跳转取值后再跳回去
- 如何复制数据库的内容
- I/O错误145
- 我的程序通过网络运行,在有些机上进入数据录入时会显示"没有注册类别",是何问题
- MyiniFile.create何时才能创建一个文件?
- delphi中如何檢測內存泄露?高分送﹐在線等﹗急急急。UP有分﹗
- 在dbgrid列数事先未知的情况下,如何打印?(需要同时打印界面上其他控件的内容,而不仅仅是grid本身)
- 为什么DevExpress中的TCxLookupcombobox在开发BPL插件系统中,其EditValue的返回值是NULL。其他ExpressEditors中的控件情况也是一样?
- 想做个语音翻译软件,可惜没时间~`是否有人想做?我有资料~
- help me!! Dll问题!
- 100分求教怎样统计英文单词数?
用Hook? 是什么意思,能说清楚些吗? 有没有例子代码 ?
SysUtils, WinTypes, WinProcs, Messages, Classes, Controls, Forms;type
TFTSubclassWnd = class(TComponent)
private
FNewWndProcPtr : TFarProc;
FOldWndProcPtr : TFarProc;
FWindowHandle : HWnd;
protected
{ Virtual methods for descendants }
procedure NewWndProc(var Message: TMessage); virtual; abstract;
procedure AssignHandle; virtual;
{ Component methods }
procedure ReplaceWndProc;
procedure RestoreWndProc;
procedure CallOldWndProc(var Message: TMessage);
{ Protected properties }
property NewWndProcPtr: TFarProc read FNewWndProcPtr;
property OldWndProcPtr: TFarProc read FOldWndProcPtr;
property WindowHandle: HWnd read FWindowHandle;
public
{ Construction/destruction }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;implementationconstructor TFTSubclassWnd.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if not (AOwner is TForm) then
raise Exception.Create('Owner must be form');
AssignHandle;
ReplaceWndProc;
end;destructor TFTSubclassWnd.Destroy;
begin
RestoreWndProc;
inherited Destroy;
end;procedure TFTSubclassWnd.CallOldWndProc(var Message: TMessage);
begin
with Message do
Result := CallWindowProc(FOldWndProcPtr, FWindowHandle, Msg, wParam, lParam);
end;procedure TFTSubclassWnd.AssignHandle;
begin
with (Owner as TForm) do begin
HandleNeeded;
if (FormStyle = fsMDIForm) then
FWindowHandle := ClientHandle
else
FWindowHandle := Handle;
end;
end;procedure TFTSubclassWnd.ReplaceWndProc;
begin
FOldWndProcPtr := Pointer(GetWindowLong(FWindowHandle, GWL_WNDPROC));
FNewWndProcPtr := MakeObjectInstance(NewWndProc);
if (FNewWndProcPtr = nil) then
raise EOutOfResources.Create('Cannot allocate WndProc handle');
SetWindowLong(FWindowHandle, GWL_WNDPROC, LongInt(FNewWndProcPtr));
end;procedure TFTSubclassWnd.RestoreWndProc;
begin
SetWindowLong(FWindowHandle, GWL_WNDPROC, LongInt(FOldWndProcPtr));
if FNewWndProcPtr <> nil then
FreeObjectInstance(FNewWndProcPtr);
end;