我想在DELPHI里调用  NetMessageBufferSend 此API怎么调用?谢谢

解决方案 »

  1.   

    这个给你参考一下主要是要向局域网内的机器发送信息。 
    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;
    function NetSend(Dest, Msg: string): Longint; overload;
    begin
      Result := NetSend(Dest, '', Msg);
    end;function NetSend(Msg: string): Longint; overload;
    begin
      Result := NetSend('', '', Msg);
    end;// Example:
    procedure TForm1.Button1Click(Sender: TObject);
    const
      NERR_BASE = 2100;
      NERR_NameNotFound = NERR_BASE + 173;
      NERR_NetworkError = NERR_BASE + 36;
      NERR_Success = 0;
    var
      Res: Longint;
      sMsg: string;
    begin
      Res := NetSend('LoginName', 'Your Message...');
      case Res of
        ERROR_ACCESS_DENIED: sMsg := 'user does not have access to the requested information.';
        ERROR_INVALID_PARAMETER: sMsg := 'The specified parameter is invalid.';
        ERROR_NOT_SUPPORTED: sMsg := 'This network request is not supported.';
        NERR_NameNotFound: sMsg := 'The user name could not be found.';
        NERR_NetworkError: sMsg := 'A general failure occurred in the network hardware.';
        NERR_Success: sMsg := 'Message sent!';
      end;
      ShowMessage(sMsg);
    end;
      

  2.   

    查查SDK没有吗?从来没有用过.......
      

  3.   

    The NetMessageBufferSend function sends a buffer of information to a registered message alias.Security RequirementsNo special group membership is required to execute NetMessageBufferSend on a LAN Manager or Windows NT system. Admin, Accounts, Print, or Server operator group membership is required to successfully execute NetMessageBufferSend on a remote server.NET_API_STATUS NetMessageBufferSend(    LPTSTR servername,
        LPTSTR msgname,
        LPTSTR fromname,
        LPBYTE buf,
        DWORD buflen
       );
     ParametersservernamePointer to a Unicode string containing the name of the remote server on which the function is to execute. A NULL pointer or string specifies the local computer.msgnamePointer to a Unicode string containing the message name to which the message buffer should be sent.fromnamePointer to a Unicode string containing the message name sending the information. The fromname parameter is new for Windows networking. This parameter is needed for sending interrupting messages from the computer name rather than the logged on user. If NULL is specified, the message is sent from the logged-on user as with LAN Manager 2.x.bufPointer to a buffer of message text.buflenThe length, in bytes, of the message text in buf.
      

  4.   

    查查SDK帮助没有吗?从来没有用过!
      

  5.   

    上面的好象是动态载入的,那还没有没其他的方法呢?
    如 WINDOWS.PAS 里就有好多的API,没有没可能把
    他也加进去?
      

  6.   

    to bluenightsky() 
    好,能拿出来大家分享一下吗?
      

  7.   

    const
    NERR_BASE = 2100;
    NERR_NameNotFound = NERR_BASE + 173;
    NERR_NetworkError = NERR_BASE + 36;
    NERR_Success = 0;function NetMessageBufferSend(servername: LPCWSTR; msgname: LPCWSTR;
      fromname: LPCWSTR; buf: Pointer; buflen: DWORD): DWORD; stdcall; external 'netapi32.dll' name 'NetMessageBufferSend';
    发送函数
    function sendmsg(destIP,msg:string):dword;
    var fromname: PWideChar;
        DestWideChar: PWideChar;
        MessagetextWideChar: PWideChar;
        str:string;
    begin
        try
        GetMem(MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
        GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1);
        GetMem(fromname,20*sizeof(widechar)+1);
        StringToWideChar(Msg, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
        StringToWideChar(DestIP, DestWideChar, 20 * SizeOf(WideChar) + 1);
        str:='0';
        StringToWideChar(str, fromname, 20 * SizeOf(WideChar) + 1);
        Result := NetMessageBufferSend(nil, DestWideChar,fromname,MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1)
        finally
        freemem(DestWideChar,0);
        freemem(MessagetextWideChar,0);
        freemem(fromname,0);
        end;
    end;
      

  8.   

    windows里面没有自带这个API函数吗?那就自己写吧
      

  9.   

    uses 那个包含API的Unit就可以了JEDI有完整的API接口声明的