Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: aka Net Send Добавлено: 08.07.04 15:00  

Автор вопроса:  Иной
Народ, приветствую!
Кто-нибудь в курсе, как из кода на VB .Net отправить сообщение по сети (так как это делает " net send")? Поделитесь мыслями, будте щедрыми ;)

Ответить

  Ответы Всего ответов: 20  

Номер ответа: 1
Автор ответа:
 freeloader



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #1
Добавлено: 08.07.04 15:41
shell "net send ''''"
???

Ответить

Номер ответа: 2
Автор ответа:
 Иной



Вопросов: 19
Ответов: 50
 Профиль | | #2 Добавлено: 08.07.04 17:16
Нууу, это не серьезно. Нужно без shell обойтисю. Наверняка есть какие-то функции.

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 08.07.04 18:03
Есть и с пом. АПИ...

NetMessageBufferSend

Ответить

Номер ответа: 4
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #4
Добавлено: 08.07.04 18:45
в .Net Fw средств для этого нет. Используйте указанную функцию API.

Ответить

Номер ответа: 5
Автор ответа:
 Иной



Вопросов: 19
Ответов: 50
 Профиль | | #5 Добавлено: 09.07.04 10:11
Ок, понятно. Но тогда есть вопрос по использованию API в .Net FW.
я вот что делаю
Declare Auto Function NetMessageBufferSend Lib "Netapi32.dll" ( _
   ByVal srv As String, ByVal MsgName As String, ByVal FromName As String, ByRef buf As String, ByVal BufLen As Integer) As Integer

Dim s As String = "Сообщение"
      ;Dim i As Integer = NetMessageBufferSend("localhost", "test1", "test2", s, Len(s))

И нифига, функция отрабатывает и возвращает значение 52. А что за 52 не знаю, потому как даже константы объявить не смог.

в SDK сказано:
 Header: Declared in Lmmsg.h; include Lm.h.
 Library: Use Netapi32.lib.

Но у меня на диске нет ни "Netapi32.lib", ни "Lmmsg.h", ни "Lm.h".

Поэтому вместо "Netapi32.lib" я использовал "Netapi32.dll", а вместо *.h не знаю что юзать.
Подскажите, плиз, как использовать АПИ функции.

Ответить

Номер ответа: 6
Автор ответа:
 Воронков Василий



Вопросов: 1
Ответов: 90
 Профиль | | #6 Добавлено: 09.07.04 13:34
> в .Net Fw средств для этого нет. Используйте указанную функцию API.

Ни фига себе! А сокеты на что?

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 09.07.04 13:37
А теперь вопрос, что проще ? :)

Ответить

Номер ответа: 8
Автор ответа:
 Иной



Вопросов: 19
Ответов: 50
 Профиль | | #8 Добавлено: 09.07.04 14:16
а как на счет моего вопроса? Где брать все эти либы и *.h?

Ответить

Номер ответа: 9
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 09.07.04 14:39
Ну дык и используй ДЛЛ... Все что там написано это для Си... Т.е. написано где эта хрень декларируется... Ты же, как я понял, объявляешь все вручную...

ЗЫ
НЕТ не назнимаюс, пакость это (имхо), так что жди Павла... он тут один этой пакостью увлекается и верит в неее... хотя может и не один...

Ответить

Номер ответа: 10
Автор ответа:
 freeloader



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #10
Добавлено: 09.07.04 15:21
2sne:
не один :) не отвергаю .NET, но и не злоупотребляю.

Кстати Эпплман прям под sne и ему подобных писал, может дать им почитать?
Или их уже ничето не переубедит? :)

Ответить

Номер ответа: 11
Автор ответа:
 Андрей Никитин



ICQ: 325172082 

Вопросов: 3
Ответов: 81
 Профиль | | #11 Добавлено: 09.07.04 15:36
Итак пока вот что получилось:

using System.Runtime.InteropServices;
using System.Text;

[DllImport("netapi32.dll", CharSet=CharSet.Unicode)]
public static extern int NetMessageBufferSend(string servername, string msgname, string fromname, [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.U1, SizeParamIndex=4)] byte[] buf, [MarshalAs(UnmanagedType.U4)] int buflen);

private void button1_Click(object sender, System.EventArgs e)
{
  int retCode;
  byte[] buf = Encoding.ASCII.GetBytes("It`s I am";);
  retCode = NetMessageBufferSend("Irina", "Hello", "Andrey", buf, buf.Length);
}

...Возвращает ошибку № 5 - "Отказано в доступе" - (сеть управляется серваком). В MSDN сказано, что использовать NetMessageBufferSend могут администраторы или операторы сервера. Вывод если у тебя есть права администратора - надо настроить разрешения в проге.

...Ошибка № 52 - "Не удалось подключиться к сети из-за существования совпадающих имен. Измените имя компьютера и повторите попытку". - Возможно неправильный регистр в именах отправителя и получателя.

>sne. Не стоит так пинать FW - набор классов действительно очень удобный (IMHO). А учитывая, что он (FW) еще и бесплатный...

Ответить

Номер ответа: 12
Автор ответа:
 Андрей Никитин



ICQ: 325172082 

Вопросов: 3
Ответов: 81
 Профиль | | #12 Добавлено: 09.07.04 15:38
Вдогонку. Примерчик на C#, но думаю перевести на VB.NET не составит труда :)

Ответить

Номер ответа: 13
Автор ответа:
 Иной



Вопросов: 19
Ответов: 50
 Профиль | | #13 Добавлено: 09.07.04 15:39
Короче капец полный! С API функциями разобрался уже, все нормуль. Но у меня такое подозрение, что "net send" делает все иначе, он не пользуется "NetMessageBufferSend".
Дело в следующем, один из параметров "NetMessageBufferSend" - msgname.
Описание:
[in] Pointer to a constant string that specifies the message alias to which the message buffer should be sent.
Короче, в качестве этого параметра нужно передавать имя учетной записи, зарегистрированной в системе, на которую отправляется сообщение.
[b]Вопрос[/b]: каким таким каком мне узнать, кто там в системе работает?
[b]Ответ[/b]: "NetMessageNameGetInfo".
[b]НО[/b]! Для того чтобы выполнить эту функцию и получить данные с удаленной тачки необходимо там иметь права админа :(
А как же тогда работает "Net Send"? Неужели через сокеты. Это не интересно :(

Ответить

Номер ответа: 14
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #14
Добавлено: 09.07.04 16:14
freeloader, меня уже навряд-ли что-то переубедит... да конечно, жизнь заставит, буду программить, а так - нивафто :)

Можешь почитать VB6 vs. NET... там куча флэйма, но никто из сторон так никого и не переубедил ;)


Иной, могу закинуть код на VB6

Ответить

Номер ответа: 15
Автор ответа:
 Андрей Никитин



ICQ: 325172082 

Вопросов: 3
Ответов: 81
 Профиль | | #15 Добавлено: 09.07.04 16:15
using System;
using System.DirectoryServices;

Нарыл вот это (получает Domain user names):

namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
DirectoryEntry root = new System.DirectoryServices.DirectoryEntry("LDAP://RootDSE";);

string dnc = (string)root.Properties["defaultNamingContext"][0];
string path = "LDAP://CN=Users," + dnc;

DirectoryEntry users = new DirectoryEntry(path);
foreach (DirectoryEntry user in users.Children)
Console.WriteLine(user.Name);
}
}
}

Только вот при попытке воспроизвести это в Студии получил сообшение что пространство имен DirectoryServices не найдено в System !!! :(

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам