信使服务(100分)

  • 主题发起人 主题发起人 hellfire2008
  • 开始时间 开始时间
H

hellfire2008

Unregistered / Unconfirmed
GUEST, unregistred user!
用Delphi编写局域网发送消息时,可以利用Win2000的信使服务,可是不想要信使服务这四个字做为标题,想改成我自己想要的,还有就是从某某到某某,能否把机器名改成人名
 
怎么改其它程序的标题?
 
怎么没人回答
 
应该可以 金山快译 都可以 等待高手
 
前面的不太可能。 机器名可以改(就是实现匿名发送消息) 函数如下:


function NetSend(dest, Source, Msg: string): Longint; overload;

type

TNetMessageBufferSendFunction = function(servername, msgname, fromname: PWideChar;

buf: PWideChar; buflen: Cardinal): Longint;

stdcall;

var

NetMessageBufferSend: TNetMessageBufferSendFunction;
SourceWideChar: PWideChar;
DestWideChar: PWideChar;
MessagetextWideChar: PWideChar;
Handle: THandle;

begin

Handle := LoadLibrary('NETAPI32.DLL');
if Handle = 0 then

begin
Result := GetLastError;
Exit;
end;

@NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend');

if @NetMessageBufferSend = nil then
begin
Result := GetLastError;
Exit;
end;

MessagetextWideChar := nil;
SourceWideChar := nil;
DestWideChar := nil;

try

GetMem(MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);

GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1);

StringToWideChar(Msg, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);

StringToWideChar(Dest, DestWideChar, 20 * SizeOf(WideChar) + 1);

if Source = '' then

Result := NetMessageBufferSend(nil, DestWideChar, nil,

MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1)

else

begin

GetMem(SourceWideChar, 20 * SizeOf(WideChar) + 1);

StringToWideChar(Source, SourceWideChar, 20 * SizeOf(WideChar) + 1);

Result := NetMessageBufferSend(nil, DestWideChar, SourceWideChar,

MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);

FreeMem(SourceWideChar);

end;

finally

FreeMem(MessagetextWideChar);

FreeLibrary(Handle);

end;

end;
 
其中dest为目标极其 source为发送者名称(置空则为机器名) msg为发送的信息。
 
to:Andy263
至于后面的机器名改为人名我知道,我是想让标题和目标机器的字改为我想要的
 
第一个问题基本上不可能。
 
to hellfire2008:

这个窗口的标题改不掉的。 目标机器名可以显示为ip 其他的也不可能。
 
去问问MS吧,肯定有答案!
 
没高手了吗
 
第二个问题:可以用邮件槽的方式来简单解决。
{=================================================================
功 能 : 向指定的机器发送桌面消息。
参 数 : 显示给用户的名称,指定机器的名称,发送的消息。
作者: Highpeak
版 本 : 1.0 2003/9/3/ 10:00
其他说明:通过创建邮件槽的方式向其他机器发送桌面消息。
=================================================================}
procedure SendNetMessage(YourName, ComputerName, MessageStr: String);
Var
Rc: LongBool;
MsHandle: Longint;
MsgText: String;
BytesWritten: Cardinal;
MailSlotName: String;
begin
MailSlotName := '//' + ComputerName + '/mailslot/messngr';
MsgText := YourName + Chr(0) + ComputerName + Chr(0) + MessageStr + Chr(0);
MsHandle := CreateFile(PChar(MailSlotName), GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, $FFFFFFFF);
if MsHandle = INVALID_HANDLE_VALUE then
RaiseLastWin32Error;
RC := WriteFile(MsHandle, Pointer(MsgText)^, Length(MsgText), BytesWritten, 0);
if not Rc then
RaiseLastWin32Error;
Rc := CloseHandle(MsHandle);
end;
 
后退
顶部