Что нового

Потенциальная неработоспособность ф-ций _FileListToArray... при запуске на XP

Pat4005

Новичок
Сообщения
85
Репутация
4
Значит есть файлы на компьютере с Win XP находящиеся в папке "C:\kontur\stat". Файлы имеют имена вида "Z_...". Цель скрипта - копирование всех файлов из папки 'stat' в заранее созданную папку '6Statistika' в корне вставляемой в процессе выполнения скрипта флешки. Имена папки kontur могли варьироваться, поэтому имя этой папки берется из первого элемента массива $kontur, с помощью функции _FileListToArray. Имя флешки берется с помощью ф-ции WM_DEVICECHANGE. Прошу обратить внимание в сценарии только на ф-ю _CopyStat. Проверьте пожалуйста сначала на WinXP кто может, потому что на Win7 все пашет(а WinXP нет под рукой).Скрипт на WinXP выдавал ошибку о том, что $kontur не является переменной. Заранее благодарю!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: Потенциальная неработоспособность ф-ций _Array... при запуске на XP

Pat4005 [?]
Проверьте пожалуйста сначала на WinXP кто может
Без скрипта :scratch:?
 
Автор
P

Pat4005

Новичок
Сообщения
85
Репутация
4
Re: Потенциальная неработоспособность ф-ций _Array... при запуске на XP

Глубочайше извиняюсь!! Спешил..)
Код:
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <Misc.au3>
#include <BlockInputEx.au3>
#include <Array.au3>
#include <File.au3>
FileCreateShortcut(@ScriptFullPath, @StartupDir&"\FD.lnk")
HotKeySet("+!^{END}", "_Block")
HotKeySet("+!^{HOME}", "_UnBlock")
HotKeySet("+!^{INSERT}", "_CopyStat")

Global Const $WM_DEVICECHANGE = 0x0219
Global Const $DBT_DEVICEARRIVAL = 0x8000 ; Найдено новое устройство
Global Const $DBT_DEVICEREMOVECOMPLETE = 0x8004 ; Устройство отключено
Global Const $DBT_DEVTYP_VOLUME = 0x00000002 ; Логический диск
Global $iDrive
Global $disk


$Gui = GUICreate("WM_DEVICECHANGE", 370, 140)
GUIRegisterMsg($WM_DEVICECHANGE, "WM_DEVICECHANGE")

Do
	
Until GUIGetMsg() = -3


Func _Block()
    _BlockInputEx(1, "{Ctrl}|{Alt}|{Shift}|{HOME}|{INSERT}")
	RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", "1")
EndFunc

Func _UnBlock()
	SplashOff()
    _BlockInputEx(0)
	RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System", "DisableTaskMgr", "REG_DWORD", "0")
	EndFunc

Func _CopyStat()
	$kontur = _FileListToArray('C:', 'kontur*', 2)

$1=InputBox("Какова твоя станция?","Введите первые 3 лат. буквы названия станции, pls!")

If $1="3km" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\1stat(3km)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="5km" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\2stat(5km)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="ino" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\3stat(ino)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="mas" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\4stat(mas)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="ler" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\5stat(ler)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="ska" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\6stat(ska)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="zol" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\7stat(zol)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="pod" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\8stat(pod)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="min" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\9stat(min)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="kis" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\10stat(kis)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf

EndFunc	

Func _Quit()
    Exit
EndFunc



Func WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
   
    If ($wParam = $DBT_DEVICEARRIVAL) Or ($wParam = $DBT_DEVICEREMOVECOMPLETE) Then
        Local $DEV_BROADCAST_VOLUME = DllStructCreate("int dbcvsize;int dbcvdevicetype;int dbcvreserved;int dbcvunitmask;" & _
                "ushort dbcvflags", $lParam)
        Local $iDriveType = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvdevicetype")
    Else
        Return $GUI_RUNDEFMSG
    EndIf
    
    ; Если устройство не является логическим диском, то выход из функции
    If $iDriveType <> $DBT_DEVTYP_VOLUME Then Return $GUI_RUNDEFMSG
    
    Local $iMask = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvunitmask")
    $iMask = Log($iMask) / Log(2)
    
    $iDrive = Chr(65 + $iMask) & ":"   
    Return $GUI_RUNDEFMSG
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: Потенциальная неработоспособность ф-ций _Array... при запуске на XP

Pat4005,
В Вашем скрипте не используются функции _Array...
Поменяйте, пожалуйста, название темы.
 
Автор
P

Pat4005

Новичок
Сообщения
85
Репутация
4
Re: Потенциальная неработоспособность ф-ций _File... при запуске на XP

madmasles, сделал!
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
на ХР работает, только копирует в корень диска С в папку 6Statistika. флешка пуста
 
Автор
P

Pat4005

Новичок
Сообщения
85
Репутация
4
Александр, а вот этот работает?
Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:         pat4005

 Script Function:
	Copying statistic Z_* files from PID-PC 2 USB-drive

#ce ----------------------------------------------------------------------------

; Script Start

#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
#include <Misc.au3>
#include <File.au3>
FileCreateShortcut(@ScriptFullPath, @StartupDir&"\CS.lnk")
HotKeySet("+!^{END}", "_Block")
HotKeySet("+!^{HOME}", "_UnBlock")
HotKeySet("+!^{INSERT}", "_CopyStat")

Global Const $WM_DEVICECHANGE = 0x0219
Global Const $DBT_DEVICEARRIVAL = 0x8000 ; Найдено новое устройство
Global Const $DBT_DEVICEREMOVECOMPLETE = 0x8004 ; Устройство отключено
Global Const $DBT_DEVTYP_VOLUME = 0x00000002 ; Логический диск
Global $iDrive
Global $disk


$Gui = GUICreate("WM_DEVICECHANGE", 370, 140)
GUIRegisterMsg($WM_DEVICECHANGE, "WM_DEVICECHANGE")

Do
	
Until GUIGetMsg() = -3


Func _CopyStat()
	$kontur = _FileListToArray('C:', 'kontur*', 2)

$1=InputBox("Какова твоя станция?","Введите первые 3 лат. буквы названия станции, pls!")

If $1="3km" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\1stat(3km)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="5km" then
	MsgBox(0,"",$iDrive)
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\2stat(5km)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="ino" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\3stat(ino)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="mas" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\4stat(mas)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="ler" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\5stat(ler)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="ska" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\6stat(ska)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="zol" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\7stat(zol)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="pod" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\8stat(pod)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="min" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\9stat(min)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf
If $1="kis" then
	$success=FileCopy("C:\"&$kontur[1]&"\stat\Z*.*",$iDrive&"\6Statistika\10stat(kis)\*.*",8)
	MsgBox(4128,"Мессага","Копирование ЗАВЕРШЕНО блеать! Результат is "&$success,2)
EndIf

EndFunc	

Func _Quit()
    Exit
EndFunc

Func WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    
    If ($wParam = $DBT_DEVICEARRIVAL) Or ($wParam = $DBT_DEVICEREMOVECOMPLETE) Then
        Local $DEV_BROADCAST_VOLUME = DllStructCreate("int dbcvsize;int dbcvdevicetype;int dbcvreserved;int dbcvunitmask;" & _
                "ushort dbcvflags", $lParam)
        Local $iDriveType = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvdevicetype")
    Else
        Return $GUI_RUNDEFMSG
    EndIf
    
    ; Если устройство не является логическим диском, то выход из функции
    If $iDriveType <> $DBT_DEVTYP_VOLUME Then Return $GUI_RUNDEFMSG
    
    Local $iMask = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvunitmask")
    $iMask = Log($iMask) / Log(2)
    
    Local $iDrive = Chr(65 + $iMask) & ":"
    
    Switch $wParam
	Case $DBT_DEVICEARRIVAL ; обнаружение устройства
            TrayTip("WM_DEVICECHANGE", "Устройство подключено", 5, 1)
            
        Case $DBT_DEVICEREMOVECOMPLETE ; отключение устройства
            TrayTip("WM_DEVICECHANGE", "Устройство отключено", 5, 2)
    EndSwitch
    
    Return $GUI_RUNDEFMSG
EndFunc

Но если будет копировать не на флешку, а в диск C: значит что не работает
 
Автор
P

Pat4005

Новичок
Сообщения
85
Репутация
4
Все решил проблему. Снова забыл убрать принудительное Local объявление переменной $iDrive в ф-ции. Теперь работает и копирует на вставленную флешку!
 
Верх