Показать полную графическую версию : [решено] Как задать действие для кнопки
Добрый день. Есть небольшой вопрос по синтаксису AutoIT. Создал форму: несколько лэйблов, несколько текстбоксов и одна кнопка. КАждому элементу (текстбоксы и кнопка) присвоил имена переменных. Вопрос в следующем: как можно сделать так, чтобы при нажатии на кнопку открывалася процесс cmd.exe (нужна ли ryjgrt в этом случае вообще переменная) и как можно передать команде SEND для командной строки текст, вводимый в текстбоксах (указываю "SEND("some text" & $myvar)", а в командной строке прописывается только текст до переменной и ID самой переменной). Можно ли вообще передать командной строке текст из текстбоксов?
Заранее спасибо за помощь
P.S. С вызовом командной строки при нажатии на кнопку уже разобрался. Теперь помогите с обработкой текста в текстбоксах
266903582
04-02-2009, 19:43
SEND(guictrlread($указатель_на_текстбокс) & $myvar)
D_Master
04-02-2009, 22:26
как можно сделать так, чтобы при нажатии на кнопку открывалася процесс cmd.exe »
Я делаю так:
#include <GUIConstants.au3>
#Region ### START Koda GUI section ### Form=
Opt("GUIOnEventMode", 1) ; Подключаем режим OnEvent
$Form1 = GUICreate("Form1", 249, 113)
GUICtrlCreateInput("", 16, 16, 201, 21)
$Checkbox1 = GUICtrlCreateCheckbox("Чекбокс", 16, 48, 105, 17)
$Button1 = GUICtrlCreateButton("Кнопка", 16, 72, 73, 25, 0)
GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
GUICtrlSetOnEvent($Button1, "RunCMD")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func RunCMD()
Run("cmd.exe")
EndFunc
Func Close()
Exit
EndFunc
Но, быть может, гуру подскажут другой, более простой способ.
А зачем Send, можно запустить сразу команду:
Run(@ComSpec & ' /C Dir D:\ & Pause')
Для содержимого в GUI:
$sRead = GUICtrlRead($iCtrlID)
Run(@ComSpec & ' /C ' & $sRead)
Огромное спасибо за помощь!
Еще один наводящий вопрос.. Можно ли как-то запустить от имени администратора коммандную строку под ОС Windows Vista?
Можно ли как-то сделать так, чтобы при нажатии на кнопку открытия командной строки (во время выполнения скрипта) все действия выполнялись только в командной строке и нельзя было перейти в другое прложение . Помогите пжл
Можно ли как-то запустить от имени администратора коммандную строку под ОС Windows Vista? »
В начало скрипта нужно поместить #RequireAdmin, и/или запускать через RunAs().
Можно ли как-то сделать так, чтобы при нажатии на кнопку открытия командной строки (во время выполнения скрипта) все действия выполнялись только в командной строке и нельзя было перейти в другое прложение »
А вот это не совсем понятно, что значит «нельзя было перейти в другое прложение»? блокировать всё вокруг? что блокировать, ввод с клавиатуры, клики мышкой? Подробнее.
Для того, чтобы было нагляднее: мне нужно создать скрипт, который будет автоматом при помощи командной строки отправлять сообщения. ВОт код моего скрипта:
#include <GUIConstants.au3>
#include <Date.au3>
#RequireAdmin
GUICreate("TelnetForm", 360, 490)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
GUICtrlCreateTabItem("")
GUICtrlCreateLabel("Программа для отправки писем при помощи Telnet", 50, 10)
GUICtrlCreateLabel("POP Сервер", 5, 50)
GUICtrlCreateLabel("Отправитель", 5, 80)
GUICtrlCreateLabel("Получатель", 5, 110)
GUICtrlCreateLabel("Тема письма", 5, 140)
$srv = GUICtrlCreateInput ("", 105, 50, 250)
$from = GUICtrlCreateInput ("", 105, 80, 250)
$to = GUICtrlCreateInput ("", 105, 110, 250)
$subj = GUICtrlCreateInput ("", 105, 140, 250)
GUICtrlCreateLabel("Тело письма", 5, 190)
$body = GUICtrlCreateEdit("", 20, 230, 320, 210, $ES_AUTOVSCROLL+$WS_VSCROLL)
$button = GUICtrlCreateButton("Отправка сообщения", 105, 450)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $button
ButtonClick()
EndSwitch
WEnd
Func ButtonClick()
Run("cmd.exe")
ProcessWait("cmd.exe")
SEND("telnet")
SEND("{ENTER}")
Sleep(200)
$sRead = GUICtrlRead($srv)
SEND("o " & $sRead & " 25")
Sleep(200)
Send("{ENTER}")
Sleep(3000)
SEND("HELO W" & "{ENTER}")
$sRead2 = GUICtrlRead($from)
SEND("MAIL FROM: " & "<" & $sRead2 & ">" & "{ENTER}")
Sleep(300)
$sRead3 = GUICtrlRead($to)
SEND("RCPT TO: " & "<" & $sRead3 & ">" & "{ENTER}")
Sleep(300)
Send("DATA" & "{ENTER}")
Sleep(300)
SEND("From: " & "<" & $sRead2 & ">" & "{ENTER}")
SEND("To: " & "<" & $sRead3 & ">" & "{ENTER}")
$sRead5 = GUICtrlRead($subj)
SEND("Subject: " & $sRead5 & "{ENTER}")
$sShortDayName = _DateDayOfWeek( @WDAY, 1 )
$sNewDate = _DateAdd( 'n',0, _NowCalc())
SEND("Date: " & $sShortDayName & ", " & $sNewDate & " " & "{+}0200" & "{ENTER}")
SEND("MIME-Version: 1.0" & "{ENTER}")
SEND("Content-Language: ru")
SEND("{ENTER}" & "{ENTER}")
$sRead4 = GUICtrlRead($body)
SEND($sRead4 & "{ENTER}")
SEND("{ENTER}")
SEND(".")
SEND("{ENTER}")
Sleep(200)
SEND("quit" & "{ENTER}")
Sleep(700)
SEND("{ENTER}" & "{ENTER}")
Sleep(1000)
SEND("quit" & "{ENTER}")
Sleep(500)
SEND("exit" & "{ENTER}")
endFunc
В чем проблема: когда нажимаю на кнопку "отправить" поднимается командная строка. Но при вводе команды "telnet" открывается не стандартный телнет, а новая копия данной программы. В чем может быть причина? возможно я просто неправильно изложил пролему...
при вводе команды "telnet" открывается не стандартный телнет, а новая копия данной программы »
Открывает в cmd.exe, если нужно отдельно то запускать нужно сразу telnet.exe.
Run("telnet.exe")
ProcessWait("telnet.exe")
P.S
И вообще, все эти Send... это очень не надёжно, я бы делал всё через StdInWrite/Read и в скрытом положении, отображая данные в GUI (ведь как я понимаю, на то и был создан GUI для telnet :) ).
Спасибо, возможно переделаю используя StdInWrite/Read, но на данном этапе, все равно, после того, как поменял cmd.exe на telnet.exe открывается не окно телнета, а вторая копия программы. В чем может быть причина?
открывается не окно телнеа, а вторая копия программы »
Какой программы? у меня ничего не октрывается кроме telnet'а.
А вот это очень странно. проверил на 4-х компьютерах. и только на 2-х из них все отработало правильно. На остальных при открытии комндной строки (вводится команда telnet) и выскакивает ошибка: "'telnet' is not recognized as an internal or external command, operable program or batch file". Может дело в системной переменной PATH? Хотя на тех машинах, на которых скриптотработал нормально системные переменные те же самые :(
На остальных »
Это каких, возможно telnt не везде присутствует?
А если так:
Run("cmd.exe")
ProcessWait("cmd.exe")
SEND(@WindowsDir & "\telnet.exe")
SEND("{ENTER}")
С Vista такой вариант не пройдет, т.к. самого файла %SYSTEMROOT%\telnet.exe не существует. он где-то в другом месте месте лежит, сразу не вспомню где.. если я в Vista вручную открываю cmd.exe и ввожу telnet, тогда командная строка сразу переходит в режим telnet. Может есть еще какой-то обходной путь? Но в случае с данным скриптом валится ошибка "'telnet' is not recognized as ..."
DImaN!, Telnet нужно сначала включить в "Программы и компоненты"
Vadikan, в том то и дело, что он включен и если я просто открываю командную строку и там ввожу telnet, то он нормально отрабатывает...
Creat0R, можете ли подсказать как реализовать подобный вариант без команды SEND (в скрытом режиме)?
можете ли подсказать как реализовать подобный вариант без команды SEND »
Я уже показал как это сделать в 3-ем сообщении (http://forum.oszone.net/post-1029611-3.html).
я понимаю, но можете привести еще какой-нибудь маленький фрагмент кода, чтобы было немного понятнее...
чтобы, скажем, хотя бы получилось открытыь телнет и ввести одну любую команду (в скрытом режиме).
P.S. извените, что уже немного подмучал Вас, просто в руководстве по AutoIT не очень хорошо раскрыты некоторые вопросы :(
DImaN!, открытыь телнет и ввести одну любую команду (в скрытом режиме)
Примерно так:
#include <Constants.au3>
$iTelnet = Run(@SystemDir & "\telnet.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
; Пишем в поток
StdinWrite($iTelnet, "команда" & @CRLF)
; Пишем без второго параметра для закрытия потока
StdinWrite($iTelnet)
т.е. все мои SENDы я могу заменить командой StdinWrite, но без таймаутов? или как-то иначе работает данная команда?
все мои SENDы я могу заменить командой StdinWrite »
Пробуйте, я всего лишь привёл пример (не тестировал особо).
P.S
Данный вопрос уже выходит за пределы тематики этого топика.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.