Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: jupiter1976
Дата сообщения: 06.05.2008 12:16
Уважаемые Гуру! Помогите написать скрипт, который бы при запуске удалял бы в папке и ее подпапках файлы с определенным расширением (например avi, mp3, wav...) и временм создания более 3-х дней (опционально) от текущей даты. заранее благодарен.
Автор: Maza Faka
Дата сообщения: 06.05.2008 15:44
jupiter1976

Цитата:
Помогите написать скрипт

Пример:

Код: #include <Date.au3>

_GetOldFiles("c:\Temp", "mp3")

Func _GetOldFiles($sPath, $sType)
Local $iSearch = FileFindFirstFile($sPath & "\*.*")
If $iSearch = -1 Then Return SetError(1, 0, 0)

Local $iFile, $iFullFile, $sRet

While 1
$iFile = FileFindNextFile($iSearch)
If @error Then ExitLoop

$iFullFile = $sPath & "\" & $iFile

If StringInStr(FileGetAttrib($iFullFile), "D") Then $sRet = _GetOldFiles($iFullFile, $sType)

If StringRight($iFullFile, 3) = $sType Then
_DelOldFiles($iFullFile)
EndIf
WEnd

FileClose($iSearch)
EndFunc

Func
_DelOldFiles($sFile)
Local $iDate
Local $aCreateDate = FileGetTime($sFile, 1)

$iDate = $aCreateDate[0] & "/" & $aCreateDate[1] & "/" & $aCreateDate[2] & " " & _
$aCreateDate[3] & ":" & $aCreateDate[4] & ":" & $aCreateDate[4]

If _DateDiff("s", $iDate, _NowCalc()) >= 259200 Then ConsoleWrite($sFile & @LF)
EndFunc
Автор: jupiter1976
Дата сообщения: 06.05.2008 19:19
Maza Faka

Цитата:
устраивает


с удовольствием
Автор: Maza Faka
Дата сообщения: 07.05.2008 09:11
jupiter1976

Цитата:
с удовольствием

Вот набросал на скорую руку, вроде работает:

Код: #include <GuiConstants.au3>
#include <GuiListView.au3>
#include <Date.au3>

Global $Age

$hGUI
= GUICreate("Old files remover", 400, 300)

$hListView = _GUICtrlListView_Create($hGUI, "File|Date", 10, 10, 380, 170, BitOR($LVS_REPORT, $LVS_SINGLESEL), $WS_EX_CLIENTEDGE)

_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, _
$LVS_EX_INFOTIP))

_GUICtrlListView_SetColumnWidth($hListView, 0, 260)
_GUICtrlListView_SetColumnWidth($hListView, 1, 116)

GUICtrlCreateLabel("File Type:", 10, 200, 50, 16)

$TypeInput = GUICtrlCreateInput("tmp;temp;bak", 97, 198, 150, 20)

GUICtrlCreateLabel("Age in day:", 280, 200, 55, 16)

$AgeInput = GUICtrlCreateInput("", 335, 198, 55, 20, $ES_NUMBER)

GUICtrlCreateLabel("Directory to Scan:", 10, 230, 90, 16)

$DirInput = GUICtrlCreateInput(@MyDocumentsDir, 97, 228, 265, 20, BitOR($ES_READONLY, $ES_AUTOHSCROLL))

$DirButton = GUICtrlCreateButton("", 365, 228, 25, 20, $BS_ICON)
GUICtrlSetImage(-1, "shell32.dll", 4, 0)

$ScanButton = GUICtrlCreateButton("Scan", 10, 265, 80, 23)

$CloseButton = GUICtrlCreateButton("Close", 315, 265, 80, 23)

$DelButton = GUICtrlCreateButton("Delete selected", 160, 265, 90, 23)

GUISetState()

While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE, $CloseButton
ExitLoop
Case $DirButton
_SelectFolder()
Case $ScanButton
_Prepare()
Case $DelButton
_DeleteFiles()
EndSwitch
WEnd

Func _SelectFolder()
GUISetState(@SW_DISABLE, $hGUI)

Local $iSelectFolder = FileSelectFolder("Select a folder for scan", "", 0, @MyDocumentsDir)

GUISetState(@SW_ENABLE, $hGUI)

If $iSelectFolder = "" Then Return False

GUICtrlSetData($DirInput, $iSelectFolder)
EndFunc

Func _Prepare()
Local $aType = GUICtrlRead($TypeInput)

If $aType = "" Then
_MsgBox(48, "File Type", "Please enter a valide file type", $hGUI)
GUICtrlSetState($TypeInput, $GUI_FOCUS)
Return False
EndIf

Local $iAge = GUICtrlRead($AgeInput)

If $iAge = "" Then
_MsgBox(48, "File Type", "Please enter a valide age", $hGUI)
GUICtrlSetState($AgeInput, $GUI_FOCUS)
Return False
EndIf

$Age = ($iAge * 24 *60 *60)
ConsoleWrite($Age & @LF)

$aType = StringSplit($aType, "; |,")

_GUICtrlListView_DeleteAllItems($hListView)

_GetOldFiles(GUICtrlRead($DirInput), $aType)

Local $iCount = _GUICtrlListView_GetItemCount($hListView)

If $iCount < 1 Then
_MsgBox(48, "Result", "Required files not found", $hGUI)
Else
_MsgBox(64, "Result", "Found a " & $iCount & " files", $hGUI)
EndIf
EndFunc

Func _GetOldFiles($sPath, $sType)
Local $iSearch = FileFindFirstFile($sPath & "\*.*")
If $iSearch = -1 Then Return SetError(1, 0, 0)

Local $iFile, $iFullFile, $sRet, $i

While 1
$iFile = FileFindNextFile($iSearch)
If @error Then ExitLoop

$iFullFile = $sPath & "\" & $iFile

If StringInStr(FileGetAttrib($iFullFile), "D") Then $sRet = _GetOldFiles($iFullFile, $sType)

For $i = 1 To $sType[0]
If StringRight($iFullFile, 3) = $sType[$i] Then
_SetFilesInfo($iFullFile)
EndIf
Next
WEnd
FileClose($iSearch)
EndFunc

Func _SetFilesInfo($sFile)
Local $iDate, $iIndex
Local $aCreateDate = FileGetTime($sFile, 1)

$iDate = $aCreateDate[0] & "/" & $aCreateDate[1] & "/" & $aCreateDate[2] & " " & _
$aCreateDate[3] & ":" & $aCreateDate[4] & ":" & $aCreateDate[4]

If _DateDiff("s", $iDate, _NowCalc()) >= $Age Then
$iIndex = _GUICtrlListView_AddItem($hListView, $sFile)
_GUICtrlListView_AddSubItem($hListView, $iIndex, $iDate, 1)
EndIf
EndFunc

Func _DeleteFiles()
Local $iCount = _GUICtrlListView_GetItemCount($hListView)
If $iCount < 1 Then Return False

Local $i

For $i = 0 To $iCount - 1
If _GUICtrlListView_GetItemChecked($hListView, $i) = False Then ContinueLoop
FileDelete(_GUICtrlListView_GetItemText($hListView, $i))
_GUICtrlListView_DeleteItem($hListView, $i)
Next
EndFunc

Func _MsgBox($sFlag = 0, $sTitle = "", $sText = "", $hWnd = 0)
Local $DllRet = DllCall("user32.dll", "int", "MessageBox", "hwnd", $hWnd, "str", $sText, "str", $sTitle, "int", $sFlag)
Return $DllRet[0]
EndFunc ;==>_MsgBox
Автор: jupiter1976
Дата сообщения: 07.05.2008 09:36

Цитата:
Потестируй


То что сразу - не хватает "Выделить все"


Добавлено:
очень хорошо отработало, спасибо. Вот бы еще прога автоматом самам удаляла, то что насканила по забитому шаблону, я б ее в планировщик и держись юзеры (сжирают место на обменнике в локалке ... )
Автор: Maza Faka
Дата сообщения: 07.05.2008 12:15
jupiter1976

Цитата:
То что сразу - не хватает "Выделить все"
Вот бы еще прога автоматом самам удаляла

Сам не сможешь доделать? Если нет, то давай предложения в личку, не будем оффтопить.
Автор: asdfzxcv
Дата сообщения: 08.05.2008 11:01
Помогите пожалуйста написать скрипт для решения интересной задачи.
Есть пользователи у которых на компьютерах имеется определённый список разрешённых программ.
Задача такая, отследить запуск чужих программ которые не в списке разрешонных админом и послать оповещение по net send на сервер о тревоге.

решение такое:
отслеживать событие в системе запуска нового процесса, имя которого будет сверятся с разрешонными именами из инишки, если такого имени процесса нет то посылается сообщение о тревоге.

ps не могу найти реализацию функции отслеживания события запуска нового процесса.
функция processlist не подходит, с функцией ProcessWait чёт не получилось


у кого есть какие соображения?
Автор: Maza Faka
Дата сообщения: 08.05.2008 12:59
asdfzxcv
А не проще указать список в реестре

Цитата:

Разрешить запуск приложений, кроме указанных в списке
HKEY_CURRENT_USER\SOFTWARE\Microsoft\ Windows\CurrentVerson\Policies\Explorer

DWORD DisallowRun, значение 1 - запрещает запуск приложений указанных в списке:

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun

Параметры типа STRING - список запрещенных приложений.

"1" - "program.exe"
"2" - "thebat.exe"
"3" - "icq.exe"

Запретить запуск приложений, кроме указанных в списке *
HKEY_CURRENT_USER\SOFTWARE\Microsoft\ Windows\CurrentVerson\Policies\Explorer

DWORD RestrictRun, значение 1 - запрещает запуск всех приложений, кроме системных и приложений указанных в списке:

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun

Параметры типа STRING - список разрешенных приложений.
Автор: asdfzxcv
Дата сообщения: 08.05.2008 13:09
не, это я знаю, но это ограничение легко обойти так как его явно видно.
а у меня задумка написать следящий монитор, тоесть пользователю всё можно как бы, но всё подконтрольно и обойти это слежение более сложнее так как непонятно по каким критерям ведётся оценка ситуации.

имхо конечно, может кому-то и первого способо с реестром будет достаточно, но мне интересно больше аповещение чем запрет.
Автор: NIKZZZZ
Дата сообщения: 08.05.2008 13:31
asdfzxcv

Цитата:
ps не могу найти реализацию функции отслеживания события запуска нового процесса.
функция processlist не подходит,

А в чем проблема? Создается массив запущенных (processlist) процессов, с нужной периодичностью создается новый массив, массивы сравниваются, проверяются на запрещенные , старому массиву присваиваются значения нового.



Автор: asdfzxcv
Дата сообщения: 08.05.2008 13:43
а грузить проц не будет такое удавольствие? например раз в 30 сек?
Автор: InferNO
Дата сообщения: 08.05.2008 14:31
Нет не будет
У меня все время в памяти висит скрипт который из ини-шки берет имена ехе-шников,
и если находит такой процесс понижает ему приоритет.
Я его запускаю и забываю.
Притом что у меня по современным меркам древниий комп - АХР2000+ с 512М оперативки.
(скрипт под себя занимает 440КБ оперативки)


Цитата:
с нужной периодичностью создается новый массив, массивы сравниваются, проверяются на запрещенные , старому массиву присваиваются значения нового.

Это нужно только если отслыживать И запуск И закрытие запрещенных процессов.
Если только запуск - с нужной периодичностью создается новый массив, и проверяется на запрещенные процессы.
ИМО можно смело ставить и 10 сек.
Автор: NIKZZZZ
Дата сообщения: 08.05.2008 14:38
asdfzxcv

Цитата:
грузить проц не будет такое удавольствие? например раз в 30 сек?


Sleep() практически не грузит процессор. Вполне допустим интервал 1 сек, это практически не нагрузит проц. (если, конечно, программа написана корректно, например, не читает ini файл каждый раз).

InferNO

Цитата:
Если только запуск - с нужной периодичностью создается новый массив, и проверяется на запрещенные процессы.

И , при этом, с этой-же периодичностью слать сообщения об этих процессах ?
Автор: asdfzxcv
Дата сообщения: 08.05.2008 14:50
Спасибо, буду изучать как написать массив.

но мне кажется, как то муторно получается,
тоесть есть мы имеем массив со списком полученных процессов и я каждый процесс буду вынужден взять и прогнать по совпадению со списоком разрешонных которые лежат в файле txt мне кажется это займёт время процессора.
А вот как бы замутить что нибуть на подобие ProcessWait ("*.exe") тоесть когда скрипт загружен он просто ждёт любой новый появившейся процесс и только один сверяет со всем списком а не каждый раз все запущенные процессы со всем списком.

Но суть про массив я понял.
Автор: NIKZZZZ
Дата сообщения: 08.05.2008 16:49
asdfzxcv

Цитата:
А вот как бы замутить что нибуть на подобие ProcessWait ("*.exe")

ProcessWait останавливает выполнение скрипта, он будет ждать только одного процесса. "замутить что нибуть" можно на основе " If ProcessExists("process.exe") Then ..." для каждого запрещенного процесса. По сути это будет тот-же ProcessList для запрещенных процессов. Но не думаю, что это будет значительно быстрее и проще. Все равно, нужно проверять, был-ли данный процесс уже запущен (помнить его предыдущее состояние), чтобы постоянно не слать уведомления.

Цитата:
тоесть есть мы имеем массив со списком полученных процессов и я каждый процесс буду вынужден взять и прогнать по совпадению со списоком разрешонных которые лежат в файле txt мне кажется это займёт время процессора.

Ерунда, главное - не читать этот txt файл каждый раз, а загрузить его сразу в массив. Работа с памятью занимает очень мало времени.




Автор: asdfzxcv
Дата сообщения: 08.05.2008 21:05

Цитата:
"замутить что нибуть" можно на основе " If ProcessExists("process.exe") Then ..." для каждого запрещенного процесса.

Да, интересно, но к сажалению для запрещённого процесса, а у меня все неизвестные процессы являются запрящёнными по этому и хотел *.exe
На счёт того что каждый раз будет отсылатся сообщение при новом цикле, это к стате очень острый момент. Я думаю его как то можно обойти, типа помещением тревожного процесса ещё в один список тревожных процессов по которым уже подавалось оповещение и повторно не оповещать пока не разберётся с этим администратор.

Вот пример скрипта на wmi который написал мне друг:
Суть его такая, что он как раз следит за событием появления процесса, но для wmi требуются права админа по этому этот вариант отпадает, темболее нужен конечный продукт exe

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM Win32_ProcessStartTrace")

Wscript.Echo "Waiting for events ..."
Do While(True)
Set objReceivedEvent = objEvents.NextEvent

'report an event
Wscript.Echo objReceivedEvent.ProcessName

Loop
Автор: ViSiToR
Дата сообщения: 08.05.2008 22:33
asdfzxcv 22:05 08-05-2008
Цитата:
для wmi требуются права админа

Хм, интересно бы почитать подробнее об этом, действительно ли это так, или может речь только о доступе к установке компонентов WMI?

По поводу ожидания процессов, можно сравнивать два массива, а список запрещённых процессов в строку поместить:


Код: HotKeySet("^q", "QuitApp")

Global $aTempProcArr, $sBlockProcFile = @ScriptDir & "\Processes.txt"

While 1
ProcessMonitor($sBlockProcFile, 5000)
WEnd

Func
ProcessMonitor($sBlockProcFile, $iSleep=1000)
Local $aProcessesArr = ProcessList()
Local $sBlockProcList = "|" & StringReplace(StringStripCR(FileRead($sBlockProcFile)), @LF, "|") & "|"

If Not _Array2DIsIdentical($aProcessesArr, $aTempProcArr) Then
$aTempProcArr = $aProcessesArr

For $i = 1 To UBound($aProcessesArr)-1
If StringInStr($sBlockProcList, "|" & $aProcessesArr[$i][0] & "|") Or _
StringInStr($sBlockProcList, "|" & $aProcessesArr[$i][1] & "|") Then

$iAsk = MsgBox(262144+52, "Внимание!", _
StringFormat("Найден запрещённый процесс [%s: %d]\n\nУбить его?", $aProcessesArr[$i][0], $aProcessesArr[$i][1]))

If $iAsk = 6 Then ProcessClose($aProcessesArr[$i][1])
EndIf
Next
EndIf

Sleep($iSleep)
EndFunc

Func _Array2DIsIdentical($av2DArray_a, $av2DArray_b, $iLastElement=1)
If UBound($av2DArray_a) <> UBound($av2DArray_b) Then Return False

For $i = 0 To UBound($av2DArray_a)-1
For $j = 0 To $iLastElement
If $av2DArray_a[$i][$j] <> $av2DArray_b[$i][$j] Then Return False
Next
Next

Return True
EndFunc

Func QuitApp()
Exit
EndFunc
Автор: Mister_Che
Дата сообщения: 09.05.2008 18:35
Не могу сделать такую штуку. Есть текстовый файл с текстом. Нужно чтобы все слова в нем перемешались. Не знаю, как это сделать, помогите. И вообще возможно ли такое сделать на АутоИте?
Автор: gregaz
Дата сообщения: 09.05.2008 21:55
ViSiToR
По поводу Winamp_Library :

Цитата:
Жду комментариев, также хотелось бы знать каких ещё функции нехватает.


1.Я не разобрался как внести в окно Winamp для проигрывания конкретный файл(ы) без открытия диалога выбора файлов и без открывающегося контекстного меню
2.Хотелось бы иметь ф-ию , подобную SoundPlay ( "filename" [,wait]) - с возможностью ожидания завершения проигрывания файла
Автор: Maza Faka
Дата сообщения: 10.05.2008 07:27
Mister_Che

Цитата:
Нужно чтобы все слова в нем перемешались

Простейший пример перемешивания строк:

Код: #include <Array.au3>
#include <File.au3>

Dim $aRecord

$file
= "c:\test.txt"

_FileReadToArray($file, $aRecord)

_ArrayDisplay($aRecord, "Previous order")

_ArraySort($aRecord, 0, 1)

_ArrayDisplay($aRecord, "After sorting")

$hFile = FileOpen($file, 2)

_FileWriteFromArray($hFile, $aRecord, 1)

FileClose($hFile)
Автор: ViSiToR
Дата сообщения: 10.05.2008 15:57
gregaz 22:55 09-05-2008
Цитата:
как внести в окно  Winamp для проигрывания конкретный файл(ы)

Поискал немного по оф. форуму и MSDN, у меня вроде что-то получилось:


Код: ;;;
Global Const $IPC_ENQUEUEFILE = 100 ;Adds File to PlayList
;;;

_Winamp_AddFile("D:\Astrix.mp3")

;===============================================================================
;
; Function Name: _Winamp_AddFile()
;
; Function Description: Add specific file path to Winamp's PlayList.
;
; Parameter(s): $sFilePath - Full file path to add to the playlist.
;
; Requirement(s): None.
;
; Return Value(s): On Success - Adds file to Winamp's PlayList and return 1.
; On Failure - Return 0 and set @error to:
; 1 - Unable to find Winamp window, probably winamp isn't runing.
; 2 - SendMessage fail.
;
; Author(s): G.Sandler (a.k.a CreatoR) - CreatoR's Lab (http://creator-lab.ucoz.ru)
;
;=====================================================================

Func _Winamp_AddFile($sFilePath)
Local $hWinamp = WinGetHandle($sWINAMP_CLASS)
If Not IsHWnd($hWinamp) Then Return SetError(1, 0, 0)

Local $iFilePathSize = StringLen($sFilePath) + 1
Local $stMem = DllStructCreate("char[" & $iFilePathSize & "]")

For $i = 0 To $iFilePathSize
DllStructSetData($stMem, 1, Asc(StringMid($sFilePath, $i, 1)), $i)
Next

DllStructSetData($stMem, 1, 0, $iFilePathSize)

;; Create the COPYDATASTRUCT ;;
Local $stCopyData = DllStructCreate("uint;uint;ptr")
DllStructSetData($stCopyData, 1, $IPC_ENQUEUEFILE) ;dwData = $IPC_ENQUEUEFILE = 100
DllStructSetData($stCopyData, 2, ($iFilePathSize * 2)) ;cbData = Size of the message
DllStructSetData($stCopyData, 3, DllStructGetPtr($stMem)) ;lpData = Pointer to the message

DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWinamp, _
"int", $WM_COPYDATA, "int", 0, "ptr", DllStructGetPtr($stCopyData))

If @error Then Return SetError(2, 0, 0)

Return 1
EndFunc ;==>_Winamp_AddFile
Автор: asdfzxcv
Дата сообщения: 10.05.2008 21:17
ViSiToR

Спасибо за код на счёт мониторинга процессов, буду его изучать и попытаюсь адаптировать под свои нужды.
Если что получится то выложу сюда.
Автор: Mister_Che
Дата сообщения: 11.05.2008 02:08
Maza Faka, спасибо! А "Array.au3" и "File.au3" это что?
А можно засунуть слова из моего текстового файла в массив (Dim), затем этот массив запузырить в Рандом и Послать?

Добавлено:
Или вообще в самой программе эти слова написать сразу.

Добавлено:
Почему он печатает шесть цифр вместо трех?

Цитата:

while 1
MouseClick("left", 25, 123, 1)
MouseClick("left", 913, 431, 1)
Send ("{HOME}")
MouseClick("left", 332, 552, 1)
Send("#my script")
MouseClick("left", 668, 624, 1)

$sWord = ""
For $i = 1 To 3
$sWord &= Chr(Random(48, 57, 1))
Send($sWord)

Next
MouseClick("left", 663, 554, 1)
MouseClick("left", 203, 120, 1)
Sleep(1000 * 60 * 0,5)

WEnd
Автор: ViSiToR
Дата сообщения: 11.05.2008 05:46
Mister_Che 03:08 11-05-2008
Цитата:
Почему он печатает шесть цифр вместо трех?

А кто ему сказал печатать 3? Там цикл который 3 раза повторяется, но каждый такой повтор посылает переменную $sWord, которая может содержать случайный символ с ASCII кодом от 48 до 57 и каждый повтор к этой переменной добавляется новый символ

Может так лучше:


Код: $sWord = ""

For $i = 1 To 3
$sWord &= Chr(Random(48, 57, 1))
Next

Send($sWord)
Автор: gregaz
Дата сообщения: 11.05.2008 07:22
gregaz 22:55 09-05-2008

Цитата:
как внести в окно Winamp для проигрывания конкретный файл(ы)

ViSiToR

Цитата:
Поискал немного по оф. форуму и MSDN, у меня вроде что-то получилось:


Да , спасибо . Это именно то , что нужно

gregaz

Цитата:
Хотелось бы иметь ф-ию , подобную SoundPlay ( "filename" [,wait]) - с возможностью ожидания завершения проигрывания файла

ViSiToR

Цитата:
Это можно построить из уже имеющихся функции. Или имеется в виду проигрывание файла не в списке?


Да , похоже можно ( в списке)

Еще вопрос :
Как проиграть файл(не 1-й) с заданным индексом (из окна Winamp) ?
Автор: ViSiToR
Дата сообщения: 11.05.2008 08:15
gregaz 08:22 11-05-2008
Цитата:
похоже можно ( в списке)

Вот переделал функцию _Winamp_Play():


Код: ;===============================================================================
;
; Function Name: _Winamp_Play()
;
; Function Description: Hits the "Play" button on the main controls window.
;
; Parameter(s): $iMode - If this parameter <> -1, instead of pressing the "Play" button,
; will popup a menu with few options (the same as right click on the button).
; $iTrack - [Optional] Sets playlist position before start playing.
; $iWait - [Optional] Determines if the function should wait for the sound to finish before continuing.
; 0 = Continue script, do not wait untill sound finishes playing (default)
; 1 = Function will wait untill the sound is finishes playing (status <> playing)
;
; Requirement(s): None.
;
; Return Value(s): On Success - Play specific (or current) track in PlayList and return 1.
; On Failure - Return 0 and set @error to:
; 1 - Unable to find Winamp window, probably winamp isn't runing.
; 2 - SendMessage fail.
;
; Author(s): G.Sandler (a.k.a CreatoR) - CreatoR's Lab (http://creator-lab.ucoz.ru)
;
;=====================================================================

Func _Winamp_Play($iMode = -1, $iTrack = -1, $iWait = 0)
Local $hWinamp = WinGetHandle($sWINAMP_CLASS)
If Not IsHWnd($hWinamp) Then Return SetError(1, 0, 0)

Local $iCurrent_Track = _Winamp_GetPLPosition()
Local $iPlayStatus = _Winamp_GetCurrentTrackPlayStatus()

If $iMode = -1 And $iPlayStatus = 1 And ($iTrack = $iCurrent_Track Or $iTrack = -1) Then Return 1

If $iTrack >= 0 Then
_Winamp_SetPLPosition($iTrack)
$iCurrent_Track = $iTrack
EndIf

Switch
$iMode
Case -1
DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWinamp, "int", $WM_COMMAND, "int", $WINAMP_BUTTON2, "int", 0)
Case Else
DllCall("user32.dll", "int", "SendMessage", _
"hwnd", $hWinamp, "int", $WM_WA_IPC, "int", 4, "int", $IPC_SPAWNBUTTONPOPUP)
EndSwitch

If @error Then Return SetError(2, 0, 0)

If $iWait Then
While 1
$iPlayStatus = _Winamp_GetCurrentTrackPlayStatus()
If $iPlayStatus = 0 Or _Winamp_GetPLPosition() <> $iCurrent_Track Then ExitLoop

Sleep(100)
WEnd
EndIf

Return 1
EndFunc ;==>_Winamp_Play
Автор: gregaz
Дата сообщения: 11.05.2008 09:05
ViSiToR , спасибо
Ф-ия _Winamp_Play() стала богаче
А нельзя ли в ф-ии _Winamp_AddFile предусмотреть и возможность добавки файлов с предварительной очисткой окна ?
Извини , если сильно напрягаю
Автор: XpycTMD
Дата сообщения: 11.05.2008 12:50
Возможно ли запись вот таких ошибок в фаил???
Автор: NIKZZZZ
Дата сообщения: 11.05.2008 13:39
XpycTMD

Цитата:
Возможно ли запись вот таких ошибок в фаил?

AutoIt3.exe /ErrorStdOut позволяет выводить сообщения не в окно, а поток StdOut. Например, при запуске программы в SCITE вывод происходит в окно редактора.

Для вывода в файл:


Код: "c:\Program Files\AutoIt3\AutoIt3.exe" /ErrorStdOut Test.au3 >Eroor.txt
Автор: Maza Faka
Дата сообщения: 11.05.2008 15:02
gregaz

Цитата:
возможность добавки файлов с предварительной очисткой окна

Google рулит

Код: Global Const $sWINAMP_CLASS = "[CLASS:Winamp v1.x]"
Global Const $WM_WA_IPC = 0x0400
Global Const $IPC_DELETE = 101

$hWinamp = WinGetHandle($sWINAMP_CLASS)

DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWinamp, "int", $WM_WA_IPC, "int", 0, "int", $IPC_DELETE)

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.