Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
mustafar
29-12-2008, 13:42
спасибо!!!
Имеется массив строк. Как обратиться к определённому символу определённой строки?
$Array[$i][$n] не подходит...
Как обратиться к определённому символу определённой строки? »
Что значит обратиться? StringMid($aArray[$i], 2, 1) ?
mustafar
30-12-2008, 16:34
Ещё два вопроса: Как сделать чтобы этот скрипт искал эти пиксели в определённом окне? и как сделать что бы он ждал их появления (пикселей) и не выключался, а то он у меня проверяет координаты прямоугольника, не находит нужного цвета и выключается.
Как сделать чтобы этот скрипт искал эти пиксели в определённом окне? и как сделать что бы он ждал их появления (пикселей) и не выключался »
HotKeySet("{ESC}", "_Quit")
$hWindow = WinGetHandle("[CLASS:SciTEWindow]")
While 1
$nColor = PixelSearch(200, 150, 220, 170, 0xFFFFFF, 0, 1, $hWindow)
If Not @error Then _MyFunc($nColor)
Sleep(100)
WEnd
Func _MyFunc($nColor)
MsgBox(64, '', 'Hello from MyFunc(' & $nColor[0] & ', ' & $nColor[1] & ') :)')
_Quit()
EndFunc
Func _Quit()
Exit
EndFunc
BonD 007
02-01-2009, 22:10
Хочу, чтобы в Новом 2009-м году при нажатии на какую-нибудь горячую клавишу создавалась новая папка в активном окне, а то надоело постоянно клацать правой кнопой мыши, целиться в создать, потом в папку... долго это. Да и названия "Новая папка", "Новая папка (2)" поднадоели; хочется, чтоб их можно было поменять (к примеру, чтоб было "0", "1", "2" и т. д.). Прога для назначения горячей клавиши на приложение у меня есть, да и в Windows есть такая функция, а вот скриптик хотелось бы поиметь. Может можно это на AutoIt сделать? Или при помощи командной строки. Может есть проги, которые позволяют это делать? Помогите пожалуйста.
можно и так: »
Вообще-то эта тема по AutoIt ;) ...
BonD 007,
при нажатии на какую-нибудь горячую клавишу создавалась новая папка в активном окне »
Пример:
#NoTrayIcon
Opt("WinWaitDelay", 1)
Global $sFileNameFormat = "New_%i"
HotKeySet("^+n", "_CreateFolder_Proc")
HotKeySet("^+w", "_Quit")
While 1
Sleep(1000)
WEnd
Func _CreateFolder_Proc()
Local $sExplorer_Title = "[CLASS:CabinetWClass]"
If Not WinActive($sExplorer_Title) Then Return
Local $sPath = ControlGetText($sExplorer_Title, "", "Edit1")
If Not StringInStr(FileGetAttrib($sPath), "D") Then Return
Local $iFolder_Num = 1
Local $sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
While StringInStr(FileGetAttrib($sPath & "\" & $sNewFolderName), "D")
$iFolder_Num += 1
$sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
WEnd
DirCreate($sPath & "\" & $sNewFolderName)
EndFunc
Func _Quit()
Exit
EndFunc
Maza Faka
03-01-2009, 07:48
Пример: »
Неплохо было бы добавить проверку на класс ExploreWClass, вдруг пользователь запускает Explorer вместо "Мой компьютер":
#NoTrayIcon
Opt("WinWaitDelay", 1)
Global $sFileNameFormat = "New_%i"
HotKeySet("^+n", "_CreateFolder_Proc") ;Ctrl + Shift + n
HotKeySet("^+w", "_Quit") ;Ctrl + Shift + w
While 1
Sleep(1000)
WEnd
Func _CreateFolder_Proc()
Local $sExplorer_Title = "[CLASS:CabinetWClass]"
If Not WinActive($sExplorer_Title) Then $sExplorer_Title = "[CLASS:ExploreWClass]"
If Not WinActive($sExplorer_Title) Then Return
Local $sPath = ControlGetText($sExplorer_Title, "", "Edit1")
If Not StringInStr(FileGetAttrib($sPath), "D") Then Return
Local $iFolder_Num = 1
Local $sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
While StringInStr(FileGetAttrib($sPath & "\" & $sNewFolderName), "D")
$iFolder_Num += 1
$sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
WEnd
DirCreate($sPath & "\" & $sNewFolderName)
EndFunc ;==>_CreateFolder_Proc
Func _Quit()
Exit
EndFunc ;==>_Quit
:)
BonD 007
03-01-2009, 13:45
Просто поместить код из предыдущего сообщения в файл с расширением ".au3", запустить, нажать Ctrl + Shift + n и появится папка? Что-то не получается. И ещё. Когда я писал "в активном окне", я имел ввиду чтобы, к примеру, при нажатии тех же Ctrl + Shift + n создавалась папка в любом окне Explorer'а, которое в данный момент активно (или на рабочем столе) независимо от того, где лежит скрипт.
Когда я писал "в активном окне", я имел ввиду чтобы, к примеру, при нажатии тех же Ctrl + Shift + n создавалась папка в любом окне Explorer'а, которое в данный момент активно (или на рабочем столе) независимо от того, где лежит скрипт. »
Рабочий стол не предусматривался, тогда так:
#NoTrayIcon
Opt("WinWaitDelay", 1)
Global $sFileNameFormat = "New_%i"
HotKeySet("^+n", "_CreateFolder_Proc") ;Ctrl + Shift + n
HotKeySet("^+w", "_Quit") ;Ctrl + Shift + w
While 1
Sleep(1000)
WEnd
Func _CreateFolder_Proc()
Local $sExplorer_Title = "[CLASS:CabinetWClass]"
Local $sPath
If Not WinActive($sExplorer_Title) Then $sExplorer_Title = "[CLASS:ExploreWClass]"
If Not WinActive($sExplorer_Title) Then $sExplorer_Title = "[CLASS:Progman]"
If Not WinActive($sExplorer_Title) Then Return
Switch $sExplorer_Title
Case "[CLASS:CabinetWClass]", "[CLASS:ExploreWClass]"
Local $sWin_Title = WinGetTitle($sExplorer_Title)
Local $sWin_Text = WinGetText($sExplorer_Title)
$sPath = StringRegExpReplace($sWin_Text, "(?s).*(\r\n|)(\w+:\\.*" & $sWin_Title & ")(\r\n|.*)", "\2")
Case "[CLASS:Progman]"
$sPath = @DesktopDir
EndSwitch
If Not StringInStr(FileGetAttrib($sPath), "D") Then $sPath = ControlGetText($sExplorer_Title, "", "Edit1")
If Not StringInStr(FileGetAttrib($sPath), "D") Then Return
Local $iFolder_Num = 1
Local $sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
While StringInStr(FileGetAttrib($sPath & "\" & $sNewFolderName), "D")
$iFolder_Num += 1
$sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
WEnd
DirCreate($sPath & "\" & $sNewFolderName)
EndFunc ;==>_CreateFolder_Proc
Func _Quit()
Exit
EndFunc ;==>_Quit
Maza Faka
03-01-2009, 15:26
при нажатии тех же Ctrl + Shift + n создавалась папка в любом окне Explorer'а, которое в данный момент активно (или на рабочем столе) »
Правильно заданный вопрос - половина ответа :umnik:
тогда так: »
Что то у меня этот скриптик не хочит работать... Я компилю его запускаю, жму в активном окне проводника ctrl+shift+n и ни чего не происходит. Мб что то делаю не так?
katok888
03-01-2009, 18:52
Что то у меня этот скриптик не хочит работать. »
Такая же фигня.
ganselo, katok888,
этот скриптик не хочит работать »
Вроде поправил... интересно, что у вас показывает Au3 Info Tool при навидении на тело папки (во вкладке «Visible Text»)?
интересно, что у вас показывает Au3 Info Tool при навидении на тело папки (во вкладке «Visible Text»)? »
У меня показывает CabinetWClass
katok888
03-01-2009, 20:04
Creat0R, интересно, что у вас показывает Au3 Info Tool при навидении на тело папки »
FolderView
интересно, что у вас показывает Au3 Info Tool при навидении на тело папки »
Смотри скрин.
И еще... На Рабочем столе папки создаются, а в проводнике нет.
katok888
03-01-2009, 20:18
Все равно не работает
Frag-o-Matik
03-01-2009, 20:26
Помогите сделать небольшой скрипт, сам в программировании не силен
Смысл в том, что имеется запускной файл (допустим Zapusk.exe), при его запуске появляется окно с полосой проверки измененных файлов в папке "sys", после проверки в окне загорается кнопка "установить", после нажатия этой кнопки закрывается процесс Zapusk.exe и открывается Ustanovka.exe, вот надо чтобы после нажатия этой кнопки "установить" - процесс Ustanovka.exe не запустился, а сначала переименовывалась папка "sys" в папку "sys1", а после - папка "path" в папку "sys", и только потом с новой папки "1" запускался процесс Ustanovka.exe. Понимаю что заумно, но прошу помочь, вот код скрипта, где вопросы это то место где надо вставить то чего я не понимаю :)
If FileExists("path") Then
RunWait("Zapusk.exe", "")
ProcessWaitClose ( "Zapusk.exe" )
???; ВОТ ЗДЕСЬ Я НЕ ПОНИМАЮ ЧТО НАПИСАТЬ)
DirMove("sys", "sys1")
DirMove("path", "sys")
EndIf
ProcessWaitClose ( "Ustanovka.exe" )
DirMove("system", "path")
DirMove("system1", "system")
exit
Ну и соотвественно после закрытия процесса Ustanovka.exe, папки переименовывались назад, что выше уже написано в коде
Забыл сказать, просто так файл Ustanovka.exe не запустишь, тока через Zapusk.exe
ganselo, katok888,
У вас я так понял Vista? Я проверял на XP :shuffle:
Смотри скрин »
А что во вкладке Hidden Text? :)
Так или иначе, вот версия-отладчик, будет записывать лог, если не работает, лог в студию:
#NoTrayIcon
Opt("WinWaitDelay", 1)
Global $iDebug = True
Global $sDebug_LogFile = @ScriptDir & "\DebugLog.log"
Global $sFileNameFormat = "New_%i"
HotKeySet("^+n", "_CreateFolder_Proc") ;Ctrl + Shift + n
HotKeySet("^+w", "_Quit") ;Ctrl + Shift + w
OnAutoItStart_Init()
While 1
Sleep(1000)
WEnd
Func _CreateFolder_Proc()
_DebugToLog_Proc("_CreateFolder_Proc Call: Called by HotKey(" & @HotKeyPressed & ").")
Local $sExplorer_Title = "[CLASS:CabinetWClass]"
Local $sPath, $iFolder_Created = 0
If Not WinActive($sExplorer_Title) Then $sExplorer_Title = "[CLASS:ExploreWClass]"
If Not WinActive($sExplorer_Title) Then $sExplorer_Title = "[CLASS:Progman]"
If Not WinActive($sExplorer_Title) Then _
Return _DebugToLog_Proc("_CreateFolder_Proc Call: Dir creation is not possible in currently active window: " & _
WinGetTitle("[ACTIVE]") & @CRLF)
Switch $sExplorer_Title
Case "[CLASS:CabinetWClass]", "[CLASS:ExploreWClass]"
Local $sWin_Title = WinGetTitle($sExplorer_Title)
Local $sWin_Text = WinGetText($sExplorer_Title)
$sPath = StringRegExpReplace($sWin_Text, "(?s).*(\r\n|)(\w+:\\.*" & $sWin_Title & ")(\r\n|.*)", "\2")
Case "[CLASS:Progman]"
$sPath = @DesktopDir
Case Else
Return _DebugToLog_Proc( _
"_CreateFolder_Proc Call: " & _
"Unexpected error (can not get window class name, perhaps a memory unavailable)." & @CRLF)
EndSwitch
_DebugToLog_Proc("_CreateFolder_Proc Call: Found active window with following Class Name: " & $sExplorer_Title)
_DebugToLog_Proc("_CreateFolder_Proc Call: And with the following Title: " & WinGetTitle($sExplorer_Title))
If Not StringInStr(FileGetAttrib($sPath), "D") Then $sPath = ControlGetText($sExplorer_Title, "", "Edit1")
If Not StringInStr(FileGetAttrib($sPath), "D") Then _
Return _DebugToLog_Proc("_CreateFolder_Proc Call: Path for creating folder was not found: " & $sPath)
_DebugToLog_Proc("_CreateFolder_Proc Call: Detected path for creating folder in: " & $sPath)
Local $iFolder_Num = 1
Local $sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
While StringInStr(FileGetAttrib($sPath & "\" & $sNewFolderName), "D")
$iFolder_Num += 1
$sNewFolderName = StringFormat($sFileNameFormat, $iFolder_Num)
WEnd
_DebugToLog_Proc("_CreateFolder_Proc Call: Creating folder with the following name: " & $sNewFolderName & "...")
$iFolder_Created = DirCreate($sPath & "\" & $sNewFolderName)
_DebugToLog_Proc("_CreateFolder_Proc Call: Folder created(?): " & ($iFolder_Created = 1) & @CRLF)
EndFunc ;==>_CreateFolder_Proc
Func _DebugToLog_Proc($sDebug_Info)
If Not $iDebug Then Return
_FileWriteLogEx($sDebug_LogFile, $sDebug_Info & @CRLF)
EndFunc ;==>_DebugToLog_Proc
Func _FileWriteLogEx($sLogPath, $sLogMsg, $iFlag = -1)
Local $sDateNow, $sTimeNow, $sMsg, $iWriteFile, $hOpenFile, $iOpenMode = 1
$sDateNow = @YEAR & "-" & @MON & "-" & @MDAY
$sTimeNow = @HOUR & ":" & @MIN & ":" & @SEC
$sMsg = $sDateNow & " " & $sTimeNow & ">> " & $sLogMsg
If $iFlag <> -1 Then
$sMsg &= FileRead($sLogPath)
$iOpenMode = 2
EndIf
$hOpenFile = FileOpen($sLogPath, $iOpenMode)
If $hOpenFile = -1 Then Return SetError(1, 0, 0)
$iWriteFile = FileWriteLine($hOpenFile, $sMsg)
If $iWriteFile = -1 Then Return SetError(2, 0, 0)
Return FileClose($hOpenFile)
EndFunc ;==>_FileWriteLogEx
Func _Quit()
Exit
EndFunc ;==>_Quit
Func OnAutoItStart_Init()
If $iDebug Then
If FileRead($sDebug_LogFile) <> "" Then
_FileWriteLogEx($sDebug_LogFile, _
StringFormat("============ Debug Log For [%s] Started ============\r\n\r\n...\r\n\r\n", @ScriptName))
Else
_FileWriteLogEx($sDebug_LogFile, StringFormat("============ Debug Log For [%s] Started...", @ScriptName))
_FileWriteLogEx($sDebug_LogFile, StringFormat("============ Operating System: %s\r\n", @OSVersion))
_FileWriteLogEx($sDebug_LogFile, StringFormat("============ Service Pack: %s\r\n", @OSServicePack))
_FileWriteLogEx($sDebug_LogFile, _
StringFormat("============ File System: %s ============\r\n\r\n...\r\n\r\n", DriveGetFileSystem(@HomeDrive)))
EndIf
EndIf
EndFunc ;==>OnAutoItStart_Init
Func OnAutoItExit()
If $iDebug Then
_FileWriteLogEx($sDebug_LogFile, _
StringFormat("============ Debug Log Finished (EXIT CODE: %i) ============\r\n\r\n\r\n", @ScriptName, @exitCode))
$iOpen_LogFile = MsgBox(36, @ScriptName & " - Attention", "Open Debug Log File?" & @CRLF & @CRLF & $sDebug_LogFile)
If $iOpen_LogFile = 6 Then ShellExecute($sDebug_LogFile)
EndIf
EndFunc ;==>OnAutoItExit
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.