Войти

Показать полную графическую версию : [Архив - Часть 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

kagorec
03-04-2008, 15:20
Всем привет, почитав ваши произведения в постах выше аж голова кругом...
Открыв мануал, решил сделать автоматизацию некоторых манипуляций в игре.
Написал скрипт, компилировал... а при запуске в ХР он в доли секунды включается и исчезает (в процессах тоже появляется на доли секунды и проподает)


Opt ("SendKeyDelay", 25 )
Opt ("MouseClickDownDelay", 25)
Global $Paused
HotKeySet("{PAUSE}", "Paused")

HotKeySet ("{F5}", "pickup_5" )
HotKeySet ("{F6}", "pickup_10" )

HotKeySet ("{NUMPAD0}", "Right_Click")
HotKeySet ("{NUMPAD1}", "Right_Click1")
HotKeySet ("{NUMPAD2}", "Left_Click")



;********** Left Click **********

Func Left_Click ()
While (1)
ToolTip('"LeftClicker"',200,0)
MouseClick ("Left")
MouseUp ("Left")

WEnd
EndFunc


;********** Right Click **********

Func Right_Click ()
While (1)
ToolTip('"RightClicker + Pickup"',200,0)
MouseDown( "Right" )
Send ("{SPACE}")
WEnd
EndFunc

Func Right_Click1 ()
While (1)
ToolTip('"RightClicker"',200,0)
MouseClick ("Right")
WEnd
EndFunc

;********** Pause **********

Func Paused()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Script is "Paused"',0,0)
WEnd
ToolTip("")
EndFunc



;********** pickup 4min. **********

Func pickup_5 ()
While (1)
ToolTip('"Pickup every 5.min"',200,0)
Send ("{SPACE}")
Sleep (30000)

WEnd
EndFunc


;********** pickup 10min. **********

Func pickup_10 ()
While (1)
ToolTip('"Pickup every 10.min"',200,0)
Send ("{SPACE}")
Sleep (60000)

WEnd
EndFunc

Посмотрите что не так =)

Написал еще один и та же реакция... проподает.
Global $Paused
HotKeySet("{F4}", "Pausediii")
Func Pausediii()
$Paused = NOT $Paused
While $Paused
Send ('{SPACE}')
WEnd
ToolTip("")
EndFunc

Maza Faka
03-04-2008, 15:41
kagorec
Посмотрите что не так »
Нет основного цикла. После назначения функций на горячие клавиши вставь бесконечный цикл:
While 1
Sleep(100)
WEnd

amel27
04-04-2008, 10:16
Maza Faka
Пытаюсь реализовать вот такой хинт »интересно, а чем не устраивает штатный ToolTip?
Если найдётся время посмотри пожалуйста где ошибка »что касается структур подправил, но сразу после отображения окна скрипт все равно валится... возможно, причина в том что это OCX а не DLL, либо требуется что-то еще.. можешь, кстати, поинтересоваться на оффсайте:
#include <GuiConstants.au3>
#include <WinAPI.au3>

Global Const $HH_DISPLAY_TEXT_POPUP = 0xE
Global Const $HH_CLOSE_ALL = 0x12

Global $DllRet

$hGUI = GUICreate("Test GUI", 300, 200, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_CONTEXTHELP)
$hInput1 = GUICtrlCreateInput("", 50, 50, 200, 20)
$hInput2 = GUICtrlCreateInput("Input text here", 50, 100, 200, 20)
$HelpButton = GUICtrlCreateButton("Help", 20, 160, 60, 25)

$HH_POPUP = DllStructCreate("int cbStruct;hwnd hinst;uint idString;ptr pszText;long pt[2];dword clrForeground;dword clrBackground;long rcMargins[4];ptr pszFont")
$tPoint = DllStructCreate("long X;long Y", DllStructGetPtr($HH_POPUP, "pt"))
$tRect = DllStructCreate("long L;long T;long R;long B", DllStructGetPtr($HH_POPUP, "rcMargins"))

$tText = DllStructCreate("char String[256]")
$tFont = DllStructCreate("char String[256]")

DllStructSetData($tText, "String", "Help Popup")
DllStructSetData($tFont, "String", "MS Sans Serif, 10, , BOLD")

DllStructSetData($tRect, "L", -1)
DllStructSetData($tRect, "R", -1)
DllStructSetData($tRect, "T", -1)
DllStructSetData($tRect, "B", -1)

DllStructSetData($HH_POPUP, "cbStruct", DllStructGetSize($HH_POPUP))
DllStructSetData($HH_POPUP, "hinst", _WinAPI_GetModuleHandle(""))
DllStructSetData($HH_POPUP, "idString", 0)
DllStructSetData($HH_POPUP, "pszText", DllStructGetPtr($tText))
DllStructSetData($HH_POPUP, "clrForeground", -1)
DllStructSetData($HH_POPUP, "clrBackground", -1)
DllStructSetData($HH_POPUP, "pszFont", DllStructGetPtr($tFont))

GUISetState()

While 1
Switch GUIGetMsg()
Case -3
ExitLoop
Case $HelpButton
$aPos = MouseGetPos()
DllStructSetData($tPoint, "X", $aPos[0])
DllStructSetData($tPoint, "Y", $aPos[1])

$DllRet = DllCall("HHCtrl.ocx", "hwnd", "HtmlHelpA", "hwnd", $hGUI, "ptr", 0, _
"uint", $HH_DISPLAY_TEXT_POPUP, "dword", DllStructGetPtr($HH_POPUP))

Sleep(3000)
DllCall("HHctrl.ocx", "hwnd", "HtmlHelpA", "hwnd", $DllRet[0], "ptr", 0, "uint", $HH_CLOSE_ALL, "dword", 0)
EndSwitch
WEnd

Maza Faka
04-04-2008, 11:57
интересно, а чем не устраивает штатный ToolTip? »
Пытался реализовать справку What this.

что касается структур подправил, но сразу после отображения окна скрипт все равно валится... возможно, причина в том что это OCX а не DLL, либо требуется что-то еще.. можешь, кстати, поинтересоваться на оффсайте: »
Мдаа... жалко конечно, что валится, но всё равно спасибо за помощь, хотя бы за пример создания столь сложной структуры. ;)

Mogidin
04-04-2008, 15:30
Вопрос. Требуется сделать окно, которого не будет на панели задач, тока в трее.
И в догонку. Можно поменять иконку этого окна в трее? Как?

вопрос снимается. =)

Котяра
04-04-2008, 18:10
Помогите написать один скрипт. Короче, есть утилита fontinst.exe. Ее задача установить, шрифты, лежащие с ней в одной директории и прописанные в файле fontinst.inf. Синтаксис запуска:

fontinst.exe /f fontinst.inf

Так вот надо написать скрипт для формирования fontinst.inf . Файл выглядит так:

[fonts]
imya_faila1.ttf
imya_faila2.ttf
imya_failaX.ttf

Вариант 1: создать файл для всех шрифтов (*.ttf) из директории со скриптом.
Вариант 2: вывести окно со списком шрифтов из текущей директории и флажками.
Как это сделать? Хотя бы первый вариант...

Maza Faka
05-04-2008, 09:20
Котяра
IMHO эту задачу проще и быстрее будет решить с помощью bat-файла:

@echo off
echo [fonts]> fontinst.inf
for %%a in (*.ttf) do echo %%a>> fontinst.inf

Если же без AutoIt-а никак, то пожить этот батничек в папку с AutoIt скриптом и вызывать его такой командой:
ShellExecuteWait(@ScriptDir & "\fontinst.cmd", "", "", "open", @SW_HIDE)

amel27
05-04-2008, 12:37
Maza Faka
жалко конечно, что валится »Вообще, случай с этим HH забавный (если не сказать грустный). Во-первых, есть такой KB (http://support.microsoft.com/kb/244140) для VB, но добавление команд HH_INITIALIZE/HH_UNINITIALIZE (на всякий случай запостил ниже) ситуацию не меняет... разве только ошибка быстрей валится. Во-вторых, на форуме родственной AutoHotkey (http://www.autohotkey.com/) лежит готовый пример (http://www.autohotkey.com/forum/topic14194.html&highlight=htmlhelp) от PhiLho 2006-го года и судя по отзывам он должен работать, но он не работает!.. у меня валится примерно та же ошибка, можешь кстати проверить.Global Const $HH_INITIALIZE=0x1C
Global Const $HH_UNINITIALIZE=0x1D

$tCookie = DllStructCreate("dword")

$DllRet = DllCall("HHCtrl.ocx", "hwnd", "HtmlHelp", "hwnd", 0, "ptr", 0, _
"uint", $HH_INITIALIZE, "dword", DllStructGetPtr($tCookie))

; .....

$DllRet = DllCall("HHCtrl.ocx", "hwnd", "HtmlHelp", "hwnd", 0, "ptr", 0, _
"uint", $HH_UNINITIALIZE, "dword", DllStructGetData($tCookie, 1))

Котяра
Хотя бы первый вариант »
#Include <File.au3>

$sFileName = $cmdline[$cmdline[0]]
If IsNumber($sFileName) Then $sFileName = StringRegExpReplace(@ScriptFullPath, "\.au3|\.exe$", "") &".inf"

$aFileList=_FileListToArray(@ScriptDir, "*.ttf", 1)
If @Error Then Exit
$aFileList[0]="[fonts]"
_FileWriteFromArray($sFileName, $aFileList)

TERMINAL
05-04-2008, 12:52
Можно ли в реестре с помощью RegDelete едалить не значение, а полностью ветку (папку)?

amel27
05-04-2008, 13:05
Можно ли в реестре с помощью RegDelete едалить не значение, а полностью ветку »
конечно можно, если не указывать необязательный параметр "valuename", цитата из справки:Deletes a key or value from the registry

Maza Faka
05-04-2008, 17:36
amel27, Вообще, случай с этим HH забавный »
Хмм.. интересная информация, как я понял функция HtmlHelp вызывается отдельным потоком и вероятно это вызывает ошибку? Может в будущих версиях AutoIt-а эта функция будет работать нормально...

Котяра
05-04-2008, 19:08
Maza Faka, а как после этого запустить fontinst.exe? Добавить в конец батника
fontinst.exe /f fontinst.inf
?

Проблема решилась созданием файла clickme.bat

call fontinst.cmd
fontinst.exe /f fontinst.inf

DENoszone
05-04-2008, 23:19
помогите скрипт перестал вставлять title . и пустое окно делает.
#include <IE.au3> While 1 $oIE = _IECreate ("http://www.yandex.ru/yandsearch?random=071215722&stype=www&randomtext=1&lr=187", 0, 1, 0) WinWait("[Class:IEFrame]") WinSetState("[Class:IEFrame]", "", @SW_MAXIMIZE) _IELoadWait ($oIE) Send("{F5}") $oIE_2 = _IECreate ("http://nigma.ru") WinWait("[Class:IEFrame]") WinSetState("[Class:IEFrame]", "", @SW_MAXIMIZE) _IELoadWait ($oIE_2) $oForm = _IEFormGetObjByName ($oIE_2, 0) $oQuery = _IEFormElementGetObjByName ($oForm, 0) $sTitle = StringReplace(_IEPropertyGet($oIE,"title"), "Яндекс:", "") $sTitle = StringStripWS($sTitle, 3) _IEFormElementSetValue ($oQuery, $sTitle) _IEFormSubmit ($oForm) Sleep(5000) MouseClick("left", 69, 293, 1, 1) Sleep(2000) MouseClick("left", 394, 329, 1, 1) Sleep(2000) MouseClick("left", 379, 355, 1, 1) Sleep(5000) Do WinClose("[Class:IEFrame]") Until Not WinExists("[Class:IEFrame]") ;~ RunWait(@ComSpec & " /c " & 'taskkill /im iexplore.exe /f', "", @SW_HIDE) Sleep(1000) WEnd

amel27
06-04-2008, 11:28
DENoszoneскрипт перестал вставлять title »не улавливаю смысл скрипта, но титул окна можно менять и без _IE-функций:#include <IE.au3>

$oIE = _IECreate ("http://www.yandex.ru/yandsearch?random=071215722&stype=www&randomtext=1&lr=187", 0, 1, 0, 0)
WinSetState("", "", @SW_MAXIMIZE)

_IELoadWait($oIE)
$sTitleOld = _IEPropertyGet($oIE, "title")
$sTitleNew = StringStripWS(StringReplace($sTitleOld,"Яндекс:", ""), 3)
WinSetTitle($sTitleOld, "", $sTitleNew)

DENoszone
06-04-2008, 11:32
берет тайтл с яндекса и вставляет в поиск нигмы

amel27
06-04-2008, 15:50
берет тайтл с яндекса и вставляет в поиск нигмы »
как вариант:#include <IE.au3>

$oIE = _IECreate("http://www.yandex.ru/yandsearch?random=071215722&stype=www&randomtext=1&lr=187", 0, 0, 0)
_IENavigate ($oIE, "http://www.yandex.ru/yandsearch?random=071215722&stype=www&randomtext=1&lr=187")

$sTitle = _IEPropertyGet($oIE, "title")
$sTextFind = StringStripWS(StringReplace(_IEPropertyGet($oIE, "title"),"Яндекс:", ""), 3)

$oIE = _IECreate("http://nigma.ru", 0, 1, 0, 0)
WinSetState("", "", @SW_MAXIMIZE)
_IELoadWait($oIE)

$oForm = _IEFormGetCollection($oIE, 0)
$oElement = _IEFormElementGetObjByName($oForm, "s")
_IEFormElementSetValue($oElement, $sTextFind)
_IEFormSubmit($oForm)
тот же вариант, оптимизированный по скорости загрузки:#include <IE.au3>

_IEErrorHandlerRegister ("MyErrFunc")

$oIE = _IECreate("http://www.yandex.ru/yandsearch?random=071215722&stype=www&randomtext=1&lr=187", 0, 0, 0)
_IENavigate ($oIE, "http://www.yandex.ru/yandsearch?random=071215722&stype=www&randomtext=1&lr=187", 0)
Do
Sleep(100)
$iError = 0
$sTitle = _IEPropertyGet($oIE, "title")
Until $iError=0

$sTextFind = StringStripWS(StringReplace(_IEPropertyGet($oIE, "title"),"Яндекс:", ""), 3)
$oIE = _IECreate("http://nigma.ru", 0, 1, 0, 0)
WinSetState("", "", @SW_MAXIMIZE)
Do
Sleep(100)
$oForm = _IEFormGetCollection($oIE, 0)
Until @error=0
Do
Sleep(100)
$oElement = _IEFormElementGetObjByName($oForm, "s")
Until @error=0

_IEFormElementSetValue($oElement, $sTextFind)
_IEFormSubmit($oForm)

Func MyErrFunc()
$iError = $oIEErrorHandler.number
EndFunc

DENoszone
06-04-2008, 18:47
эээ не пашет

nevson
06-04-2008, 21:10
Подскажите,пожалуйста,как средствами AutoIT можно узнать количество байт,принятых через Dial-Up соединение?

Creat0R
07-04-2008, 02:54
Нужна помошь по ускорению работы функции:

Func __UTF8ToUnicode($Utf8String)
Local $BufferSize = StringLen($Utf8String) * 2
Local $Buffer = DllStructCreate("byte[" & $BufferSize & "]")

DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
"int", 65001, _
"int", 0, _
"str", $Utf8String, _
"int", StringLen($Utf8String), _
"ptr", DllStructGetPtr($Buffer), _
"int", $BufferSize)

Local $UnicodeBinary = DllStructGetData($Buffer, 1)
Local $UnicodeHex1 = StringReplace($UnicodeBinary, "0x", "")
Local $StrLen = StringLen($UnicodeHex1)
Local $UnicodeString, $UnicodeHex2, $UnicodeHex3

For $i = 1 To $StrLen Step 4
$UnicodeHex2 = StringMid($UnicodeHex1, $i, 4)

If $UnicodeHex2 = "0000" Then ContinueLoop

$UnicodeHex3 = StringRegExpReplace($UnicodeHex2, "(..).(.)", "\2\1")
$UnicodeString &= ChrW(Dec($UnicodeHex3))
Next

$Buffer = 0

Return $UnicodeString
EndFunc

С большими блоками текста довольно медленно отрабатывает, всё дело в цикле, я уже пробовал разные комбинации вместо String*, но ничего значительно не ускорялось.. Или быть можеть есть другой вариант преобразовать UTF-8 в юникод? (UTF-16?)

Самое странное это то, что с одним и тем же текстом с файла, обрабатывает быстро, но текст с которым я работаю, получается с сети (вот кстати ссылка (http://creator-lab.ucoz.ru/Testing_Zone/Test.txt) для желающих потестить, можно использовать _InetGetSource(), хотя я использую TCP функции, но результат тот же). Т.е сохранив текст в файл, и проверив с него (используя отдельный скрипт), функция быстрее (намного) обрабатывает чем саму переменную)...

Creat0R
07-04-2008, 04:16
“Век живи, век учись! © ”

Оказывается, любая обработка строк (функции String*) будет в несколько раз замедлена если вы используете «Opt("ExpandEnvStrings", 1)» или «Opt("ExpandVarStrings", 1)» :secret: .

Я в скрипте как раз использую Opt("ExpandEnvStrings", 1), поэтому обработка была медленнее, проверял же в другом скрипте, который создаётся и запускается из этого родительского скрипта.




© OSzone.net 2001-2012