Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Посылка сообщения (типа net send от другого имени..   Найти похожие ветки 

 
Ifrit ©   (2006-03-16 12:17) [0]

Помогите! Весь инет облазил - не нашел!
1 способ:

   GetMem(PWCMsgName, 2 * Length(nm) + 2);
   GetMem(PWCMsgFrom, 2 * Length(psvd) + 2);
   GetMem(PWCSendMsg, 2 * Length(s) + 2);
   StringToWideChar(nm, PWCMsgName, Length(nm) + 2);
   StringToWideChar(psvd, PWCMsgFrom, Length(psvd) + 2);
   StringToWideChar(s, PWCSendMsg, Length(s) + 2);
   Error := NetMessageBufferSend(nil, PWCMsgName,
                       PWCMsgFrom, PWCSendMsg, Length(s) * 2 + 2);


Если PWCMsgFrom := nil или := PWCMsgName, то все проходит нормально.. Но я-то хочу отправлять от другого имени, а тогда:
"NERR_NameNotFound - The message alias could not be found on the network."

2 способ:


 SetLength(dps, Length(sTo));
 CharToOEM(PChar(sTo), @dps[1]); sTo := dps;
 SetLength(dps, Length(from));
 CharToOEM(PChar(from), @dps[1]); from := dps;
 SetLength(dps, Length(s));
 CharToOEM(PChar(s), @dps[1]); s := dps;

 ZeroMemory(@Buf, SizeOf(Buf));
 For Len := 0 to Length(From) - 1 do Buf[Len] := From[Len + 1];
 For Len := 0 to Length(sTo) - 1 do
                           Buf[Length(From) + Len + 1] := sTo[Len + 1];
 For Len := 0 to Length(s) - 1 do
          Buf[Length(From) + Length(sTo) + Len + 2] := s[Len + 1];
 Len := Length(from) + Length(sto) + Length(s) + 3;
 MSopen := CreateFile(PChar("\\" + nm + "\mailslot\messngr"),
               GENERIC_ALL, FILE_SHARE_READ, nil, OPEN_EXISTING,
                                                FILE_ATTRIBUTE_NORMAL, 0);

 WriteFile(MSopen, Buf, Len, Len, nil);
 

 Но в этом случае сообщение обрезается до 128 символов... Притом возвращает в Len полную длину, как будто отправил все...


 
GanibalLector ©   (2006-03-17 01:12) [1]

Через Raw делай! И примеры найдешь в сети ;)
З.Ы. Делал,работает,НЕ дам исходники. Могу только проконсультировать ;)


 
Ifrit ©   (2006-03-17 08:57) [2]


> Через Raw делай! И примеры найдешь в сети ;)
> З.Ы. Делал,работает,НЕ дам исходники. Могу только проконсультировать
> ;)

Как послать через Raw? Можешь кинуть ссылку?


 
Ifrit ©   (2006-03-17 08:58) [3]

Один способ заработал..
Я просто запутался с преобразованием типов..

function NSend(nm, s, psvd: WideString): Boolean;
const WideSize = SizeOf(WideChar);
Var FromName: String;
   n: Cardinal;
Begin
Result := False;
FromName := "1";
psvd := FromName;
n := NetMessageNameAdd(nil, PWideChar(FromName));
If (n = 0) or (n = 2276) then begin
 try
  n := NetMessageBufferSend(nil, PWideChar(nm), PWideChar(psvd),
      PBYTE(s), Length(s) * WideSize + 1);
  if n = ERROR_SUCCESS then Result := True;
 finally
  NetMessageNameDel(nil, PWideChar(FromName));
 end;
end;
End;


 
Ifrit ©   (2006-03-17 10:44) [4]

Звиняюсь, опять ошибка, в функциях NetMessageNameAdd,
NetMessageNameDel нужно вставлять строки в формате Unicode:

Var Data: PAnsiChar;
   er: DWord;
   Unicode: PWideChar;
...  
 Data := StrAlloc(SizeOf(sFrom) * WideSize + 1);
 Unicode := StringToWideChar(sFrom, Pointer(Data), SizeOf(sFrom) *                                                                   WideSize + 1);
 er := NetMessageNameAdd(nil, Unicode);
...
 NetMessageNameDel(nil, Unicode);
 StrDispose(Data);



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

Текущий архив: 2006.07.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
3-1148235957
remlin
2006-05-21 22:25
2006.07.23
Подключение к БД MS SQL Server


15-1150970600
Adil
2006-06-22 14:03
2006.07.23
BDS 4.0


2-1151860741
студент12
2006-07-02 21:19
2006.07.23
Как найти путь


15-1150724493
Alien1769
2006-06-19 17:41
2006.07.23
Какой алгоритм использовать


3-1147931584
KinnOk
2006-05-18 09:53
2006.07.23
Сохранение или отмена изменений