Форум: "Сети";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
Вниз
Посылка сообщения (типа 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c