AZJIO сказал(а):А то DirCreate медленно работает...
$Timer = TimerInit()
DirCreate(@ScriptDir & '\~RGTAASD')
ConsoleWrite(FileExists(@ScriptDir & '\~RGTAASD') & @CR)
ConsoleWrite(TimerDiff($Timer) & @CR)
$Timer = TimerInit()
For $i = 1 To 1000
DirCreate('E:\Новая папка\Новая папка\Новая папка\Новая папка' & '\~' & $i)
ConsoleWrite(FileExists('E:\Новая папка\Новая папка\Новая папка\Новая папка' & '\~' & $i) & @CR)
Next
ConsoleWrite(TimerDiff($Timer) & @CR)
DirCreate(@DesktopDir & '\~RGTAASD')
_UpdateExplorer(WinGetHandle('Progman Manager'))
Func _UpdateExplorer($hWnd = 0)
If $hWnd Then
DllCall('user32.dll', 'long', 'SendMessage', 'hwnd', $hWnd, 'int', 0x0111, 'int', 0x7103, 'int', 0)
Return
EndIf
Local $Opt = Opt('WinSearchChildren', 1)
Local $List = WinList('[CLASS:SHELLDLL_DefView]')
For $i = 1 To UBound($List) - 1
DllCall('user32.dll', 'long', 'SendMessage', 'hwnd', $List[$i][1], 'int', 0x0111, 'int', 0x7103, 'int', 0)
Next
Opt('WinSearchChildren', $Opt)
EndFunc ;==>_UpdateExplorer
#include <WinAPI.au3>
$iRet = _WinAPI_CreateDirectory(@DesktopDir & "\Новая папка")
ConsoleWrite(@error & ":" & $iRet & @LF)
Func _WinAPI_CreateDirectory($sPath, $hWnd = 0)
Local $aRet = DllCall("Kernel32.dll", "int", "CreateDirectory", "str", $sPath, "int", 0)
If Not $aRet[0] Then
Return SetError(_WinAPI_GetLastError() > 0, 0, $aRet[0])
EndIf
If Not IsHWnd($hWnd) Then
$hWnd = WinGetHandle('Progman Manager')
EndIf
Local $Opt = Opt('WinSearchChildren', 1)
Local $List = WinList('[CLASS:SHELLDLL_DefView]')
For $i = 1 To UBound($List) - 1
DllCall('user32.dll', 'long', 'SendMessage', 'hwnd', $List[$i][1], 'int', 0x0111, 'int', 0x7103, 'int', 0)
Next
Opt('WinSearchChildren', $Opt)
Return 1
EndFunc
Ну оно разве не подходит автору? кстати можно обновлять только то окно, где создаётся папка, чтобы весь экран не мелькал.это я уже предлагал выше
#Include <File.au3>
#Include <GUIListView.au3>
#Include <Misc.au3>
ConsoleWrite(_MakeDir('Program Manager') & @CR)
Func _MakeDir($hWnd, $sText = '', $sDir = 'New Folder')
Local $hListView, $Opt, $Temp, $Index, $Timer
$Opt = Opt('WinTitleMatchMode', 1)
$hListView = ControlGetHandle(WinGetHandle($hWnd, $sText), '', '[CLASS:SysListView32; INSTANCE:1]')
Opt('WinTitleMatchMode', $Opt)
If Not $hListView Then
Return SetError(1, 0, '')
EndIf
If _GUICtrlListView_FindText($hListView, $sDir) > -1 Then
$Index = 2
While _GUICtrlListView_FindText($hListView, $sDir & ' (' & $Index & ')') > -1
$Index += 1
WEnd
$sDir &= ' (' & $Index & ')'
EndIf
$Temp = _TempFile()
DirCreate($Temp & '\' & $sDir)
_ClipPutFile($Temp & '\' & $sDir)
ControlSend($hListView, '', '', '^v')
$Index = -1
$Timer = TimerInit()
While $Index < 0
If TimerDiff($Timer) > 3000 Then
ExitLoop
EndIf
$Index = _GUICtrlListView_FindText($hListView, $sDir)
Sleep(10)
WEnd
DirRemove($Temp, 1)
If $Index < 0 Then
Return SetError(2, 0, '')
EndIf
_GUICtrlListView_EditLabel($hListView, $Index)
Return SetError(2, 0, $sDir)
EndFunc ;==>_MakeDir