Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Вниз

[?]NET SEND   Найти похожие ветки 

 
Юрий Ж.   (2006-01-22 14:21) [0]

Нашел в нете функцию отправки сообщений по NET SEND, но она почему-то не работает...Кто может что-то подсказать???

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;


 
Lamer@fools.ua ©   (2006-01-22 18:24) [1]

с какого потолка взято число 20?


 
Lamer@fools.ua ©   (2006-01-22 18:26) [2]

function NetSend(const AMessage, AToComputer: AnsiString): LongWord;
type
 TNetMessageBufferSend = function (ServerName, ToName, FromName: PWideChar;
 Buffer: Pointer; BufLen: DWORD): LongWord stdcall;
var
 NetApi32: HMODULE;
 NetMessageBufferSend: TNetMessageBufferSend;
 MessageW, ToComputerW: WideString;
begin
 Windows.SetLastError(NO_ERROR);
 NetApi32 := LoadLibrary("NetApi32.dll");
 if NetApi32 <= HINSTANCE_ERROR then
 begin
   Result := Windows.GetLastError;
   Exit;
 end;
 try
   NetMessageBufferSend := GetProcAddress(NetApi32, "NetMessageBufferSend");
   if @NetMessageBufferSend = nil then
   begin
     Result := ERROR_INVALID_FUNCTION;
     Exit;
   end;
   MessageW := WideString(AMessage);
   ToComputerW := WideString(AToComputer);
   Result := NetMessageBufferSend(nil, PWideChar(ToComputerW), nil,
     PWideChar(MessageW), Length(MessageW) * SizeOf(WideChar));
 finally
   FreeLibrary(NetApi32);
 end;
end;


 
Юрий Ж.   (2006-01-22 19:07) [3]

Эта функция также не работате :(
Возможно это связвно с тем, что операционка WinXP?
Возвращает результат 2273 - это вроде "Имя пользователя не можут быть найдено"....
И еще вотпрос:
Как отправить сообщение всей рабочей группе???
Вместь AToComputer писать имя рабочей группы???


 
Wistler ©   (2006-01-22 22:31) [4]

Я делал проще:

WinExec("net send CompName Message");


 
Юрий Ж.   (2006-01-22 23:18) [5]

А может нужно получать какие-то права???
>> WinExec("net send CompName Message"); - это будет на крайний случай =)


 
Rouse_ ©   (2006-01-23 09:30) [6]


> Как отправить сообщение всей рабочей группе???

Ставь звездочку вместо иени пользователя.
А пользователю не отправляет, потомучто не правильно пишешь его имя:
servername
[in] Pointer to a constant string that specifies the DNS or NetBIOS name of the remote server on which the function is to execute. If this parameter is NULL, the local computer is used.
Windows NT:  This string must begin with \\.


 
Юрий Ж.   (2006-01-23 10:44) [7]

Теперь выдает:
The filename, directory name, or volume label syntax is incorrect.
Пишу имя своего компьютера (так как пишется в удаленном доступе и как я настраивал в настройках подключения...)
> Windows NT:  This string must begin with \\. - это в C++??? А в Delphi тогда "\" или я не прав??? Эксперементировал с обоими - результат обин и тот-же :(

Как правильно получить имя компьютера???


 
Fay ©   (2006-01-23 11:11) [8]

2 Юрий Ж.   (23.01.06 10:44) [7]
>  в Delphi тогда "\" или я не прав???
Не прав.


 
Fay ©   (2006-01-23 11:12) [9]

2 Юрий Ж.   (23.01.06 10:44) [7]
> Как правильно получить имя компьютера???
Какого?


 
Rouse_ ©   (2006-01-23 11:56) [10]

попробуй сначала через Net Send, а потом как пройдет, этоже имя впиши к себе...



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
1-1144164074
Кашперук Иван
2006-04-04 19:21
2006.05.14
Как узнать текущий отображаемый контрол над контролом??


1-1144130382
denmin
2006-04-04 09:59
2006.05.14
Печать данных в одну строку.


2-1145626164
suharew
2006-04-21 17:29
2006.05.14
Запись в Com порт в шестнадцатеричном формате


1-1143794356
Guf
2006-03-31 12:39
2006.05.14
Количество страниц в документе MS Word


2-1145769990
Александр123123
2006-04-23 09:26
2006.05.14
Как в цикле прообежаться по свойствам компонента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский