DLL - работа с консольными утилитами (из SPF)

Обсуждение программ nnCron и nnCron LITE

DLL - работа с консольными утилитами (из SPF)

Postby AlikasS » Tue, 04 Aug 2009, 06:33

sexecl.dll сделана в SPF в XP SP3 (и работает по видимому только в SP3),
из либы devel\~ac\lib\win\process\exec.f взято слово
SEXECL
\ Простейшая работа с консольными утилитами.
\ SEXECL - запуск программы с заданной ком.строкой и stdin'ом,
\ получение её stdout'а в виде строки.

работает так
Code: Select all
WINAPI: sexecl sexecl.dll
0 VALUE buffer \ переменная для хранения адреса буфера
1024 ALLOCATE THROW TO buffer \ выделяем место под буфер
buffer S" " S" ping" sexecl \ сама команда, в буфере результаты команды ping в виде AZ строки
buffer ASCIIZ> OEM2WIN TYPE \ смотрим результат. ( иногда OEM2WIN не нужен)

можно еще проще
Code: Select all
WINAPI: sexecl sexecl.dll
HERE DUP S" " S" ping" sexecl ASCIIZ> OEM2WIN TYPE

P.S. для себя делал для избавления от промежуточного файла для анализа вывода
START-APPW: "%COMSPEC% /c ipconfig > temp\file1.log"
для определения IP
сейчас достаточно сделать
buffer S" " S" ipconfig" sexecl и в буфере результат.
может кому пригодиться ;-)
P.P.S я думаю потенциально полезная штука, может
программисты на
http://fforum.winglion.ru
помогут, сделать либы работающие во всех сервис-паках
сборка DLL в XP SP2 и SP3
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: DLL - работа с консольными утилитами (из SPF)

Postby VoidVolker » Sat, 08 Aug 2009, 20:39

Если мне не изменяет память, то использовал для работы с консолями то-ли утилитку inetd.exe то-ли сокеты. :?
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: DLL - работа с консольными утилитами (из SPF)

Postby AlikasS » Thu, 13 Aug 2009, 16:09

обновленная dll должна работать во всех сервиспаках
sexecl.dll
для примера
Code: Select all
#( test-GET-IP
NoLog
NoActive
WINAPI: sexecl sexecl.dll
USER-VALUE list-contentsforip \ переменная под хранение адреса буфера под прочитанную строку
USER-VALUE ip-string \ переменная под хранение адреса буфера под строку с IP адресом
0 VALUE buffer \ переменная для хранения адреса буфера
Action:
258 ALLOCATE THROW TO list-contentsforip \ выделяем место под буфер
64 ALLOCATE THROW TO ip-string \ выделяем место под буфер
1024 ALLOCATE THROW TO buffer \ выделяем место под буфер

\ работаем
buffer S" " S" ipconfig" sexecl

\ анализ вывода ipconfig
buffer ASCIIZ> BEGIN SREAD-LINE WHILE
list-contentsforip PLACE
list-contentsforip COUNT S" *IP*" WC-COMPARE
\ list-contentsforip COUNT S" 192.168.0*" WC-COMPARE 0= AND
list-contentsforip COUNT S" 000*" WC-COMPARE 0= AND
IF
list-contentsforip COUNT 43 /STRING ip-string PLACE
ELSE
S" " ip-string PLACE
THEN
REPEAT
2DROP 2DROP

ip-string COUNT MsgBox
buffer ASCIIZ> MsgBox
\ FILE-APPEND: "%raslogname%" "%WW% %DD% %hh%:%mm%:%ss% connect %CONNECTION% IP-%ip-string COUNT%%crlf%"

list-contentsforip FREE DROP
ip-string FREE DROP
buffer FREE DROP
)#
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: DLL - работа с консольными утилитами (из SPF)

Postby SaMM » Wed, 13 Jan 2010, 19:59

А как sexecl использовать с "внешними" консольными утилитами,
такими как Listdlls.exe handle.exe pslist.exe ?
SaMM
 
Posts: 236
Joined: Fri, 25 Aug 2006, 12:33

Re: DLL - работа с консольными утилитами (из SPF)

Postby AlikasS » Thu, 14 Jan 2010, 02:39

SaMM wrote:А как sexecl использовать с "внешними" консольными утилитами,
такими как Listdlls.exe handle.exe pslist.exe ?

эти утилиты просят согласие при своем первом запуске,
поэтому в простейшем виде так
Code: Select all
#( pslist-msg-ini
\ задача для первого запуска, что бы согласится с условиями pslist, потом задачу можно удалить
\ запуск от имени SYSTEM ибо dll будет запускать утилиты от его имени
NoActive
NoLog
Action:
START-APPW: pslist.exe
\ pslist.exe был скопирован в директорию крона
)#

#( pslist-msg
\ рабочая задача
WINAPI: sexecl sexecl.dll
NoActive
NoLog
Action:
HERE DUP S" " S" pslist.exe" sexecl ASCIIZ> MsgBox
)#

есть еще тема
Отследить текст в консольном приложении
отличие от dll решения из этой темы:
- по строчный доступ к выводу утилит ,
тогда как dll работает сразу со всей инфой в выводе утилит
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: DLL - работа с консольными утилитами (из SPF)

Postby SaMM » Wed, 20 Jan 2010, 23:09

есть еще тема
Отследить текст в консольном приложении
отличие от dll решения из этой темы:
- по строчный доступ к выводу утилит ,
тогда как dll работает сразу со всей инфой в выводе утилит

Спасибо AlikasS.
Для меня это даже удобнее.
SaMM
 
Posts: 236
Joined: Fri, 25 Aug 2006, 12:33

Re: DLL - работа с консольными утилитами (из SPF)

Postby AlikasS » Tue, 24 May 2011, 17:21

dll сейчас размещена здесь 4fspf.zip
функция импортируется
Code: Select all
WINAPI: sexecl 4fspf.dll

остальное без изменений
например
Code: Select all
#( test-GET-IP
NoActive
USER-VALUE list-contentsforip \ переменная под хранение прочитанной строки
USER-VALUE ip-string \ переменная под хранение строки с IP адресом
0 VALUE buffer \ переменная для хранения адреса буфера
Action:
258 ALLOCATE THROW TO list-contentsforip
64 ALLOCATE THROW TO ip-string
1024 ALLOCATE THROW TO buffer

buffer S" " S" ipconfig" sexecl \ слово из либы, работаем

\ анализ вывода ipconfig
buffer ASCIIZ> BEGIN SREAD-LINE WHILE
list-contentsforip PLACE
list-contentsforip COUNT S" *IP*" WC-COMPARE
IF list-contentsforip COUNT 43 /STRING ip-string PLACE
ELSE S" " ip-string PLACE
THEN
REPEAT
2DROP 2DROP
ip-string COUNT MsgBox buffer ASCIIZ> MsgBox
list-contentsforip FREE DROP ip-string FREE DROP buffer FREE DROP
)#

#( естьлиюзер
NoActive
LoadProfile
: USEREXIST? { a u \ bufferSecond -- }
10024 ALLOCATE THROW TO bufferSecond
bufferSecond S" net.exe user " a u  S+ CRLF S+ EVAL-SUBST S" cmd.exe" sexecl
bufferSecond ASCIIZ>  S" The command completed successfully" SEARCH
IF 2DROP TRUE
ELSE 2DROP FALSE
THEN bufferSecond  FREE DROP
;
Action:
 S" BIGAdministrator /DOMAIN" USEREXIST?
 IF  MSG: "user found"
 ELSE  MSG: "user not found"
 THEN
)#
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: DLL - работа с консольными утилитами (из SPF)

Postby AlikasS » Tue, 24 May 2011, 17:25

еще функции присутствующие в этой dll
4fspf.zip
Code: Select all
<%
WINAPI: guimultitext 4fspf.dll
\ ввод и отображение многострочного текста
\ два режима: только чтение и нормальный
\ пример задача ввод-multi-text
WINAPI: guiselectdir 4fspf.dll
\ выбор директории, пример задача selectfileanddir
WINAPI: guiselectfile 4fspf.dll
\ выбор файла, пример задача selectfileanddir
%>
#( ввод-multi-text
NoActive
0 VALUE bufff
Action:
1024 ALLOCATE THROW TO bufff
\ открыли в режиме чтения
bufff S" текст по умолчанию" DROP S" подзаголовок" DROP S" заголовок" DROP 0 guimultitext DROP
\ открыли в режиме записи
bufff S" текст для редактирования" DROP S" подзаголовок" DROP S" заголовок" DROP 1 guimultitext
IF \ был ввод
bufff ASCIIZ> MsgBox
ELSE \ ничего не было
THEN
bufff FREE DROP \ освобождаем выделенную память
)#

#( selectfileanddir
\ работа с выбором файла и директории
0 VALUE sMassiv \ переменная, где будет храниться адрес для записи строки
NoActive
Action:
1024 ALLOCATE THROW TO sMassiv
\ сама работа с GUI формами
sMassiv guiselectdir ( adr -- 0 | -1 ) \ на входе адрес куда будет записана строка, на выходе FALSE | TRUE
IF sMassiv ASCIIZ> MsgBox THEN
sMassiv guiselectfile ( adr -- 0 | -1 ) \ на входе адрес куда будет записана строка, на выходе FALSE | TRUE
IF sMassiv ASCIIZ> MsgBox THEN
sMassiv FREE DROP \ освобождаем место
)#

P.S. предварительно обкатывались здесь GUI формы- выбор файла/директории, многостроч.WIN-INPUT-TEXT
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests

cron