Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Консольная утилита NET SEND / 17 сообщений из 17, страница 1 из 1
14.04.2012, 10:39
    #37753815
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
Уважаемые гуру, здравствуйте!
Мне необходимо отправлять/получать сообщения от пользователей
при помощи NET SEND
При таком запуске:
Код: plsql
1.
RUN net send * "Текст сообщения" > res.txt


мелькает окно, файл создается, а так:
Код: plsql
1.
RUN /N2 net send * "Текст сообщения" > res.txt


окно свернуто, но и файл не создается!!! , " > res.txt" добавляется к сообщению :(
Подскажите, pls, как сделать так, чтобы и окна не было, и файл создавался.

PS. Sent и WinSent Messenger не подходят, только NET SEND
...
Рейтинг: 0 / 0
14.04.2012, 14:25
    #37753922
Dag
Dag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
Отказаться от RUN
Возможно ShellExecute поможет.
...
Рейтинг: 0 / 0
14.04.2012, 15:00
    #37753939
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
Dag,

Кроме кода завершения от ShellExecute больше ничего не дождешься,
а мне нужен файл с текстом
...
Рейтинг: 0 / 0
14.04.2012, 15:35
    #37753962
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
Jonny540,

в порядке бреда - пишете "net send * "Текст сообщения" > res.txt" в батник, запускаете батник шеллэкзекьютом...
...
Рейтинг: 0 / 0
14.04.2012, 16:05
    #37753999
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
Если и отправка и получение выполняется из среды FoxPro, то зачем Вам вообще внешняя утилита? Делайте запись сообщений в DBF-таблицы общего доступа и периодически просматривайте ее содержимое из приложений FoxPro. Если там есть сообщение и оно адресовано текущему пользователю, то отображайте сообщение.
...
Рейтинг: 0 / 0
14.04.2012, 17:23
    #37754070
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
ВладимирМ,

Мысль, конечно, интересная, я уже думал над этим
Для просмотра придется использовать таймер, мне этого очень
не хотелось бы, там их и так уже 3 штуки, к тому же надо доставлять
сообщения оперативно, а не через несколько минут (меньше интервал
поставить не могу)
...
Рейтинг: 0 / 0
14.04.2012, 17:25
    #37754071
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
tanglir,

" > res.txt" добавляется к сообщению , как ни крутись...
...
Рейтинг: 0 / 0
14.04.2012, 23:38
    #37754322
Консольная утилита NET SEND
Я не гуру, но помочь попробую. Я тоже давно отправлял сообщения пользователям ч/з run, но потом сис.админы эту службу у нас заблоктровали, и я сделал по другому отправку сообщений. Достоинства отправки сообщений ч-з run - простота. Как конкретно сделать, чтоб окно не выскакивало я тебе не скажу, но посоветую посмотреть на сайте forum.foxclub.ru, найди там по поиску, что тебе надо.
...
Рейтинг: 0 / 0
15.04.2012, 14:48
    #37754526
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
RUN без /N вызывает виртуальную ДОС-машину (CMD.EXE) а она выполняет команду.
RUN с /N вызывает виндовую функцию CreateProcess()
"... > res.txt" это синтаксис который понимает только CMD.EXE, для CreateProcess() это просто параметры которые надо передать в вызываемое приложение.
Поэтому надо так запускать:
Код: sql
1.
RUN /N2 CMD.EXE /C net send * "Текст сообщения" > res.txt


"... > res.txt" это указание перехватить вывод в консоль net.exe и сохранить в файл res.txt

Получить вывод можно еще так:
Код: sql
1.
2.
3.
4.
o=CreateObject("Wscript.Shell") 
x=o.Exec("net send * "Текст сообщения"") 
x.Terminate() 
? x.StdOut.ReadAll 
...
Рейтинг: 0 / 0
15.04.2012, 14:53
    #37754528
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
PS Пример с Wscript.Shell не проверял, взял тут .
...
Рейтинг: 0 / 0
15.04.2012, 14:59
    #37754531
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
Браво, Dima T, спасибо!
...
Рейтинг: 0 / 0
15.04.2012, 17:26
    #37754607
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
Jonny540ВладимирМ,

Мысль, конечно, интересная, я уже думал над этим
Для просмотра придется использовать таймер, мне этого очень
не хотелось бы, там их и так уже 3 штуки, к тому же надо доставлять
сообщения оперативно, а не через несколько минут (меньше интервал
поставить не могу)
А что, кто-то бьет по рукам? Какая собственно разница сколько таймеров в приложении и с каким интервалом они работают? Это никак и ни на что не влияет. Интервал срабатывания таймера секунд в 30 вполне себе можно считать оперативным.

На всякий случай напомню, что FoxPro - это однопоточное приложение. События выстраиваются в очередь. Это значит, что пока не отработает событие одного таймер событие другого таймера не будет исполнено. Будет ждать своей очереди. Вмешаться в процесс выполнения "чужого" события - не сможет. Разумеется, если только это специально не предусмотрено программистом.

И еще, если в системе много процессов, которые должны срабатывать периодически по таймеру, то я бы сделал общий диспетчер для подобных процессов. Т.е. один таймер - и список процессов, которые он должен вызывать.
...
Рейтинг: 0 / 0
16.04.2012, 10:38
    #37755131
Консольная утилита NET SEND
есть ещё варианты....
можно написать свою функцию, что-то типа такого
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
PROCEDURE SendMessage
LPARAMETERS cText
LOCAL lcTo, lcFrom, lcMessage, lnRes
DECLARE INTEGER NetMessageBufferSend IN NETAPI32 STRING,STRING,STRING,STRING,INTEGER
lcTo = STRCONV("169.255.0.1", 5) + CHR(0)  &&IP-адрес получателя
lcMessage = STRCONV(cText, 5) + CHR(0)
lnRes = NetMessageBufferSend(.Null., m.lcTo, .NULL., m.lcMessage, LEN(m.lcMessage)*2)
IF m.lnRes # 0
	MESSAGEBOX("Ошибка № " + ALLTRIM(STR(m.lnRes)), 48, "Ошибка отправки сообщения")
ENDIF
ENDPROC


в этом случае мелькать окно не будет

*-или так
loWsShell=CREATEOBJECT("Wscript.Shell")
loWsShell.Run('net send 169.255.0.1 Вася, привет!')

только не стоит забывать, что в любом случае требуется запуск службы сообщений на получателе
...
Рейтинг: 0 / 0
16.04.2012, 10:48
    #37755143
Консольная утилита NET SEND
Jonny540ВладимирМ,

Мысль, конечно, интересная, я уже думал над этим
Для просмотра придется использовать таймер, мне этого очень
не хотелось бы, там их и так уже 3 штуки, к тому же надо доставлять
сообщения оперативно, а не через несколько минут (меньше интервал
поставить не могу)

но зато при использовании разных вариантов net send (будь-то АПИ, будь-то Wscript), если служба сообщений на клиенте не запущена, то никакой оперативности не будет, т.к. клиент просто напросто не получит никакого сообщения...
такшта в варианте, предложенном Владимиром, есть свой плюс, т.к. нет зависимости от этой службы...
...
Рейтинг: 0 / 0
16.04.2012, 12:03
    #37755250
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
КонецЦиклаесли служба сообщений на клиенте не запущена, то никакой оперативности не будет, т.к. клиент просто напросто не получит никакого сообщения...
Если служба не запущена, она запускается автоматически из приложения

КонецЦиклаloWsShell=CREATEOBJECT("Wscript.Shell")
loWsShell.Run('net send 169.255.0.1 Вася, привет!')
В этом случае не будет формироваться файл (см. топик)

КонецЦиклаPROCEDURE SendMessage
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LPARAMETERS cText
LOCAL lcTo, lcFrom, lcMessage, lnRes
DECLARE INTEGER NetMessageBufferSend IN NETAPI32 STRING,STRING,STRING,STRING,INTEGER
lcTo = STRCONV("169.255.0.1", 5) + CHR(0)  &&IP-адрес получателя
lcMessage = STRCONV(cText, 5) + CHR(0)
lnRes = NetMessageBufferSend(.Null., m.lcTo, .NULL., m.lcMessage, LEN(m.lcMessage)*2)
IF m.lnRes # 0
	MESSAGEBOX("Ошибка № " + ALLTRIM(STR(m.lnRes)), 48, "Ошибка отправки сообщения")
ENDIF
ENDPROC


А надо ли "из пушки по воробьям", если можно обойтись одной командой?

КонецЦиклав варианте, предложенном Владимиром, есть свой плюс, т.к. нет зависимости от этой службы...
Я ведь не отвергаю этот вариант в принципе
...
Рейтинг: 0 / 0
16.04.2012, 17:05
    #37755828
Консольная утилита NET SEND
когда-то была у меня подобная задача с оповещениями... была она сначала сделана в лоб через WshShell Object... да, всего пара-тройка строк кода, но потом пользователей стало напрягать мелькание черного окна... тогда сделал через netapi.. да из пушки по воробьям, но все красиво...
одна проблема вот только была, надо было постоянно контролировать запущена служба приложений или нет... запускать её постоянно не вариант, т.к. хер знает запустилась она или нет, у кого-то не было вообще прав на запуск служб... запускать её от имени администратора, но надо знать его имя и пароль на каждом компьютере и хранить это все надо к тому же, т.к. компьютеры были не в домене.... так, сборная солянка была...
поэтому в итоге все-таки была сделана таблица, где для каждого пользователя были какие-то сообщения, которая периодически просматривалась...

ЗЫ. ну уж добавить ещё строчку, чтобы формировался файл, я думаю, тут все в состоянии...
...
Рейтинг: 0 / 0
16.04.2012, 17:22
    #37755862
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольная утилита NET SEND
КонецЦиклано потом пользователей стало напрягать мелькание черного окна
При /N2 окно не мелькает (свернуто)

КонецЦиклау кого-то не было вообще прав на запуск служб... запускать её от имени администратора, но надо знать его имя и пароль на каждом компьютере и хранить это все надо к тому же, т.к. компьютеры были не в домене
В данном конкретном случае все путём

КонецЦиклав итоге все-таки была сделана таблица, где для каждого пользователя были какие-то сообщения, которая периодически просматривалась...
Я же говорил, что не отвергаю этот вариант, но, я думаю, не стоит использовать всегда какое-то универсальное решение...
У нас должно быть как у хороших врачей - к каждому "пациенту" свой подход
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Консольная утилита NET SEND / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]