我有什么方法可以截获windows信使服务的消息内容??
解决方案 »
- 关于库存管理系统设计的思路
- 如何安全卸载DLL?
- ◎求助◎关于提取数据库中的记录到ComboBox.Text中 ÷抱歉!小弟就这点分了÷
- 请教各位一个关于clientdataset事务处理的问题!
- 怎么样使LOGO窗体延迟3秒钟?100分送在线等待给分!!1
- 怎么样动态地从一个.mdb里copy 一个表到新的.mdb里面啊
- 高手请进,MIDAS 中最难的问题。如何在应用服务器端 强制关掉应用服务器?
- delphi高手请注意:怎样设置nmftp的数据传输方式是ASCII还是BINARY?
- 哪里有象OICQ或outlook那样分组显示按钮的控件
- 我用 IdMappedPortTCP1 做了端口映射加密处理传输,就是大数据包的时候出现卡顿,怎么解决
- 大家知道在VC中打::就能弹出全局函数和全局变量的代码辅助框,那么我想在DELPHI中想要看看它都支持哪些全局API和变量,怎么看
- 好奇的人进来领分(快毕业了,分多了,为兄弟们发工资啦)
procedure TForm1.Button1Click(Sender: TObject);
var
Handle:THandle;
Buf: array[0..1024] of Char;
begin
Handle:=FindWindow(nil,'信使服务 ');//注意,后面有一个空格
Handle:=FindWindowEX(Handle,0,'static',nil);
SendMessage(Handle, WM_GETTEXT, 1024, Integer(@Buf));
Memo1.Text:=buf;
end;
procedure TMailSlotServer.Open;
var
ASlotName: AnsiString;
const
SYSMAILSLOT = 'messngr';//信使的邮槽名
begin
if FActive then Exit;
// Mailslot 识别名称
ASlotName := '\\.\mailslot\' + SYSMAILSLOT;
FHandle := CreateMailslot(
pchar(ASlotName), // MailSlot 识别名称
0, // 讯息长度的最大值,设为零表示不限
MAILSLOT_WAIT_FOREVER, // read time-out
nil); // 安全属性,先暂时采用预设值
if FHandle = INVALID_HANDLE_VALUE then
FActive := False
else
begin
FActive := True;
FWaitThread.Resume;
end;
end;
然后进行监听(最好用单独的线程来监听):
procedure TMailSlotServer.ReadFromMailSlot;
var
NextSize: DWORD;
MessageCount: DWORD;
Result: BOOL;
Buffer: pchar;
begin
if FHandle = INVALID_HANDLE_VALUE then Exit;
// 侦测 MailSlot 中是否有资料
Result := GetMailslotInfo(Fhandle, nil,
NextSize, @MessageCount, nil);
if not Result or (NextSize = MAILSLOT_NO_MESSAGE) then
Exit;
// 如果还有资料 (MessageCount <> 0),逐一读出资料
while Result and (MessageCount <> 0) do
begin
// 资料的长度
Buffer := AllocMem(NextSize + 1);
try
// 读出资料
FileRead(Fhandle, Buffer^, NextSize);
if Assigned(FOnDataAvailable) then
FOnDataAvailable(Self, StrPas(Buffer));
finally
FreeMem(Buffer, NextSize + 1);
end;
// 继续看看 MailSlot 中还有没有资料
Result := GetMailslotInfo(Fhandle, nil,
NextSize, @MessageCount, nil);
end;
end;发送用WriteFile(hToSlot,//目标邮槽句柄
Pointer(Data)^,
Length,
BytesWritten,
NIL))
但首先要知道信使服务的发送格式,监听也一样网络上有一个mdMailslot组件提供完整功能
Handle:THandle;
Buf: array[0..1024] of Char;
begin
Handle:=FindWindow(nil,'信使服务 ');//注意,后面有一个空格
Handle:=FindWindowEX(Handle,0,'static',nil);
SendMessage(Handle, WM_GETTEXT, 1024, Integer(@Buf));
Memo1.Text:=buf;
end;