Войти

Показать полную графическую версию : [Архив - Часть 1.3] AutoIt скрипты


Страниц : 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

TERMINAL
29-12-2006, 11:48
1.У меня вопрос такой...
Можно ли в скрипте написать такую прогу которая будет определять дату записи диска (например, дата записи диска 30.12.2006 программой НЕРО) и если дата не соответствует то выполняется например перезагрузка машины а если дата соответствует, то выполняется к примеру старт файла SETUP.exe?

Creat0R
30-12-2006, 04:28
Кто нибудь сталкивался с _GuiCtrlStatusBarGetText? оно не работает в GUI :(

Берём тот же пример из справки:


opt("MustDeclareVars", 1)

#include <GUIConstants.au3>
#Include <GuiStatusBar.au3>

Local $gui, $StatusBar1, $msg, $lbl_Info
Local $a_PartsRightEdge[3] = [100, 350, -1]
Local $a_PartsText[3] = ["New Text", "More Text", "Even More Text"]

$gui = GUICreate("Status Bar Get Text", 500, -1, -1, -1, $WS_SIZEBOX)
$lbl_Info = GUICtrlCreateLabel("", 10, 10, 150, 50, $SS_SUNKEN)
$StatusBar1 = _GUICtrlStatusBarCreate ($gui, $a_PartsRightEdge, $a_PartsText)

GUICtrlSetData($lbl_Info, "1st Part: " & _GUICtrlStatusBarGetText ($StatusBar1, 0) & @LF & _
"2nd Part: " & _GUICtrlStatusBarGetText ($StatusBar1, 1) & @LF & _
"3rd Part: " & _GUICtrlStatusBarGetText ($StatusBar1, 2))

GUISetState(@SW_SHOW)


While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_RESIZED
_GUICtrlStatusBarResize ($StatusBar1)
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case Else
;;;;;
EndSelect

WEnd

По идее, в верхнем левом углу должны отображаться значения текста взятого из статус бара, но текст не отображается.

Как получить текст из статус-бара?

Diamond
30-12-2006, 14:17
Поздравляю Всех С Наступающим Новым Годом!
Я тут написал небольшую функцию, возможно кому ни-будь она пригодится...
; Преобразовывает десятичное число в другие системы счисления
; Использование: encode($val,$type)
; $val - конвертируемое десятичное число
; $type - система счисления в которую требуется преобразовать число
Global Const $Heh=16
Global Const $Oct=8
Global Const $Bin=2

$num=987
msgbox(0,"",encode($num,$Heh))

Func encode($val,$type)
$string=""
While $val
$MB=_Mod($val,$type)
Select
Case $MB=10
$MB="A"
Case $MB=11
$MB="B"
Case $MB=12
$MB="C"
Case $MB=13
$MB="D"
Case $MB=14
$MB="E"
Case $MB=15
$MB="F"
EndSelect
$val=Int($val/$type)
$string=$MB & $string
WEnd
Return $string
EndFunc

; Альтернатива функции Mod():
; $A - Делимое
; $B - Делитель
Func _Mod($A,$B)
$Q=$A/$B
$ret=($Q-Int($Q))*$B
Return $ret
EndFunc

Diamond
31-12-2006, 05:22
Обратное преобразование в десятичное число.
; Преобразовывает числа из различных систем счисления в привычные нам десятичные
; Использование: decode($val,$type)
; $val - конвертируемое число
; $type - система счисления из которой требуется преобразовать число
Global Const $Heh=16
Global Const $Oct=8
Global Const $Bin=2

$num="11111111"
MsgBox(0,"",decode($num,$Bin))

Func decode($val,$type)
$string=0
$step=StringLen($val)
While $step
$MB=StringLeft($val,1)
Select
Case $MB="A"
$MB=10
Case $MB="B"
$MB=11
Case $MB="C"
$MB=12
Case $MB="D"
$MB=13
Case $MB="E"
$MB=14
Case $MB="F"
$MB=15
EndSelect
For $i=2 To $step
$MB=$MB*$type
Next
$string=$string+$MB
$val=StringRight($val,StringLen($val)-1)
$step=$step-1
WEnd
Return $string
EndFunc

Creat0R
31-12-2006, 07:30
Всех с новым годом! http://www.opera-ac.com/forum/Smileys/new_year/good.gif

Вопрос опять по гуи (непомню задавал ли уже, по поиску вроде не нашел)...

Возможно ли внедрить ссылку в гуи? т.е чтобы был подчёркнуты текст как ссылка, и при нажатии выполнялось какое то действие (запуск браузера с ссылкой - но это я знаю как сделать).

Diamond
31-12-2006, 13:18
Creat0R
Можно внедрить целую HTML страницу:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
$oIE = ObjCreate("Shell.Explorer.2")
GUICreate( "Внедренная HTML-страница",640,480)
$GUIActiveX=GUICtrlCreateObj( $oIE,0,0,640,480 )
GUISetOnEvent($GUI_EVENT_CLOSE,"closed")
GUISetState ()
$oIE.navigate("C:\Моя страничка.html")
While 1
Sleep(1000)
Wend
Func closed()
Exit
EndFunc
Или сделать имитацию ссылки, вроде этой:
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
$title="Имитация ссылки"
$test= GUICreate($title,"320","240")
GUISetOnEvent($GUI_EVENT_CLOSE,"closed")
$label=GUICtrlCreateLabel("Ссылка",10,10,80,20)
GUICtrlSetCursor (-1,0 )
GUICtrlSetColor(-1,0x0000ff)
GUICtrlSetFont(-1,14,400,6)
GUICtrlSetOnEvent(-1,"event")
GUISetState()
While 1
Sleep(1000)
WEnd
Func closed()
Exit
EndFunc
Func event()
GUICtrlSetColor($label,0xAC00A9)
Run("explorer.exe http://forum.oszone.net/")
EndFunc

Creat0R
31-12-2006, 23:16
Diamond_m
сделать имитацию ссылки
Гинеально!!! я и не думал что это так просто! С новым Годом тебя и всех всех всех!!!

biggreeder
01-01-2007, 22:38
Вопрос знатокам AutoIt:
как при помощи этой программы изменить права доступа NTFS к отдельному файлу (в WinXP естесственно)?

Sanja Alone
02-01-2007, 01:46
biggreeder
изменить права доступа NTFS к отдельному файлу%SystemRoot%\system32\cacls.exe + RunWait

biggreeder
02-01-2007, 22:47
Sanja Alone
А можно "по-пензенски"?
Как конкретно команду прописать, чтобы запретить запись "C:\Путь_к_файлу\Имя_файла" для групп SYSTEM и администраторы?

Sanja Alone
03-01-2007, 16:30
biggreeder
А можно "по-пензенски"?cmd:cacls "C:\Путь_к_файлу\Имя_файла" /E /G SYSTEM:R Администраторы:R
AutoIt:RunWait(@comspec & ' /c cacls "C:\Путь_к_файлу\Имя_файла" /E /G SYSTEM:R Администраторы:R','',@SW_HIDE)

biggreeder
03-01-2007, 22:09
Sanja Alone
Спасибо, думал я не так что-то делаю. Но именно такие команды на срабатывают. В смысле права доступа остаются прежними.
И разные варианты команд пробовал и разные файлы. Ничего не помогает... :(

Creat0R
04-01-2007, 03:32
Как можно деактивировать гуи (GuiSetState(@SW_DISABLE)), но чтобы можно было перетаскивать окно (через заголовок)? или хотябы как деактивировать элементы гуи (кнопки, поля ввода и т.д.), но чтобы они не затемнялись, а в обычном их виде были недоступны для использования?

Diamond
04-01-2007, 10:09
Creat0RКак можно деактивировать гуиТебе нужно блокировать не само GUI а скорее обработку событий...
Ведь если запретить обработку событий ВСЕХ кнопок и элементов то это и будет по сути заблокированное GUI.
В функции которая обрабатывает событие кнопки надо поставить условие:Dim $zapret=False
; Пока функция MainEvent() работает кнопка не среагирует
Func MainEvent()
$zapret=True
Sleep(3000)
$zapret=False
EndFunc
; функция кнопки:
Func PressButton()
If $zapret=False Then
Msgbox(0,"","Функция кнопки Выполнена")
Endif
EndFuncНапример оставить $zapret=True пока пользователь не введёт верный пароль и т.п.

Creat0R
04-01-2007, 10:39
Diamond_m
Тебе нужно блокировать не само GUI а скорее обработку событий...
Нет, именно гуи (или кнопки - т.е элементы), мне нужно чтобы небыло возможности нажать на кнопку, ввести текст в поле ввода, или зажать чекбокс... т.е другими словами - заблокировать с точки зрения интерфейса а не функциональности... и, кстати, хотелось бы также блокировать не только гуи, но и внешние окна, т.е блокировать то можно, но нужно так, чтобы была при этом возможность перетаскивать окно, сворачивать его, или (если есть возможность) разворачивать.

И даже если и подойдёт такой ввариант, у меня слишком много чекбоксов в гуи (более 30-ти), и ставить их всех на условия не очень практичное решение... хотелось бы просто заблокировать элемент (чекбокс к примеру), и чтобы небыло возможности зажать галку, но и вид чтобы оригинальный оставался. Я думал что может есть какой то стиль который это делает, но в справке уже замучался искать :(

Спасибо за попытку помочь... но мне кажется моей задумке (как и многим другим моим задумкам :) ), в AutoIt'е просто нет решения :(

Diamond
04-01-2007, 15:13
Creat0Rчтобы небыло возможности зажать галку, но и вид чтобы оригинальный оставался.
Могу предложить такое решение.
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
$test= GUICreate("TestCover","400","300")
GUISetOnEvent($GUI_EVENT_CLOSE,"closed")
$cover=GUICtrlCreateLabel("",0, 0, 400,300)
GUICtrlSetState($cover,$GUI_DISABLE)
Dim $status=0
$CTRL_btn1 = GUICtrlCreateButton ("Заблокировать GUI", 180, 130, 120, 22,$BS_DEFPUSHBUTTON)
GUICtrlSetOnEvent($CTRL_btn1,"CoverGui")
$CTRL_Checkbox = GUICtrlCreateCheckbox ("Checkbox",80,5,66,15)
GUICtrlCreateGroup ("RadioGroup", 5, 5, 70, 60)
$radio0 = GUICtrlCreateRadio ("radio1", 10, 20, 50, 15)
$radio1 = GUICtrlCreateRadio ("radio2", 10, 40, 50, 15)
GUICtrlSetState ($radio0,$GUI_CHECKED)
GUICtrlCreateGroup ("",-99,-99,1,1)
$CTRL_edit = GUICtrlCreateEdit ("0", 10, 80, 34, 18,$ES_NUMBER)
GUISetState()
While 1
Sleep(1000)
WEnd
Func closed()
Exit(0)
EndFunc
Func CoverGui()
If $status=1 Then
GUICtrlSetState($cover,$GUI_DISABLE)
$status=0
Else
GUICtrlSetState($cover,$GUI_ENABLE)
$status=1
EndIf
EndFunc

Creat0R
04-01-2007, 22:01
Diamond_m
Могу предложить такое решение
Решение отличное :yes: - но нет "защиты от дурака" :no: - нажимаем пробел (или перед этим таб), и кнопка снова нажимается... :(

Может можно как то блокировать доступ клавиатуры именно в гуи (BlockInput() не предлагать :) )?

Diamond
05-01-2007, 10:12
Creat0R
Сначала я решил что дело только в стиле кнопки $BS_DEFPUSHBUTTON, который я вставил умышленно для удобства тестирования. К сожалению о пробеле и TAB я не подумал. :sorry: А что если в функцию CoverGui() после условия Else добавить строчку: ControlFocus("TestCover","",$cover) а в шапке добавить: HotKeySet("{TAB}","nul") где nul() это пустая функция которая ничего ни делает (её так-же придётся дописать). Это сработает! Минус только в том что мы получаем неработающую клавишу {TAB} в системе. Ну и конечно убрать стиль: $BS_DEFPUSHBUTTON с кнопки, чтобы ее нельзя было нажать с помощью ENTER.

Diamond
05-01-2007, 11:47
Creat0R
Ещё проще... Ничего в шапке писать не надо, потребуется только изменить функцию.
Это хотя бы позволит отключить {TAB} только на момент блокировки GUI.
Func CoverGui()
If $status=1 Then
GUICtrlSetState($cover,$GUI_DISABLE)
$status=0
HotKeySet("{TAB}") ;снимаю блокировку {TAB}
HotKeySet("^{TAB}")
HotKeySet("+{TAB}")
Else
GUICtrlSetState($cover,$GUI_ENABLE)
$status=1
ControlFocus("TestCover","",$cover)
HotKeySet("{TAB}","nul") ; блокирую возможные комбинации {TAB}
HotKeySet("^{TAB}","nul")
HotKeySet("+{TAB}","nul")
EndIf
EndFunc
Func nul()
EndFunc

Creat0R
05-01-2007, 13:03
Diamond_m
Минус только в том что мы получаем неработающую клавишу {TAB} в системе
И Space (если и её таким образом "отключить")....

Ладно, ничего не поделать, придётся деактивировать "некрасиво" ;) ($GUI_DISABLE - или 128).

Есть у меня друга задумка, но она тоже не работает :( - нужно поставить прогресс бар, и потом отменить его... вот гуи, и не пойму почему не работает такая конструкция:


Opt("GuiOnEventMode", 1)
#include <GUIConstants.au3>

Global $ExitLoop
$gui = GUICreate("Abort GUI", 420, 140, -1, -1, $WS_SIZEBOX)
$Button = GUICtrlCreateButton("Start", 180, 20, 70)
GUICtrlSetOnEvent($Button, "Button")
GUISetOnEvent(-3, "ExitScript")

$Progress = GUICtrlCreateProgress(60, 60, 300, 15)

GUISetState(@SW_SHOW)

While 1
Sleep(100)
WEnd

Func Button()
GUICtrlSetData($Button, "Abort")
GUICtrlSetOnEvent($Button, "SetExitLoop")
While $ExitLoop = 0
For $i = 10 To 100
Sleep(10)
GUICtrlSetData($Progress, $i)
Next
WEnd
GUICtrlSetData($Button, "Start")
EndFunc

Func SetExitLoop()
$ExitLoop = 1
EndFunc

Func ExitScript()
Exit
EndFunc




© OSzone.net 2001-2012