|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты |
|
[архив - Часть 2] AutoIt скрипты
|
(*.*) Сообщения: 36568 |
Внимание! Тема переведена в архивное состояние Текущая тема http://forum.oszone.net/thread-98914.html (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. ![]() Сайт программы Русская справка Коллекция AutoIt скриптов от Sanja Alone Коллекция AutoIt скриптов от MSFN (могут быть устаревшие). Справочник по командам rundll32 (команды запуска диалоговых окон и не только...) AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо). Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров. Цитата Vadikan:
|
||
------- Отправлено: 00:02, 05-02-2006 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Creat0R,
Цитата:
![]() |
|
Отправлено: 09:32, 17-09-2007 | #451 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Надо создать 3D array который открывает 5 окон internet explorer и делает на каждом окне timestamp после того как иссекает контрольное время, например 1 мин, надо закрыть конкретное окно и заменить его новым окном. Размер каждого окна должен быть 800х560.
я не совсем понимаю как это сделать... вот что у меня есть пока: HotKeySet("{ESC}", "Terminate") ; Set Coordinate mode to relative to window AutoItSetOption ( "PixelCoordMode", 0 ) Run("C:\Program Files\Internet Explorer\IEXPLORE.EXE") Sleep(2000) ;MsgBox(0, "Active window stats (x,y,width,height):", $WindowPosition[0] & " " & $WindowPosition[1] & " " & $WindowPosition[2] & " " & $WindowPosition[3], 1) WinMove($WindowName, "", $array[1],[1]) Call("TimeStamp") $array[1][1] = _ArrayCreate(0, 0) $array[2][1] = _ArrayCreate(0, 0) $array[2][2] = _ArrayCreate(0, 800) $array[2][3] = _ArrayCreate(560, 0) $array[2][3] = _ArrayCreate(560, 800) Func TimeStamp() $TimeStampFileName = $TimeStampFilePath & TimerInit() &".tsp" ;MsgBox(0, $TimeStampFileName, $TimeStampFileName, 2) FileDelete($TimeStampFilePath & "*.tsp") _FileCreate ($TimeStampFileName) EndFunc ;==>TimeStamp Func Terminate() ;MsgBox(0, "Entering Terminate Function...","",3) Exit 0 EndFunc ;==>Terminate |
Отправлено: 12:15, 17-09-2007 | #452 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Diamond,
Цитата:
![]() Обновил программку... Список изменении в добавленном Readme.txt, или в топике на оф. форуме ![]() |
|
------- Отправлено: 08:02, 21-09-2007 | #453 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать Привет всем, написал скриптик для закачки файла с отображением прогресса закачки, но мне не нравится, как реализована функция ProgressSet, может есть более красивое решение подсчёта и отображения процента закачки файла.
$url = "http://game.chirkom.uz/download/hard/cpu-z-123.zip" $NameArr = StringSplit($url, "/") $name = $NameArr[$NameArr[0]] $size = InetGetSize($url) If $size Then $answer = MsgBox(1, "Warning", "The file size = " & $size & " bytes download now?") If $answer = 2 Then MsgBox(64, "Cancel", "Donloading canceled") Exit 1 ElseIf $answer = 1 Then $sGet = FileDownload($url) If $sGet = -1 Then MsgBox(16, "Error", "DownLoading error") Exit 1 EndIf MsgBox(64, "Done", $sGet) Else Exit EndIf Else MsgBox(16, "Error", "File not exist") EndIf Func FileDownload($url) Local $fileGet = InetGet($url, @TempDir & "\" & $name, 1, 1) If Not $fileGet Then Return SetError(1, 0, -1) ProgressOn("Please wait...", "Downloading file") $dec = $size / 100 $dSize = $dec $percent = 0 While @InetGetActive If @InetGetBytesRead >= $dSize Then $dSize += $dec $percent += 1 ProgressSet($percent, $percent & " percent downloading") EndIf TrayTip("DownLoading", "Bytes = " & @InetGetBytesRead, 10, 1) Sleep(10) WEnd ProgressSet(100, "Done") Sleep(1000) ProgressOff() Return "Downloading successfull" EndFunc |
Отправлено: 09:33, 21-09-2007 | #454 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Maza Faka,
Цитата:
|
|
------- Отправлено: 09:44, 21-09-2007 | #455 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать Creat0R
Как сделать, что бы левой кнопкой мыши можно было перетаскивать (drag) элемент Label в пределах GUI-окна? Никак не могу достучаться тебе в аську, мой ник DeVil ![]() |
Отправлено: 10:22, 21-09-2007 | #456 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Maza Faka,
Цитата:
![]() #include <GuiConstants.au3> Opt("MouseCoordMode", 2) $Gui = GuiCreate("Test") $Label = GUICtrlCreateLabel("My Label, Move me ;)", 20, 20) GUISetState() While 1 $Msg = GUIGetMsg() Switch $Msg Case -3 Exit Case Else $CurInfo = GUIGetCursorInfo($Gui) While $CurInfo[2] = 1 And $CurInfo[4] = $Label $CurInfo = GUIGetCursorInfo($Gui) $LabelPos = ControlGetPos($Gui, "", $Label) If $LabelPos[0] <> MouseGetPos(0) Or $LabelPos[1] <> MouseGetPos(1) Then GUICtrlSetPos($Label, MouseGetPos(0), MouseGetPos(1)) Else Sleep(5) EndIf WEnd EndSwitch WEnd |
|
------- Отправлено: 10:54, 21-09-2007 | #457 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Утилита для подбора цвета:
#NoTrayIcon #include <GUIConstants.au3> #include <Misc.au3> Global Const $WM_HSCROLL = 0x0114 Global $red=255, $green=0, $blue=0, $x=0, $st=5, $N $Colorizer=GUICreate("Сolorizer (RGB)","320","200",-1,-1,-1,$WS_EX_TOPMOST) GUISetBkColor (0x000000) Dim $CTRL_edit[3] $CTRL_edit[0] = GUICtrlCreateEdit ("0", 5, 5, 34, 18,$ES_NUMBER) GUICtrlSetTip (-1,"Red") GUICtrlSetLimit (-1, 3) $CTRL_edit[1] = GUICtrlCreateEdit ("0", 5, 30, 34, 18,$ES_NUMBER) GUICtrlSetTip (-1,"Green") GUICtrlSetLimit (-1, 3) $CTRL_edit[2] = GUICtrlCreateEdit ("0", 5, 55, 34, 18,$ES_NUMBER) GUICtrlSetTip (-1,"Blue") GUICtrlSetLimit (-1, 3) Dim $CTRL_slider[3] = [GUICtrlCreateSlider(54,5,255,20), GUICtrlCreateSlider(54,30,255,20), GUICtrlCreateSlider(54,55,255,20)] For $i=0 To 2 GUICtrlSetLimit($CTRL_slider[$i],255,0) GUICtrlSetBkColor($CTRL_slider[$i],0x000000) Next $CTRL_edit_hex = GUICtrlCreateEdit ("0x000000", 5, 145, 80, 18,$ES_READONLY) GUICtrlSetTip (-1,"Шестнадцатиричное представление") $Button_ChooseColor = GUICtrlCreateButton("Цвет",240,95,60,20) $ButtonDr = GUICtrlCreateButton("Пипетка",240,120,60,20) $ButtonRnd = GUICtrlCreateButton("Случайно",240,145,60,20) For $i = $Button_ChooseColor To $ButtonRnd _ButtonClassicStyle($i) GUICtrlSetCursor ($i,0) Next $Gr=GUICtrlCreateGraphic(4,174,0,0) $GrCover=GUICtrlCreatePic("",2,174,316,20,-1,$WS_EX_CLIENTEDGE) Draw_ToneScale() GUIRegisterMsg($WM_HSCROLL, "WM_SCROLL") GUISetState(@SW_SHOWNORMAL) ;-------------------------------------- While 1 $msg=GUIGetMsg() Switch $msg Case $GUI_EVENT_PRIMARYUP GUIRegisterMsg($WM_HSCROLL, "WM_SCROLL") ToolTip("") Case $GUI_EVENT_PRIMARYDOWN GUIRegisterMsg($WM_HSCROLL, "WM_SCROLL_2") Case $GUI_EVENT_CLOSE Exit Case $ButtonRnd randomize() Case $ButtonDr dropper() Case $Button_ChooseColor ChooseColor() Case $CTRL_edit[0] To $CTRL_edit[2] $N = $msg - $CTRL_edit[0] Input() Case $CTRL_slider[0] To $CTRL_slider[2] $N = $msg - $CTRL_slider[0] slEvent() Case $GrCover DropperScale() EndSwitch WEnd ;~ Тоновая шкала: Func Draw_ToneScale() For $i=0 To 255 Step $st $green=$i SetColor() Next For $i=0 To 255 Step $st $red=255-$i SetColor() Next For $i=0 To 255 Step $st $blue=$i SetColor() Next For $i=0 To 255 Step $st $green=255-$i SetColor() Next For $i=0 To 255 Step $st $red=$i SetColor() Next For $i=0 To 255 Step $st $blue=255-$i SetColor() Next EndFunc Func SetColor() Local $color='0x' & Hex($red,2) & Hex($green,2) & Hex($blue,2) GUICtrlSetGraphic($Gr,$GUI_GR_COLOR, $color) GUICtrlSetGraphic($Gr,$GUI_GR_RECT,$x,0,1,20) $x+=1 EndFunc Func Input() Local $color[3] = [GUICtrlRead($CTRL_edit[0]),GUICtrlRead($CTRL_edit[1]),GUICtrlRead($CTRL_edit[2])] Local $str, $i, $ret="0x" For $i=0 To 2 If $color[$i]="" Then $color[$i]="0" ElseIf $color[$i]>255 Then $color[$i]="255" EndIf $ret &= Hex($color[$i],2) Next GUICtrlSetData ($CTRL_edit_hex,$ret) GUICtrlSetData($CTRL_edit[$N],$color[$N]) GUICtrlSetData($CTRL_slider[$N],$color[$N]) GUISetBkColor($ret,$Colorizer) ;~ Меняем фоновый цвет слайдеров: For $j=0 To 2 GUICtrlSetBkColor($CTRL_slider[$j],$ret) Next EndFunc Func slEvent() Local $slColor=GUICtrlRead($CTRL_slider[$N]) GUICtrlSetData ($CTRL_edit[$N],$slColor) GUICtrlSetState($CTRL_slider[$N],$GUI_FOCUS) Input() ;~ Возвращаем утраченный фокус элементу: GUICtrlSetState($CTRL_slider[$N],$GUI_FOCUS) EndFunc Func randomize() Local $i, $HexColor ='0x' For $i=0 to 2 $rnd = int(Random(0,255)) $HexColor &= Hex($rnd,2) GUICtrlSetData($CTRL_edit[$i],$rnd) GUICtrlSetData($CTRL_slider[$i],$rnd) Next For $i=0 to 2 GUICtrlSetBkColor($CTRL_slider[$i],$HexColor) Next GUICtrlSetData($CTRL_edit_hex,$HexColor) GUISetBkColor($HexColor,$Colorizer) EndFunc Func dropper() Local $Time=TimerInit() GUICtrlSetState($ButtonDr,$GUI_DISABLE) ToolTip("Кликните мышью в любом месте экрана",Default,Default,"",0,3) While 1 Sleep (1) ; Символический таймаут для уменьшения CPU!!! $click=GUIGetCursorInfo ($Colorizer) If TimerDiff($Time)>2300 Then ToolTip("") If $click[2] Then $Mouse=MouseGetPos() $x=$Mouse[0] $y=$Mouse[1] $DrColor=Hex(PixelGetColor ($x,$y ),6) $j=1 For $i=0 to 2 $Dr=Dec(StringMid($DrColor,$j,2)) GUICtrlSetData($CTRL_edit[$i],$Dr) GUICtrlSetData($CTRL_slider[$i],$Dr) $j += 2 Next For $i=0 to 2 GUICtrlSetBkColor($CTRL_slider[$i],'0x' & $DrColor) Next GUICtrlSetData($CTRL_edit_hex,'0x' & $DrColor) GUISetBkColor('0x' & $DrColor,$Colorizer) GUICtrlSetState($ButtonDr,$GUI_ENABLE) ExitLoop EndIf WEnd EndFunc Func DropperScale() GUICtrlSetCursor($GrCover,3) $coord = _GetControlPos ($Colorizer, $GrCover) While 1 $i_msg = GUIGetMsg() If $i_msg = $GUI_EVENT_PRIMARYUP Then ExitLoop _MouseTrap($coord[0]+2,$coord[1]+2,$coord[2]-2,$coord[3]-2) WEnd Local $Mouse=MouseGetPos() Local $DrColor=Hex(PixelGetColor ($Mouse[0],$Mouse[1]),6) _MouseTrap() GUICtrlSetCursor($msg,2) Local $j=1 For $i=0 to 2 $Dr=Dec(StringMid($DrColor,$j,2)) GUICtrlSetData($CTRL_edit[$i],$Dr) GUICtrlSetData($CTRL_slider[$i],$Dr) $j += 2 Next For $i=0 to 2 GUICtrlSetBkColor($CTRL_slider[$i],'0x' & $DrColor) Next GUICtrlSetData($CTRL_edit_hex,'0x' & $DrColor) GUISetBkColor('0x' & $DrColor,$Colorizer) EndFunc ;~ Author: Diamond Func _GetControlPos($HWND, $ControlId) Local $Win = WinGetPos($HWND) Local $Client = WinGetClientSize($HWND) Local $Control = ControlGetPos($HWND,"",$ControlId) Local $BorderSize = ($Win[2]-$Client[0]) / 2 Local $PanelSize = $Win[3] - $Client[1] - $BorderSize Local $array[4] $array[0] = $Win[0] + $BorderSize + $Control[0] ; left $array[1] = $Win[1] + $PanelSize + $Control[1] ; $top $array[2] = $array[0] + $Control[2] ; right $array[3] = $array[1] + $Control[3] ; bottom Return $array EndFunc Func ChooseColor() GUISetState(@SW_DISABLE) SetOnTop($Colorizer,1) Local $HexColor = '0x' Local $BGR=ColorPicker(SwitchColor(GUICtrlRead($CTRL_edit_hex))) GUISetState(@SW_ENABLE) SetOnTop($Colorizer,-1) If $BGR = -1 Then Return For $i=0 to 2 $HexColor &= Hex($BGR[$i+1],2) GUICtrlSetData($CTRL_edit[$i],$BGR[$i+1]) GUICtrlSetData($CTRL_slider[$i],$BGR[$i+1]) Next For $i=0 to 2 GUICtrlSetBkColor($CTRL_slider[$i],$HexColor) Next GUICtrlSetData($CTRL_edit_hex,$HexColor) GUISetBkColor($HexColor,$Colorizer) EndFunc Func ColorPicker($Default=0) Local $p = DllStructCreate("dword;int;int;int;ptr;dword;int;ptr;ptr") DllStructSetData($p, 1, DllStructGetSize($p)) DllStructSetData($p, 2, 0) DllStructSetData($p, 4, $Default) DllStructSetData($p, 5, DllStructGetPtr(DllStructCreate("int[16]"))) DllStructSetData($p, 6, BitOR(0x100, 0x2, 0x1)) $ret = DllCall("comdlg32.dll", "long", "ChooseColor", "ptr",DllStructGetPtr($p)) If $ret[0] = False Then Return -1 Local $color_picked = DllStructGetData($p, 4) $color_picked = Hex(String($color_picked), 6) Local $array[4] $array[0]="0x" & StringRight($color_picked,2) & StringMid($color_picked,3,2) & StringLeft($color_picked,2) $array[1]=Number("0x" & StringRight($color_picked,2)) ; RED $array[2]=Number("0x" & StringMid($color_picked,3,2)) ; GREEN $array[3]=Number("0x" & StringLeft($color_picked,2)) ; BLUE Return $array EndFunc Func WM_SCROLL($hWndGUI, $MsgID, $WParam, $LParam) Switch $LParam Case GUICtrlGetHandle($CTRL_slider[0]) $N = 0 Case GUICtrlGetHandle($CTRL_slider[1]) $N = 1 Case GUICtrlGetHandle($CTRL_slider[2]) $N = 2 EndSwitch slEvent() EndFunc Func WM_SCROLL_2($hWndGUI, $MsgID, $WParam, $LParam) Local $title Switch $LParam Case GUICtrlGetHandle($CTRL_slider[0]) $N = 0 Case GUICtrlGetHandle($CTRL_slider[1]) $N = 1 Case GUICtrlGetHandle($CTRL_slider[2]) $N = 2 EndSwitch ToolTip(GUICtrlRead($CTRL_slider[$N])) EndFunc ; Author - RazerM Func SwitchColor ($iColor) Local $iMask $iMask = BitXOR(BitAND($iColor, 0xFF) , ($iColor / 0x10000)) Return BitXOR($iColor, ($iMask * 0x10001)) EndFunc ;==>SwitchColor ;~ Author: Diamond Func _ButtonClassicStyle($controlID, $style=0) GUICtrlSetStyle($controlID, 0x0040) ; $BS_ICON GUICtrlSetImage($controlID, "shell32.dll",0,0) GUICtrlSetStyle($controlID, $style) EndFunc Func SetOnTop($HWND, $TOPMOST) DllCall("User32.dll","long","SetWindowPos","hwnd",$HWND, _ "int",$TOPMOST, _ ; Always On Top = -1 "int",0, _ ; Left "int",0, _ ; Top "int",0, _ ; Width "int",0, _ ; Height "int",3) ; Flag: $SWP_NOSIZE=1 and $SWP_NOMOVE=2 EndFunc |
Последний раз редактировалось Diamond, 21-09-2007 в 22:52. Причина: Поправка в коде Отправлено: 18:20, 21-09-2007 | #458 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Diamond,
Класная утилитка (это скорее в помощь более большой утилитке, как дочерний диалог для управлением цветами ![]() Немного(?) изменил - Теперь диалог для выбора цвета открывается как дочернее окно, также переделал немного методы обновления данных (чтобы всё обновлялось в реальном времени, правда "дёргание" элементов не удалось предотвратить), при выборе пипетки добавил функцию для установки курсора на момент выбора цвета (глобально, правда я пока не знаю как получить предварительно текущий курсор, поэтому будет сбиваться всегда на 3dwarro.cur - а курсор пипетки можно видимо подобрать и подходящий в системе, но я не нашёл), ну и поправил ввод полей - если ставить пустое значение, то сразу сбрасывается на 0 (у тебя сбрасывалось только после ввода в другое поле), если ставить выше 255, то также сразу ставиться на 255 ![]() Кстати, а почему используется API-шная функция SetOnTop? Я так понял для скрытия окна и затем показа в режиме Поверх всех окон? но ведь можно было просто прятать по WinSetState($Hwnd, "", @SW_HIDE), и потом показать, OnTop не сбивается при этом ![]() Вобщем вот скрипт: #NoTrayIcon #include <GUIConstants.au3> #include <Misc.au3> Global Const $WM_HSCROLL = 0x0114 Global Const $WM_COMMAND = 0x0111 Global $red=255, $green=0, $blue=0, $x=0, $st=5, $N, $LastDrColor = 0, $LastRetColor = 0 $Colorizer=GUICreate("Сolorizer (RGB)","320","200",-1,-1,-1,$WS_EX_TOPMOST) GUISetBkColor (0x000000) Dim $CTRL_edit[3] $CTRL_edit[0] = GUICtrlCreateEdit ("0", 5, 5, 34, 18,$ES_NUMBER) GUICtrlSetTip (-1,"Red") GUICtrlSetLimit (-1, 3) $CTRL_edit[1] = GUICtrlCreateEdit ("0", 5, 30, 34, 18,$ES_NUMBER) GUICtrlSetTip (-1,"Green") GUICtrlSetLimit (-1, 3) $CTRL_edit[2] = GUICtrlCreateEdit ("0", 5, 55, 34, 18,$ES_NUMBER) GUICtrlSetTip (-1,"Blue") GUICtrlSetLimit (-1, 3) Dim $CTRL_slider[3] = [GUICtrlCreateSlider(54,5,255,20), GUICtrlCreateSlider(54,30,255,20), GUICtrlCreateSlider(54,55,255,20)] For $i=0 To 2 GUICtrlSetLimit($CTRL_slider[$i],255,0) GUICtrlSetBkColor($CTRL_slider[$i],0x000000) Next $CTRL_edit_hex = GUICtrlCreateEdit ("0x000000", 5, 145, 80, 18,$ES_READONLY) GUICtrlSetTip (-1,"Шестнадцатиричное представление") $Button_ChooseColor = GUICtrlCreateButton("Цвет",240,95,60,20) $ButtonDr = GUICtrlCreateButton("Пипетка",240,120,60,20) $ButtonRnd = GUICtrlCreateButton("Случайно",240,145,60,20) For $i = $Button_ChooseColor To $ButtonRnd _ButtonClassicStyle($i) GUICtrlSetCursor ($i,0) Next $Gr=GUICtrlCreateGraphic(4,174,0,0) $GrCover=GUICtrlCreatePic("",2,174,316,20,-1,$WS_EX_CLIENTEDGE) Draw_ToneScale() GUIRegisterMsg($WM_HSCROLL, "WM_SCROLL") GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") GUISetState(@SW_SHOWNORMAL) ;-------------------------------------- While 1 $msg=GUIGetMsg() Switch $msg Case $GUI_EVENT_PRIMARYUP ToolTip("") Case $GUI_EVENT_PRIMARYDOWN $CurInfo = GUIGetCursorInfo($Colorizer) If $CurInfo[4] = $GrCover Then GUICtrlSetCursor($GrCover, 3) $coord = _GetControlPos ($Colorizer, $GrCover) _MouseTrap($coord[0]+2,$coord[1]+2,$coord[2]-2,$coord[3]-2) While $CurInfo[4] = $GrCover And $CurInfo[2] = 1 $CurInfo = GUIGetCursorInfo($Colorizer) If Not DropperScale() Then Sleep(100) Else Sleep(50) EndIf WEnd _MouseTrap() GUICtrlSetCursor($GrCover, 2) EndIf Case $GUI_EVENT_CLOSE Exit Case $CTRL_edit[0] To $CTRL_edit[2] $N = $msg - $CTRL_edit[0] EndSwitch WEnd ;~ Тоновая шкала: Func Draw_ToneScale() For $i=0 To 255 Step $st $green=$i SetColor() Next For $i=0 To 255 Step $st $red=255-$i SetColor() Next For $i=0 To 255 Step $st $blue=$i SetColor() Next For $i=0 To 255 Step $st $green=255-$i SetColor() Next For $i=0 To 255 Step $st $red=$i SetColor() Next For $i=0 To 255 Step $st $blue=255-$i SetColor() Next EndFunc Func SetColor() Local $color='0x' & Hex($red,2) & Hex($green,2) & Hex($blue,2) GUICtrlSetGraphic($Gr,$GUI_GR_COLOR, $color) GUICtrlSetGraphic($Gr,$GUI_GR_RECT,$x,0,1,20) $x+=1 EndFunc Func Input() Local $color[3] = [GUICtrlRead($CTRL_edit[0]),GUICtrlRead($CTRL_edit[1]),GUICtrlRead($CTRL_edit[2])] Local $str, $i, $ret="0x" For $i = 0 To 2 If $color[$i] = "" Then $color[$i] = 0 ElseIf $color[$i] > 255 Then $color[$i] = 255 EndIf $ret &= Hex($color[$i],2) Next GUICtrlSetData($CTRL_edit_hex,$ret) GUICtrlSetData($CTRL_edit[$N],$color[$N]) GUICtrlSetData($CTRL_slider[$N],$color[$N]) If $LastRetColor = $ret Then Return $LastRetColor = $ret GUISetBkColor($ret, $Colorizer) ;~ Меняем фоновый цвет слайдеров: For $j=0 To 2 GUICtrlSetBkColor($CTRL_slider[$j],$ret) Next EndFunc Func slEvent() Local $slColor=GUICtrlRead($CTRL_slider[$N]) GUICtrlSetData ($CTRL_edit[$N],$slColor) GUICtrlSetState($CTRL_slider[$N],$GUI_FOCUS) Input() ;~ Возвращаем утраченный фокус элементу: GUICtrlSetState($CTRL_slider[$N],$GUI_FOCUS) EndFunc Func randomize() Local $i, $HexColor ='0x' For $i=0 to 2 $rnd = int(Random(0,255)) $HexColor &= Hex($rnd,2) GUICtrlSetData($CTRL_edit[$i],$rnd) GUICtrlSetData($CTRL_slider[$i],$rnd) Next For $i=0 to 2 GUICtrlSetBkColor($CTRL_slider[$i],$HexColor) Next GUICtrlSetData($CTRL_edit_hex,$HexColor) GUISetBkColor($HexColor,$Colorizer) EndFunc Func dropper() Local $Time=TimerInit() GUICtrlSetState($ButtonDr,$GUI_DISABLE) ToolTip("Кликните мышью в любом месте экрана",Default,Default,"",0,3) _SetCursor(@WindowsDir & "\cursors\cross_m.cur", 32512) While 1 Sleep (1) ; Символический таймаут для уменьшения CPU!!! $click=GUIGetCursorInfo ($Colorizer) If TimerDiff($Time) > 2300 Then ToolTip("") If $click[2] = 1 And $click[4] <> $ButtonDr Then $Mouse=MouseGetPos() $x=$Mouse[0] $y=$Mouse[1] $DrColor=Hex(PixelGetColor ($x,$y ),6) $j=1 For $i=0 to 2 $Dr=Dec(StringMid($DrColor,$j,2)) GUICtrlSetData($CTRL_edit[$i],$Dr) GUICtrlSetData($CTRL_slider[$i],$Dr) $j += 2 Next For $i=0 to 2 GUICtrlSetBkColor($CTRL_slider[$i],'0x' & $DrColor) Next GUICtrlSetData($CTRL_edit_hex,'0x' & $DrColor) GUISetBkColor('0x' & $DrColor,$Colorizer) GUICtrlSetState($ButtonDr,$GUI_ENABLE) ToolTip("") ExitLoop EndIf WEnd _SetCursor(@WindowsDir & "\cursors\3dwarro.cur", 32512) EndFunc Func DropperScale() Local $Mouse=MouseGetPos() Local $DrColor=Hex(PixelGetColor($Mouse[0],$Mouse[1]),6) If $LastDrColor = $DrColor Then Return 0 $LastDrColor = $DrColor Local $j=1 For $i=0 to 2 $Dr=Dec(StringMid($DrColor,$j,2)) GUICtrlSetData($CTRL_edit[$i],$Dr) GUICtrlSetData($CTRL_slider[$i],$Dr) $j += 2 Next For $i=0 to 2 GUICtrlSetBkColor($CTRL_slider[$i],'0x' & $DrColor) Next GUICtrlSetData($CTRL_edit_hex,'0x' & $DrColor) GUISetBkColor('0x' & $DrColor,$Colorizer) Return 1 EndFunc ;~ Author: Diamond Func _GetControlPos($HWND, $ControlId) Local $Win = WinGetPos($HWND) Local $Client = WinGetClientSize($HWND) Local $Control = ControlGetPos($HWND,"",$ControlId) Local $BorderSize = ($Win[2]-$Client[0]) / 2 Local $PanelSize = $Win[3] - $Client[1] - $BorderSize Local $array[4] $array[0] = $Win[0] + $BorderSize + $Control[0] ; left $array[1] = $Win[1] + $PanelSize + $Control[1] ; $top $array[2] = $array[0] + $Control[2] ; right $array[3] = $array[1] + $Control[3] ; bottom Return $array EndFunc Func ChooseColor() Local $HexColor = '0x' Local $BGR=ColorPicker(SwitchColor(GUICtrlRead($CTRL_edit_hex)), $Colorizer) If $BGR = -1 Then Return For $i=0 to 2 $HexColor &= Hex($BGR[$i+1],2) GUICtrlSetData($CTRL_edit[$i],$BGR[$i+1]) GUICtrlSetData($CTRL_slider[$i],$BGR[$i+1]) Next For $i=0 to 2 GUICtrlSetBkColor($CTRL_slider[$i],$HexColor) Next GUICtrlSetData($CTRL_edit_hex,$HexColor) GUISetBkColor($HexColor,$Colorizer) EndFunc Func ColorPicker($Default=0, $hWnd=0) Local $p = DllStructCreate("dword;int;int;int;ptr;dword;int;ptr;ptr") DllStructSetData($p, 1, DllStructGetSize($p)) DllStructSetData($p, 2, $hWnd) DllStructSetData($p, 4, $Default) DllStructSetData($p, 5, DllStructGetPtr(DllStructCreate("int[16]"))) DllStructSetData($p, 6, BitOR(0x100, 0x2, 0x1)) $ret = DllCall("comdlg32.dll", "long", "ChooseColor", "ptr",DllStructGetPtr($p)) If $ret[0] = False Then Return -1 Local $color_picked = DllStructGetData($p, 4) $color_picked = Hex(String($color_picked), 6) Local $array[4] $array[0]="0x" & StringRight($color_picked,2) & StringMid($color_picked,3,2) & StringLeft($color_picked,2) $array[1]=Number("0x" & StringRight($color_picked,2)) ; RED $array[2]=Number("0x" & StringMid($color_picked,3,2)) ; GREEN $array[3]=Number("0x" & StringLeft($color_picked,2)) ; BLUE Return $array EndFunc Func WM_COMMAND($hWndGUI, $MsgID, $WParam, $LParam) Local $FocusedHandel = ControlGetHandle($hWndGUI, "", ControlGetFocus($hWndGUI)) Local $Continue = False, $i Switch $FocusedHandel Case GUICtrlGetHandle($ButtonRnd) randomize() Return Case GUICtrlGetHandle($ButtonDr) dropper() Return Case GUICtrlGetHandle($Button_ChooseColor) ChooseColor() Return Case Else For $i = 0 To 2 If $FocusedHandel = GUICtrlGetHandle($CTRL_edit[$i]) Then $Continue = True ExitLoop EndIf Next If Not $Continue Then Return EndSwitch $N = $CTRL_edit[$i] - $CTRL_edit[0] Local $CtrlRead = GUICtrlRead($CTRL_edit[$N]) If StringLeft($CtrlRead, 1) = 0 And StringLen($CtrlRead) > 1 Then GUICtrlSetData($CTRL_edit[$N], StringTrimLeft($CtrlRead, 1)) Input() EndFunc Func WM_SCROLL($hWndGUI, $MsgID, $WParam, $LParam) Local $FocusedHandel = ControlGetHandle($hWndGUI, "", ControlGetFocus($hWndGUI)) For $i = 0 To 2 If GUICtrlGetHandle($CTRL_slider[$i]) = $FocusedHandel Then $N = $i ExitLoop EndIf Next Local $CurInfo = GUIGetCursorInfo($hWndGUI) If $CurInfo[2] = 1 Then ToolTip(GUICtrlRead($CTRL_slider[$N])) Else ToolTip("") EndIf slEvent() EndFunc ; Author - I think gafrost ;) ;================================================================== ; $s_file - file to load cursor from ; $i_cursor - system cursor to change ;================================================================== Func _SetCursor($s_file, $i_cursor) Local $newhcurs, $lResult $newhcurs = DllCall("user32.dll", "int", "LoadCursorFromFile", "str", $s_file) If Not @error Then $lResult = DllCall("user32.dll", "int", "SetSystemCursor", "int", $newhcurs[0], "int", $i_cursor) If Not @error Then $lResult = DllCall("user32.dll", "int", "DestroyCursor", "int", $newhcurs[0]) Else ;MsgBox(0, "Error", "Failed SetSystemCursor") EndIf Else ;MsgBox(0, "Error", "Failed LoadCursorFromFile") EndIf Return $lResult[0] EndFunc ;==>_SetCursor ; Author - RazerM Func SwitchColor ($iColor) Local $iMask $iMask = BitXOR(BitAND($iColor, 0xFF) , ($iColor / 0x10000)) Return BitXOR($iColor, ($iMask * 0x10001)) EndFunc ;==>SwitchColor ;~ Author: Diamond Func _ButtonClassicStyle($controlID, $style=0) GUICtrlSetStyle($controlID, 0x0040) ; $BS_ICON GUICtrlSetImage($controlID, "shell32.dll",0,0) GUICtrlSetStyle($controlID, $style) EndFunc ![]() |
------- Отправлено: 07:56, 22-09-2007 | #459 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Creat0R
Спасибо за отклик! ![]() Цитата:
Кстати из-за давности проекта осталось несколько, неуклюже написанных функций, (ведь тогда у меня было поменьше опыта...) они так и остались ![]() Цитата:
![]() Цитата:
![]() По поводу курсора - идея хорошая, но с точки зрения пользователя было бы некорректно заменять текущий курсор на новый... Вижу толька два выхода: либо искать способ для определения текущего курсора, либо искать другую API-функцию (хотелось бы верить что она существует) Цитата:
Куда-то пропала моя любимая фича: ![]() ![]() Вместо этого добавился глюк: При клике по $GrCover запускается последнее действие, т.е. если я до этого нажимал кнопку "Цвет", то при клике по $GrCover вызывается диалог выбора цвета и т.д. ![]() Добавлено: Цитата:
![]() |
|||||
Последний раз редактировалось Diamond, 22-09-2007 в 16:21. Причина: Добавление Отправлено: 15:57, 22-09-2007 | #460 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[Архив - Часть 1.3] AutoIt скрипты | biork | AutoIt | 503 | 09-06-2007 11:27 | |
[Архив - Часть 1.2] AutoIt скрипты | Dirk Diggler | AutoIt | 505 | 02-12-2006 11:00 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|