|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты |
|
[архив - Часть 2] AutoIt скрипты
|
(*.*) Сообщения: 36567 |
Внимание! Тема переведена в архивное состояние Текущая тема 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 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать DImaN!
По моему с таким вопросом тебе в другой топик. |
------- Отправлено: 07:48, 18-12-2007 | #891 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Эффект пристыковки GUI-окна к краям экрана или даже к краям других окон:
#include <GUIConstants.au3> Global Const $WM_WINDOWPOSCHANGING = 0x0046 Global $nRange = 20 $hGUI = GUICreate("GUI Stickable!", 280, 150) $Stickable_CB = GUICtrlCreateCheckbox("Stickable?", 20, 30) GUICtrlSetState(-1, $GUI_CHECKED) $Range_Input = GUICtrlCreateInput($nRange, 20, 60, 40, 20, $ES_READONLY) $UpDown = GUICtrlCreateUpdown(-1) GUICtrlSetLimit(-1, 80, 5) GUISetState() GUICreate("Some extra window", 320, 180, 0, 0) GUIRegisterMsg($WM_WINDOWPOSCHANGING, "WM_WINDOWPOSCHANGING") GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $Stickable_CB If GUICtrlRead($Stickable_CB) = $GUI_CHECKED Then GUIRegisterMsg($WM_WINDOWPOSCHANGING, "WM_WINDOWPOSCHANGING") Else GUIRegisterMsg($WM_WINDOWPOSCHANGING, "") EndIf Case $UpDown $nRange = GUICtrlRead($Range_Input) EndSwitch WEnd Func WM_WINDOWPOSCHANGING($hWnd, $Msg, $wParam, $lParam) Local $IsSideWinStick = True ;Set to True for sticking to all visible windows :) - but it's hangs up CPU :( Local $stWinPos = DllStructCreate("uint;uint;int;int;int;int;uint", $lParam) Local $nLeft = DllStructGetData($stWinPos, 3) Local $nTop = DllStructGetData($stWinPos, 4) Local $aCurWinPos = WinGetPos($hWnd) Local $aWorkArea = _GetWorkingArea() ;Left If Abs($aWorkArea[0] - $nLeft) <= $nRange Then DllStructSetData($stWinPos, 3, $aWorkArea[0]) ;Right If Abs($nLeft + $aCurWinPos[2] - $aWorkArea[2]) <= $nRange Then DllStructSetData($stWinPos, 3, $aWorkArea[2] - $aCurWinPos[2]) ;Top If Abs($aWorkArea[1] - $nTop) <= $nRange Then DllStructSetData($stWinPos, 4, $aWorkArea[1]) ;Bottom If Abs($nTop + $aCurWinPos[3] - $aWorkArea[3]) <= $nRange Then DllStructSetData($stWinPos, 4, $aWorkArea[3] - $aCurWinPos[3]) If Not $IsSideWinStick Then Return 0 Local $ahWnd = WinList() For $i = 1 To UBound($ahWnd) - 1 If $ahWnd[$i][1] = $hWnd Or Not BitAND(WinGetState($ahWnd[$i][1]), 2) Or _ BitAND(WinGetState($ahWnd[$i][1]), 32) Or BitAND(WinGetState($ahWnd[$i][1]), 16) Then ContinueLoop $aSideWinPos = WinGetPos($ahWnd[$i][1]) If $aCurWinPos[1] + $aCurWinPos[3] >= $aSideWinPos[1] And $aCurWinPos[1] <= $aSideWinPos[1] + $aSideWinPos[3] Then ;Left If Abs(($aSideWinPos[0] + $aSideWinPos[2]) - $nLeft) <= $nRange Then _ DllStructSetData($stWinPos, 3, $aSideWinPos[0] + $aSideWinPos[2]) ;Right If Abs($nLeft + $aCurWinPos[2] - $aSideWinPos[0]) <= $nRange Then _ DllStructSetData($stWinPos, 3, $aSideWinPos[0] - $aCurWinPos[2]) EndIf If $aCurWinPos[0] + $aCurWinPos[2] >= $aSideWinPos[0] And $aCurWinPos[0] <= $aSideWinPos[0] + $aSideWinPos[2] Then ;Top If Abs(($aSideWinPos[1] + $aSideWinPos[3]) - $nTop) <= $nRange Then _ DllStructSetData($stWinPos, 4, $aSideWinPos[1] + $aSideWinPos[3]) ;Bottom If Abs($nTop + $aCurWinPos[3] - $aSideWinPos[1]) <= $nRange Then _ DllStructSetData($stWinPos, 4, $aSideWinPos[1] - $aCurWinPos[3]) EndIf Next Return 0 EndFunc ;=============================================================================== ; ; Function Name: _GetWorkingArea() ; Description: Returns the coordinates of desktop working area rectangle ; Parameter(s): None ; Return Value(s): On Success - Array containing coordinates: ; $a[0] = left ; $a[1] = top ; $a[2] = right ; $a[3] = bottom ; On Failure - 0 ; ;BOOL WINAPI SystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni); ;uiAction SPI_GETWORKAREA = 48 ;=============================================================================== Func _GetWorkingArea() Local Const $SPI_GETWORKAREA = 48 Local $stRECT = DllStructCreate("long; long; long; long") Local $SPIRet = DllCall("User32.dll", "int", "SystemParametersInfo", _ "uint", $SPI_GETWORKAREA, "uint", 0, "ptr", DllStructGetPtr($stRECT), "uint", 0) If @error Then Return 0 If $SPIRet[0] = 0 Then Return 0 Local $sLeftArea = DllStructGetData($stRECT, 1) Local $sTopArea = DllStructGetData($stRECT, 2) Local $sRightArea = DllStructGetData($stRECT, 3) Local $sBottomArea = DllStructGetData($stRECT, 4) Local $aRet[4] = [$sLeftArea, $sTopArea, $sRightArea, $sBottomArea] Return $aRet EndFunc |
------- Отправлено: 09:14, 18-12-2007 | #892 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:45, 18-12-2007 | #893 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать SashaShveik
Пример: #include <GuiConstants.au3> $hGui = GUICreate("Test", 200, 100) $hInput = GUICtrlCreateInput("", 50, 50, 100, 17) $Send_Btn = GUICtrlCreateButton("Send", 145, 75, 50, 20) GUISetState() While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE ExitLoop Case $Send_Btn Run("notepad.exe") WinWaitActive("Безымянный") ControlSetText("Безымянный", "", "Edit1", GUICtrlRead($hInput)) EndSwitch WEnd Поищи в топике, было много решений этой проблемы. |
Отправлено: 12:39, 18-12-2007 | #894 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Вопрос (касается моего примера пристыковки гиу окна) - как можно определить только те окна, которые видно пользователю? BitAND(WinGetState($Title), 2) определяет скрыто ли окно, а как определить не спрятанно ли оно за другими окнами, ведь в моём примере, если окно не скрыто/не свёрнуто, но находится за каким то другим окном, то GUI пристыковывается к краям этого окна, хотя краев не видно.
В идеале хотелось бы конечно опрелделять не просто видимость (a.k.a доступность) окна, а именно его видимые края, чтобы можно было пристыковывать только к тем краям, которые видимы для глаза ![]() |
------- Отправлено: 17:03, 18-12-2007 | #895 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Проблему вроде решил (осталась только проблема с высокой загрузкой ЦП в момент перетаскивания окна).
Функция для корректировки ссылки (вида hттp://, _http://, хттп:// и т.п.): ConsoleWrite(_CorrectURL('_hттp://creator-lab.ucoz.ru/load/0-0-1-35-20')) Func _CorrectURL($sURL) $sURL = StringRegExpReplace($sURL, '(?i)\A[^a-z\d]+|[^a-z\d]+$', "") Local $sURL_Hold = StringRegExpReplace($sURL, "(?i)(\A.*?(/|\\|:)+[^a-z\d]+|[^a-z\d]+$)", "") $sURL_Hold = StringReplace(StringReplace($sURL_Hold, " ", "%20"), "\", "/") If StringLeft($sURL, 4) = "ftp." Then Return "ftp://" & $sURL_Hold Local $sProtocol = StringRegExpReplace($sURL, "\A.*?(.{1,5}:/).*", "\1/") If StringLen($sProtocol) <= 5 Then Return "http://" & $sURL_Hold $sProtocol = StringRegExpReplace($sProtocol, "(?i)\A(h..p|h..р|h.tp|ht..|..tp|.ttp|[а-я]{1,4})://+", "http://", 1) If @extended > 0 Then Return $sProtocol & $sURL_Hold $sProtocol = StringRegExpReplace($sProtocol, "(?i)\A(f.p|f.р|f..|.tp|[а-я]{1,3})://+", "ftp://", 1) If @extended > 0 Then Return $sProtocol & $sURL_Hold $sProtocol = StringRegExpReplace($sProtocol, "(?i)\A(ms.|.ms|m.s|[а-я]{1,3})://+", "mms://") If @extended > 0 Then Return $sProtocol & $sURL_Hold $sProtocol = StringRegExpReplace($sProtocol, "(?i)\A(r.ps|.tps|rt.p|[а-я]{1,4})://+", "rtsp://") If @extended > 0 Then Return $sProtocol & $sURL_Hold $sProtocol = StringRegExpReplace($sProtocol, "(?i)\A(h..ps|..tps|.t.ps|[а-я]{1,5})://+", "https://") If @extended > 0 Then Return $sProtocol & $sURL_Hold If Not StringRegExp($sProtocol, "(?i)\A(http|https|ftp|mms|rtsp|news|irc)://+") Then $sProtocol = "http://" Return $sProtocol & $sURL_Hold EndFunc Поскольку есть "много заинтересованных" в «AutoIt Menu для Opera», я |
------- Последний раз редактировалось Creat0R, 22-12-2007 в 07:23. Отправлено: 06:57, 22-12-2007 | #896 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Подскажите как мне отправить письмо на почтовый яшик например мойадрес@mail.ru спомошью функции _INetSmtpMail ,если можно то готовый скрипт с подробным описанием, буду рад помощи
|
Отправлено: 13:46, 23-12-2007 | #897 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать rimm
$s_SmtpServer = "smtp.rambler.ru" $s_FromName = "User"; омя отправляющего $s_FromAddress = "1a9s@rambler.ru" от кого шлем(email должен быть правильным, иначе не отправит!!) $s_ToAddress = "gates@microsoft.com"; кому отправляем $s_Subject = "TEMA" ;тема письма $as_Body = ;Текст письма $s_UserName = "" ;логин для smtp сервера $s_Password = ""; пароль для smtp сервера $s_CcAddress = "" $s_BccAddress = "" $s_AttachFiles = "" ;путь к файлу для отправки (опционально) $IPPort=25; порт smtp сервера $ssl=0 _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password,$IPPort, $ssl) |
Последний раз редактировалось fak1r, 23-12-2007 в 17:58. Отправлено: 17:44, 23-12-2007 | #898 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Вот на руборде дали мне сылку вот на этот скрипт
Func _UploadImage($sFilepath) $oXMLHTTP = ObjCreate("MSXML2.XMLHTTP") $oXMLDOC = ObjCreate("MSXML.DOMDocument") ; for later reading the XML data from the upload $oAdoStream = ObjCreate("ADODB.Stream") ; for streaming the image in the post message $oAdoStream.Mode = 3 ; Set read/write $oAdoStream.Type = 1 ; Type Binary $oAdoStream.Open() $oAdoStream.LoadFromFile($sFilePath) $oXMLHTTP.Open("POST", 'http://www.imageshack.us/index.php', "false") ; Set http verb to post, url, and asynchronous mode to false $oXMLHTTP.setRequestHeader("Content-Type", "multipart/form-data;") ;$oXMLHTTP.setRequestHeader("Content-Length", $oAdoStream.Size) $oXMLHTTP.Send('fileupload="'&$oAdoStream.Read($oAdoStream.Size)&'"&xml="yes"') ; Pretty sure this is how I should stream the data of the image, but am I'm not passing the variables right. ConsoleWrite("Response Text: "&$oXMLHTTP.responseText) $sData = $oXMLDoc.load($oXMLHTTP.responseXML.xml) If Not $sData Then MsgBox(0, "Error", "Error Loading XML from HTTP") EndIf EndFunc Так и не получается залить картинку |
Отправлено: 17:56, 23-12-2007 | #899 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Как в Excel-е узнать есть ли текст в ячеике или нет ? Например в ячейке A1 есть а в A2 нет ?
|
Отправлено: 08:01, 24-12-2007 | #900 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 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 |
|