Что нового

Как сделать свой проводник с 3-я окнами

StarEdik

Новичок
Сообщения
365
Репутация
4
Привет всем!
Нужен скрипт для наглядного обзора происходящих изменений в папках(в реальном времени). Может кто нит знает как все это делается и поможет примером. Заранее благодарен.
Вот пример формы.
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Обзор Папок", 371, 676, 394, 131)
$Button1 = GUICtrlCreateButton("...", 336, 11, 31, 22)
$Button2 = GUICtrlCreateButton("...", 336, 232, 31, 22)
$Button3 = GUICtrlCreateButton("...", 335, 459, 31, 22)
$ListView1 = GUICtrlCreateListView("", 8, 7, 321, 212)
$ListView2 = GUICtrlCreateListView("",8, 232, 321, 212)
$ListView3 = GUICtrlCreateListView("",8, 456, 321, 212)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
        ;
        Case $Button2
        ;
        Case $Button3
         ;
    EndSwitch
WEnd
Примечание
Хотелоь бы,чтоб при запуске скрипте
1-ом окне по умолчание отображался папка @TempDir ,во 2-ом @ScriptDir , а в 3-м @ProgramFilesDir.

Обычно я пользуюсь с 3-я проводниками как показано на рисунке
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
StarEdik

1ое окно:
Код:
GUICreate("1", 750, 500)
$oIE = ObjCreate("Shell.Explorer.2")
$GUIActiveX = GUICtrlCreateObj($oIE, -240, 0 , 990, 500)
$oIE.navigate(@TempDir)
GUISetState ()

Do
   Sleep(10)
Until GUIGetMsg() = -3


2ое:
Код:
GUICreate("2", 750, 500)
$oIE = ObjCreate("Shell.Explorer.2")
$GUIActiveX = GUICtrlCreateObj($oIE, -240, 0 , 990, 500)
$oIE.navigate(@ScriptDir)
GUISetState ()

Do
   Sleep(10)
Until GUIGetMsg() = -3


3е:
Код:
GUICreate("3", 750, 500)
$oIE = ObjCreate("Shell.Explorer.2")
$GUIActiveX = GUICtrlCreateObj($oIE, -240, 0 , 990, 500)
$oIE.navigate(@ProgramFilesDir)
GUISetState ()

Do
   Sleep(10)
Until GUIGetMsg() = -3
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
_Lexa98_
Спасибо. Здесь http://autoit-script.ru/index.php/topic,2588.msg23637.html#msg23637 предлагался этот вариант. Но с тремя вместе не получается. При кликание папок другие обзоры исчезают ,вид должен быть "Список"и размер иконок надо уменьшить.
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Обзор Папок", 371, 676, 394, 131)
$Button1 = GUICtrlCreateButton("...", 336, 11, 31, 22)
$Button2 = GUICtrlCreateButton("...", 336, 232, 31, 22)
$Button3 = GUICtrlCreateButton("...", 335, 459, 31, 22)

$Obj1 = ObjCreate("Shell.Explorer.2")
$Obj1_ctrl = GUICtrlCreateObj($Obj1, 8, 7, 321, 212)

$Obj2 = ObjCreate("Shell.Explorer.2")
$Obj1_ctr2 = GUICtrlCreateObj($Obj2, 8, 232, 321, 212)

$Obj3 = ObjCreate("Shell.Explorer.2")
$Obj1_ctr3 = GUICtrlCreateObj($Obj3, 8, 456, 321, 212)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$Obj1.Navigate(@TempDir);("C:\")
;Sleep(1000)
;$Obj1.Navigate(@TempDir);("C:\")

$Obj2.Navigate(@ProgramFilesDir);("D:\")
;Sleep(1000)
;$Obj2.Navigate(@ProgramFilesDir);("D:\")

$Obj3.Navigate(@ScriptDir);("E:\")
;Sleep(1000)
;$Obj3.Navigate(@ScriptDir);("E:\")
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
		
            ;
	    Case $Button2

            ;
	    Case $Button3

    EndSwitch
WEnd
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
StarEdik
Вот список только для просмотра:
Код:
#include <File.au3>
#include <Array.au3>
#NoTrayIcon
$Folder1=@TempDir
$Folder2=@ScriptDir
$Folder3=@ProgramFilesDir
$File1=_FileListToArray( $Folder1,'*',0)
$File2=_FileListToArray( $Folder2,'*',0)
$File3=_FileListToArray( $Folder3,'*',0)
_ArrayDisplay($File1,'Temp')
_ArrayDisplay($File2,'ScriptDir')
_ArrayDisplay($File3,'ProgramFiles')
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
_Lexa98_
Что ж не плох, а может в лист с обновлением
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
_Lexa98_
Код:
#include <File.au3>
#include <Array.au3>
#NoTrayIcon

HotKeySet ("{ESC}", "_Exit")

$Folder1=@TempDir
$Folder2=@ScriptDir
$Folder3=@ProgramFilesDir
While 1
$File1=_FileListToArray( $Folder1,'*',0)
$File2=_FileListToArray( $Folder2,'*',0)
$File3=_FileListToArray( $Folder3,'*',0)
_ArrayDisplay($File1,'Temp')
_ArrayDisplay($File2,'ScriptDir')
_ArrayDisplay($File3,'ProgramFiles')
WEnd

Func _Exit()
	Exit
EndFunc


Выход по ESC
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
_Lexa98_
Вот здесь http://autoit-script.ru/index.php/topic,2588.msg18694.html#msg18694 Yashied довольно красиво продемонстрировал пример. Он из реестра берет данные.Но у меня не получается соединив твой скрипт с его скриптом .
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
StarEdik
Неполучается соединить, мож попозже попробую. ;)
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Может, подскажете, как программно из скрипта запустит проводник хотя бы в таком виде( без меню было бы еще лучше ) и переместит его в крайний правый угол экрана.
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
StarEdik [?]
хотя бы в таком виде( без меню было бы еще лучше ) и переместит его в крайний правый угол экрана

Так?

Код:
$path = "C:\Temp\" ; Путь к папке которую нужно открыть.
$x = 0 ; Координата X на которую нужно перенести окно.
$y = 0 ; Координата Y на которую нужно перенести окно.
$wi = 300 ; Ширина окна
$he = 300 ; Высота окна
$name = "Temp" ; Заголовок окна

ShellExecute (@WindowsDir & "\explorer.exe", $path)
Sleep(5000)
WinMove ($name, "", $x, $y, $wi, $he)


Если у вас открывается быстро то можете Sleep поставить поменьше или вообще убрать.
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
_Lexa98_
Спасибо.Я имел ввиду как програмно убрать панель инструментов и ... .Идея такая .Запустить из скрипта 3 проводника в таком виде и поместит их в крайний правый угол экрана сверху вниз по порядку.
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Так?

Код:
$iIE1 = ObjCreate("Shell.Explorer.2")
$1 = GUICreate("Temp", 270, 300, 0, 0)
GUISetBkColor(0xC4C4C4)
$Input1 = GUICtrlCreateInput('', 65, 9, 100)
$Button1 = GUICtrlCreateButton('Перейти', 175, 8, 80, 22)
$Button2 = GUICtrlCreateButton('Назад', 5, 8, 50, 22)
$iActiveX1 = GUICtrlCreateObj($iIE1, 0, 40, 300, 300)
$iIE1.Navigate(@TempDir)
GUISetState ()

$iIE2 = ObjCreate("Shell.Explorer.2")
$2 = GUICreate("Script", 270, 300, 0, 330)
GUISetBkColor(0xC4C4C4)
$Input2 = GUICtrlCreateInput('', 65, 9, 100)
$Button3 = GUICtrlCreateButton('Перейти', 175, 8, 80, 22)
$Button4 = GUICtrlCreateButton('Назад', 5, 8, 50, 22)
$iActiveX2 = GUICtrlCreateObj($iIE2, 0, 40, 300, 300)
$iIE2.Navigate(@ScriptDir)
GUISetState ()

$iIE3 = ObjCreate("Shell.Explorer.2")
$3 = GUICreate("Program", 270, 300, 0, 660)
GUISetBkColor(0xC4C4C4)
$Input3 = GUICtrlCreateInput('', 65, 9, 100)
$Button5 = GUICtrlCreateButton('Перейти', 175, 8, 80, 22)
$Button6 = GUICtrlCreateButton('Назад', 5, 8, 50, 22)
$iActiveX3 = GUICtrlCreateObj($iIE3, 0, 40, 300, 300)
$iIE3.Navigate(@ProgramFilesDir)
GUISetState ()

While 1
    Switch GUIGetMsg($1)
        Case -3
            Exit
        Case $Button1
            $iIE1.Navigate(GUICtrlRead($Input1))
            If @error Then ContinueLoop
        Case $Button2
            $iIE1.GoBack()
	EndSwitch
	Switch GUIGetMsg($2)
        Case -3
            Exit
        Case $Button3
            $iIE2.Navigate(GUICtrlRead($Input2))
            If @error Then ContinueLoop
        Case $Button4
            $iIE2.GoBack()
	EndSwitch
	Switch GUIGetMsg($3)
        Case -3
            Exit
        Case $Button5
            $iIE3.Navigate(GUICtrlRead($Input3))
            If @error Then ContinueLoop
        Case $Button6
            $iIE3.GoBack()
    EndSwitch
WEnd
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
_Lexa98_
Так то он так, даже лучще но размеры значков должны быть мелкими, а вид «Список».Только вот наверно Shell.Explorer.2 не поддерживает этот вид. И желательно всё 3 проводника должны быть в одном GUI ,чтоб мог перетаскивать всех одновременно. Я старался так сделать, но ничего не получается. :-[ Об этом я уже писал. Надо умудриться так, чтоб все эти 3 проводника как то «приклеит, прикрепить» к форме. :scratch:
Вот еще ссылки
От CreatoR
http://autoit-script.ru/index.php/topic,2251.msg16346.html#msg16346
и от Zaramot
http://autoit-script.ru/index.php/topic,6506.msg45305.html#msg45305
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Shell.FolderView.1 подойдет для этого дела,если да то как ,ПЛЗ
 

Pelerin

Осваивающий
Сообщения
81
Репутация
23
Можно попробовать так:
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <file.au3>
#Include <GuiListView.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Обзор Папок", 371, 676, 394, 131)
$ListView1 = GUICtrlCreateListView   ('File:', 8, 7, 321, 212)
$ListView2 = GUICtrlCreateListView   ('File:', 8, 232, 321, 212)
$ListView3 = GUICtrlCreateListView   ('File:', 8, 456, 321, 212)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$Path_1 = @TempDir
$Path_2 = @ScriptDir
$Path_3 = @ProgramFilesDir
Do
	; path 1
	ScanFiles ($ListView1, $Path_1)
	; path 2
	ScanFiles ($ListView2, $Path_2)
	; path 3
	ScanFiles ($ListView3, $Path_3)
    $nMsg = GUIGetMsg()
Until $nMsg = $gui_event_close

Func ScanFiles ($hList, $sPath)
	$i_max = _GUICtrlListView_GetItemCount ($hList)
	If $i_max > 0 Then
		For $i = 1 to $i_max
			If Not FileExists ($sPath&'\'&_GUICtrlListView_GetItemText($hList, $i-1, 0)) Then
				_GUICtrlListView_DeleteItem ($hList, $i-1)
			EndIf
		Next
	EndIf

	$Files = _FileListToArray ($sPath)
	For $i = 1 to $Files[0]
		If _GUICtrlListView_FindText ($hList, $Files[$i]) = -1 Then GUICtrlCreateListViewItem ($Files[$i], $hList)
	Next
EndFunc

Остается только придумать как вызывать эту функцию только при изменении файлов (как-то по WindowsMassage) чтобы меньше процессора кушало.


Добавлено:
Сообщение автоматически объединено:

Второй вариант (через OnEventMode и Sleep в осносном цикле - так меньше процессора ест):
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <file.au3>
#Include <GuiListView.au3>

AutoItSetOption ('GUIOnEventMode', 1)

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Обзор Папок", 371, 676, 394, 131)
GUISetOnEvent ($GUI_EVENT_CLOSE, 'MyExit')
$Path_1 = @TempDir
$Path_2 = @ScriptDir
$Path_3 = @ProgramFilesDir

$ListView1 = GUICtrlCreateListView   ($Path_1, 8, 7, 321, 212, $LVS_REPORT)
$ListView2 = GUICtrlCreateListView   ($Path_2, 8, 232, 321, 212, $LVS_REPORT)
$ListView3 = GUICtrlCreateListView   ($Path_3, 8, 456, 321, 212, $LVS_REPORT)
GUISetState(@SW_SHOW)
WinSetOnTop ($Form1, '', 1)
#EndRegion ### END Koda GUI section ###

While 1
	; path 1
	ScanFiles ($ListView1, $Path_1)
	; path 2
	ScanFiles ($ListView2, $Path_2)
	; path 3
	ScanFiles ($ListView3, $Path_3)
	Sleep (1000)
WEnd

Func ScanFiles ($hList, $sPath)
	$i_max = _GUICtrlListView_GetItemCount ($hList)
	If $i_max > 0 Then
		For $i = 1 to $i_max
			If Not FileExists ($sPath&'\'&_GUICtrlListView_GetItemText($hList, $i-1, 0)) Then
				_GUICtrlListView_DeleteItem ($hList, $i-1)
			EndIf
		Next
	EndIf

	$Files = _FileListToArray ($sPath)
	For $i = 1 to $Files[0]
		If _GUICtrlListView_FindText ($hList, $Files[$i]) = -1 Then GUICtrlCreateListViewItem ($Files[$i], $hList)
	Next
EndFunc

Func MyExit()
	Exit
EndFunc
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Pelerin
Спасибо за помощь. :shok: :smile: Это почти (остается кое что доработать –уменьшит нагрузку на процессор до возможного минимума , добавление иконок к файлам ,обработка папок и.т.д. и надеяться на помощь знающих :-[ ) то что нужно. Нагрузка на процессор в первом скрипте -75 %, а во втором 8 %. Благодарю за большую работу. :ok:
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Скрипт от Pelerin работает и меня устраивает .Он хоть и не много загружает процессор, но обновляет лист при изменениях сразу. Если бы еще и иконки от файлов и папок смог бы добавить, но не получается. Как добавить иконки от файлов и папок в ListView . :scratch::-[
Вот, нашел эти ссылки. Помогите люди, добрые и знающие. :wacko:
http://autoit-script.ru/index.php/topic,3874.msg28238.html#msg28238
http://autoit-script.ru/index.php/topic,2086.msg15260.html#msg15260
http://autoit-script.ru/index.php/topic,3725.msg26892.html#msg26892
http://autoit-script.ru/index.php/topic,2588.msg18659.html#msg18659
http://autoit-script.ru/index.php/topic,4218.msg30390.html#msg30390
http://www.autoitscript.com/forum/topic/56352-is-it-possible-to-embed-windows-explorer/page__p__428355#entry428355

Из скрипта CreatoR
http://autoit-script.ru/index.php/topic,3725.msg27190.html#msg27190
сделал кое что для нужды .Прошу для дальнейшего написание помочь.
1.Как оптимизировать скрипт(код) , отобразить родительскую папку с файлами и папками без вложений.
2.Как сделать обновление окон «своих проводников» при изменениях в каталогах (при добавление и удалении файлов и папок)
Вот скрипт
Код:
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <GUIImageList.au3>
#include <GUITreeView.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#Include <WinAPIEx.au3>
Global $Time1 = 0, $Time2 = 0
Global Const $sRoot = @TempDir;'C:\Temp';@DesktopDir
Global Const $sRoot2 =@ScriptDir;@ProgramFilesDir
Global Const $sRoot3 = @DesktopDir
$hForm = GUICreate('MyGUI', 230, 810,@DesktopHeight +50,0)
$Label = GUICtrlCreateLabel('0%', 0, 0, 40, 14)
GUICtrlCreateTreeView(0, 0, 230, 270, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$hTreeView = GUICtrlGetHandle(-1)
GUICtrlCreateTreeView(0, 272, 230, 268, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$hTreeView2 = GUICtrlGetHandle(-1)
GUICtrlCreateTreeView(0, 541, 230, 268, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$hTreeView3 = GUICtrlGetHandle(-1)

; Windows Vista/7
DllCall('uxtheme.dll', 'uint', 'SetWindowTheme', 'hwnd', $hTreeView, 'wstr', 'Explorer', 'ptr', 0)

$hImageList = _GUIImageList_Create(16, 16, 5, 1)
_GUIImageList_AddIcon($hImageList, @SystemDir & '\shell32.dll', 3)
_GUIImageList_AddIcon($hImageList, @SystemDir & '\shell32.dll', 4)
_GUIImageList_AddIcon($hImageList, @SystemDir & '\shell32.dll', 0)

_GUICtrlTreeView_SetNormalImageList($hTreeView, $hImageList)
_GUICtrlTreeView_BeginUpdate($hTreeView)
_GUICtrlTreeView_EnumDir($hTreeView, $sRoot)
_GUICtrlTreeView_SetState($hTreeView, _GUICtrlTreeView_GetFirstItem($hTreeView), $TVIS_EXPANDED, 1)
_GUICtrlTreeView_EndUpdate($hTreeView)

_GUICtrlTreeView_SetNormalImageList($hTreeView2, $hImageList)
_GUICtrlTreeView_BeginUpdate($hTreeView2)
_GUICtrlTreeView_EnumDir($hTreeView2, $sRoot2)
_GUICtrlTreeView_SetState($hTreeView2, _GUICtrlTreeView_GetFirstItem($hTreeView2), $TVIS_EXPANDED, 1)
_GUICtrlTreeView_EndUpdate($hTreeView2)

_GUICtrlTreeView_SetNormalImageList($hTreeView3, $hImageList)
_GUICtrlTreeView_BeginUpdate($hTreeView3)
_GUICtrlTreeView_EnumDir($hTreeView3, $sRoot3)
_GUICtrlTreeView_SetState($hTreeView3, _GUICtrlTreeView_GetFirstItem($hTreeView3), $TVIS_EXPANDED, 1)
_GUICtrlTreeView_EndUpdate($hTreeView3)

GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUISetState()
AdlibRegister('_CPU', 1000)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _FileGetIcon($sFile, $iFixIconID = 1)
    Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
    Local $sRegDefault = "", $sDefIcon = "", $sExecutable, $sExt, $a_LinkInfo, $s_TargetFile, $s_IconFile, $hSearch, $sIconFile
    Local $nIcon = 0, $iError = 0, $aRet[3]

    If StringInStr(FileGetAttrib($sFile & "\"), "D") Then
        $sRegDefault = RegRead("HKCR\Folder", "")

        If $sRegDefault <> "" Then
            $sDefIcon = RegRead("HKCR\Folder\DefaultIcon", "")
        EndIf
    Else
        $sExt = StringRegExpReplace($sFile, '^.*\.', '.')

        If $sExt = ".exe" And FileExists($sFile) Then
            Opt("ExpandEnvStrings", $iOld_Opt_EES)

            If _WinAPI_ExtractIconEx($sFile, 0, 0, 0, 1) = 0 Then
                $sFile = @SystemDir & '\shell32.dll'
                $nIcon = -3
            EndIf

            If $iFixIconID Then
                $nIcon = -($nIcon + ($nIcon > 0))
            EndIf

            Dim $aRet[3] = [2, $sFile, $nIcon]
            Return $aRet
        EndIf

        If $sExt = ".lnk" Then
            $aLinkInfo = FileGetShortcut($sFile)

            If Not @error Then
                $s_TargetFile = $aLinkInfo[0]
                $s_IconFile = $aLinkInfo[4]

                Opt("ExpandEnvStrings", $iOld_Opt_EES)

                If Not FileExists($s_IconFile) Then
                    $a_LinkInfo = _FileGetIcon($s_TargetFile, 0)

                    If Not @error Then
                        $aLinkInfo[4] = $a_LinkInfo[1]
                        $aLinkInfo[5] = $a_LinkInfo[2]
                    EndIf
                EndIf

                If $iFixIconID Then
                    $aLinkInfo[5] = -($aLinkInfo[5] + ($aLinkInfo[5] > 0))
                EndIf

                Dim $aRet[3] = [2, $aLinkInfo[4], $aLinkInfo[5]]
                Return $aRet
            EndIf
        EndIf

        If $sExt = $sFile Then
            $hSearch = FileFindFirstFile($sFile & ".*")
            $sExt = StringRegExpReplace(FileFindNextFile($hSearch), '^.*\.', '.')
            $sFile &= $sExt
            FileClose($hSearch)
        EndIf

        $sRegDefault = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & $sExt, "ProgID")

        If $sRegDefault = "" Then
            $sRegDefault = RegRead("HKCR\" & $sExt, "")
        EndIf

        If $sRegDefault <> "" Then
            $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\DefaultIcon", "")

            If $sDefIcon = "" Then
                $sDefIcon = RegRead("HKCR\" & $sExt & "\DefaultIcon", "")
            EndIf
        Else
            $sRegDefault = RegRead("HKCR\" & $sExt, "PerceivedType")

            If $sRegDefault <> "" Then
                $sRegDefault = RegRead("HKCR\SystemFileAssociations\" & $sRegDefault & "\DefaultIcon", "")
            EndIf
        EndIf
    EndIf

    If $sDefIcon = "" And $sRegDefault <> "" Then
        $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\CurVer", "") ; ADOBE PERVERSION....

        If $sDefIcon Then
            $sDefIcon = RegRead("HKCR\" & $sDefIcon & "\DefaultIcon", "")
        Else
            $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\shell\open\command", "")
            $sDefIcon = StringReplace($sDefIcon, ' "%1"', '')
        EndIf
    EndIf

    If $sDefIcon = "" Then
        $sIconFile = @SystemDir & "\shell32.dll"
    ElseIf Not StringRegExp($sDefIcon, '\A"*%1"*\z') Then
        If StringRegExpReplace($sFile, "^.*\\", "") = "shell32.dll" Then
            $sIconFile = $sFile
            $nIcon = 0
        Else
            Local $aDefIconSplit = StringSplit($sDefIcon, ",")

            If IsArray($aDefIconSplit) Then
                $sIconFile = $aDefIconSplit[1]

                If $aDefIconSplit[0] > 1 Then
                    $nIcon = $aDefIconSplit[2]
                EndIf
            Else
                $iError = 1
            EndIf
        EndIf
    Else
        $sIconFile = -1 ;$sFile
        $nIcon = 0
    EndIf

    If Not FileExists($sIconFile) And Not FileExists(@SystemDir & "\" & $sIconFile) Then
        $sExecutable = _WinAPI_FindExecutable($sFile)

        If FileExists($sExecutable) Then
            $sIconFile = $sExecutable
        Else
            $sExecutable = _WinAPI_PathFindOnPath($sIconFile)

            If FileExists($sExecutable) Then
                $sIconFile = $sExecutable
            EndIf
        EndIf
    ElseIf FileExists(@SystemDir & "\" & $sIconFile) Then
        $sIconFile = @SystemDir & "\" & $sIconFile
    EndIf

    Opt("ExpandEnvStrings", $iOld_Opt_EES)

    If $iFixIconID Then
        $nIcon = -($nIcon + ($nIcon > 0))
    EndIf

    If Not FileExists($sIconFile) Then
        $iError = 1
    EndIf

    Dim $aRet[3] = [2, StringRegExpReplace($sIconFile, '\A"+|"+\z', ''), $nIcon]
    Return SetError($iError, 0, $aRet)
EndFunc

Func _FileGetIcon2($sFile, $iFixIconID = 1)
    Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
    Local $sRegDefault = "", $sDefIcon = "", $sExecutable, $sExt, $a_LinkInfo, $s_TargetFile, $s_IconFile, $hSearch, $sIconFile
    Local $nIcon = 0, $iError = 0, $aRet[3]

    If StringInStr(FileGetAttrib($sFile & "\"), "D") Then
        $sRegDefault = RegRead("HKCR\Folder", "")

        If $sRegDefault <> "" Then
            $sDefIcon = RegRead("HKCR\Folder\DefaultIcon", "")
        EndIf
    Else
        $sExt = StringRegExpReplace($sFile, '^.*\.', '.')

        If $sExt = ".exe" And FileExists($sFile) Then
            Opt("ExpandEnvStrings", $iOld_Opt_EES)

            If _WinAPI_ExtractIconEx($sFile, 0, 0, 0, 1) = 0 Then
                $sFile = @SystemDir & '\shell32.dll'
                $nIcon = -3
            EndIf

            If $iFixIconID Then
                $nIcon = -($nIcon + ($nIcon > 0))
            EndIf

            Dim $aRet[3] = [2, $sFile, $nIcon]
            Return $aRet
        EndIf

        If $sExt = ".lnk" Then
            $aLinkInfo = FileGetShortcut($sFile)

            If Not @error Then
                $s_TargetFile = $aLinkInfo[0]
                $s_IconFile = $aLinkInfo[4]

                Opt("ExpandEnvStrings", $iOld_Opt_EES)

                If Not FileExists($s_IconFile) Then
                    $a_LinkInfo = _FileGetIcon($s_TargetFile, 0)

                    If Not @error Then
                        $aLinkInfo[4] = $a_LinkInfo[1]
                        $aLinkInfo[5] = $a_LinkInfo[2]
                    EndIf
                EndIf

                If $iFixIconID Then
                    $aLinkInfo[5] = -($aLinkInfo[5] + ($aLinkInfo[5] > 0))
                EndIf

                Dim $aRet[3] = [2, $aLinkInfo[4], $aLinkInfo[5]]
                Return $aRet
            EndIf
        EndIf

        If $sExt = $sFile Then
            $hSearch = FileFindFirstFile($sFile & ".*")
            $sExt = StringRegExpReplace(FileFindNextFile($hSearch), '^.*\.', '.')
            $sFile &= $sExt
            FileClose($hSearch)
        EndIf

        $sRegDefault = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & $sExt, "ProgID")

        If $sRegDefault = "" Then
            $sRegDefault = RegRead("HKCR\" & $sExt, "")
        EndIf

        If $sRegDefault <> "" Then
            $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\DefaultIcon", "")

            If $sDefIcon = "" Then
                $sDefIcon = RegRead("HKCR\" & $sExt & "\DefaultIcon", "")
            EndIf
        Else
            $sRegDefault = RegRead("HKCR\" & $sExt, "PerceivedType")

            If $sRegDefault <> "" Then
                $sRegDefault = RegRead("HKCR\SystemFileAssociations\" & $sRegDefault & "\DefaultIcon", "")
            EndIf
        EndIf
    EndIf

    If $sDefIcon = "" And $sRegDefault <> "" Then
        $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\CurVer", "") ; ADOBE PERVERSION....

        If $sDefIcon Then
            $sDefIcon = RegRead("HKCR\" & $sDefIcon & "\DefaultIcon", "")
        Else
            $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\shell\open\command", "")
            $sDefIcon = StringReplace($sDefIcon, ' "%1"', '')
        EndIf
    EndIf

    If $sDefIcon = "" Then
        $sIconFile = @SystemDir & "\shell32.dll"
    ElseIf Not StringRegExp($sDefIcon, '\A"*%1"*\z') Then
        If StringRegExpReplace($sFile, "^.*\\", "") = "shell32.dll" Then
            $sIconFile = $sFile
            $nIcon = 0
        Else
            Local $aDefIconSplit = StringSplit($sDefIcon, ",")

            If IsArray($aDefIconSplit) Then
                $sIconFile = $aDefIconSplit[1]

                If $aDefIconSplit[0] > 1 Then
                    $nIcon = $aDefIconSplit[2]
                EndIf
            Else
                $iError = 1
            EndIf
        EndIf
    Else
        $sIconFile = -1 ;$sFile
        $nIcon = 0
    EndIf

    If Not FileExists($sIconFile) And Not FileExists(@SystemDir & "\" & $sIconFile) Then
        $sExecutable = _WinAPI_FindExecutable($sFile)

        If FileExists($sExecutable) Then
            $sIconFile = $sExecutable
        Else
            $sExecutable = _WinAPI_PathFindOnPath($sIconFile)

            If FileExists($sExecutable) Then
                $sIconFile = $sExecutable
            EndIf
        EndIf
    ElseIf FileExists(@SystemDir & "\" & $sIconFile) Then
        $sIconFile = @SystemDir & "\" & $sIconFile
    EndIf

    Opt("ExpandEnvStrings", $iOld_Opt_EES)

    If $iFixIconID Then
        $nIcon = -($nIcon + ($nIcon > 0))
    EndIf

    If Not FileExists($sIconFile) Then
        $iError = 1
    EndIf

    Dim $aRet[3] = [2, StringRegExpReplace($sIconFile, '\A"+|"+\z', ''), $nIcon]
    Return SetError($iError, 0, $aRet)
EndFunc

Func _FileGetIcon3($sFile, $iFixIconID = 1)
    Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
    Local $sRegDefault = "", $sDefIcon = "", $sExecutable, $sExt, $a_LinkInfo, $s_TargetFile, $s_IconFile, $hSearch, $sIconFile
    Local $nIcon = 0, $iError = 0, $aRet[3]

    If StringInStr(FileGetAttrib($sFile & "\"), "D") Then
        $sRegDefault = RegRead("HKCR\Folder", "")

        If $sRegDefault <> "" Then
            $sDefIcon = RegRead("HKCR\Folder\DefaultIcon", "")
        EndIf
    Else
        $sExt = StringRegExpReplace($sFile, '^.*\.', '.')

        If $sExt = ".exe" And FileExists($sFile) Then
            Opt("ExpandEnvStrings", $iOld_Opt_EES)

            If _WinAPI_ExtractIconEx($sFile, 0, 0, 0, 1) = 0 Then
                $sFile = @SystemDir & '\shell32.dll'
                $nIcon = -3
            EndIf

            If $iFixIconID Then
                $nIcon = -($nIcon + ($nIcon > 0))
            EndIf

            Dim $aRet[3] = [2, $sFile, $nIcon]
            Return $aRet
        EndIf

        If $sExt = ".lnk" Then
            $aLinkInfo = FileGetShortcut($sFile)

            If Not @error Then
                $s_TargetFile = $aLinkInfo[0]
                $s_IconFile = $aLinkInfo[4]

                Opt("ExpandEnvStrings", $iOld_Opt_EES)

                If Not FileExists($s_IconFile) Then
                    $a_LinkInfo = _FileGetIcon($s_TargetFile, 0)

                    If Not @error Then
                        $aLinkInfo[4] = $a_LinkInfo[1]
                        $aLinkInfo[5] = $a_LinkInfo[2]
                    EndIf
                EndIf

                If $iFixIconID Then
                    $aLinkInfo[5] = -($aLinkInfo[5] + ($aLinkInfo[5] > 0))
                EndIf

                Dim $aRet[3] = [2, $aLinkInfo[4], $aLinkInfo[5]]
                Return $aRet
            EndIf
        EndIf

        If $sExt = $sFile Then
            $hSearch = FileFindFirstFile($sFile & ".*")
            $sExt = StringRegExpReplace(FileFindNextFile($hSearch), '^.*\.', '.')
            $sFile &= $sExt
            FileClose($hSearch)
        EndIf

        $sRegDefault = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & $sExt, "ProgID")

        If $sRegDefault = "" Then
            $sRegDefault = RegRead("HKCR\" & $sExt, "")
        EndIf

        If $sRegDefault <> "" Then
            $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\DefaultIcon", "")

            If $sDefIcon = "" Then
                $sDefIcon = RegRead("HKCR\" & $sExt & "\DefaultIcon", "")
            EndIf
        Else
            $sRegDefault = RegRead("HKCR\" & $sExt, "PerceivedType")

            If $sRegDefault <> "" Then
                $sRegDefault = RegRead("HKCR\SystemFileAssociations\" & $sRegDefault & "\DefaultIcon", "")
            EndIf
        EndIf
    EndIf

    If $sDefIcon = "" And $sRegDefault <> "" Then
        $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\CurVer", "") ; ADOBE PERVERSION....

        If $sDefIcon Then
            $sDefIcon = RegRead("HKCR\" & $sDefIcon & "\DefaultIcon", "")
        Else
            $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\shell\open\command", "")
            $sDefIcon = StringReplace($sDefIcon, ' "%1"', '')
        EndIf
    EndIf

    If $sDefIcon = "" Then
        $sIconFile = @SystemDir & "\shell32.dll"
    ElseIf Not StringRegExp($sDefIcon, '\A"*%1"*\z') Then
        If StringRegExpReplace($sFile, "^.*\\", "") = "shell32.dll" Then
            $sIconFile = $sFile
            $nIcon = 0
        Else
            Local $aDefIconSplit = StringSplit($sDefIcon, ",")

            If IsArray($aDefIconSplit) Then
                $sIconFile = $aDefIconSplit[1]

                If $aDefIconSplit[0] > 1 Then
                    $nIcon = $aDefIconSplit[2]
                EndIf
            Else
                $iError = 1
            EndIf
        EndIf
    Else
        $sIconFile = -1 ;$sFile
        $nIcon = 0
    EndIf

    If Not FileExists($sIconFile) And Not FileExists(@SystemDir & "\" & $sIconFile) Then
        $sExecutable = _WinAPI_FindExecutable($sFile)

        If FileExists($sExecutable) Then
            $sIconFile = $sExecutable
        Else
            $sExecutable = _WinAPI_PathFindOnPath($sIconFile)

            If FileExists($sExecutable) Then
                $sIconFile = $sExecutable
            EndIf
        EndIf
    ElseIf FileExists(@SystemDir & "\" & $sIconFile) Then
        $sIconFile = @SystemDir & "\" & $sIconFile
    EndIf

    Opt("ExpandEnvStrings", $iOld_Opt_EES)

    If $iFixIconID Then
        $nIcon = -($nIcon + ($nIcon > 0))
    EndIf

    If Not FileExists($sIconFile) Then
        $iError = 1
    EndIf

    Dim $aRet[3] = [2, StringRegExpReplace($sIconFile, '\A"+|"+\z', ''), $nIcon]
    Return SetError($iError, 0, $aRet)
EndFunc

Func _GUICtrlTreeView_EnumDir($hWnd, $sRoot, $hItem = 0)
    Local $hSubItem, $sItem, $aList
    $sRoot = StringRegExpReplace($sRoot, '\\+\Z', '')
    $sItem = StringRegExpReplace($sRoot, '^.*\\', '')
    If StringRight($sItem, 1) = ':' Then
        $sItem &= '\'
    EndIf
    $hSubItem = _GUICtrlTreeView_AddChild($hWnd, $hItem, $sItem, 0, 1)
    $aList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $aList[0]
            _GUICtrlTreeView_EnumDir($hWnd, $sRoot & '\' & $aList[$i], $hSubItem)
        Next
    EndIf

    ; Если нужен список файлов
    $aList = _FileListToArray($sRoot, '*', 1)

    If Not @error Then
        For $i = 1 To $aList[0]
            $aIcon = _FileGetIcon($sRoot & '\' & $aList[$i], 0)

            If Not @error Then
                $iIcon = _GUIImageList_AddIcon($hImageList, $aIcon[1], $aIcon[2])
            Else
                $iIcon = 2
            EndIf

            _GUICtrlTreeView_AddChild($hWnd, $hSubItem, $aList[$i], $iIcon, $iIcon)
        Next
    EndIf
EndFunc

Func _GUICtrlTreeView_EnumDir2($hWnd, $sRoot2, $hItem = 0)
    Local $hSubItem, $sItem, $aList
    $sRoot2 = StringRegExpReplace($sRoot2, '\\+\Z', '')
    $sItem = StringRegExpReplace($sRoot2, '^.*\\', '')
    If StringRight($sItem, 1) = ':' Then
        $sItem &= '\'
    EndIf
    $hSubItem = _GUICtrlTreeView_AddChild($hWnd, $hItem, $sItem, 0, 1)
    $aList = _FileListToArray($sRoot2, '*', 2)
    If Not @error Then
        For $i = 1 To $aList[0]
            _GUICtrlTreeView_EnumDir2($hWnd, $sRoot2 & '\' & $aList[$i], $hSubItem)
        Next
    EndIf

    ; Если нужен список файлов
    $aList = _FileListToArray($sRoot2, '*', 1)

    If Not @error Then
        For $i = 1 To $aList[0]
            $aIcon = _FileGetIcon2($sRoot2 & '\' & $aList[$i], 0)

            If Not @error Then
                $iIcon = _GUIImageList_AddIcon($hImageList, $aIcon[1], $aIcon[2])
            Else
                $iIcon = 2
            EndIf

            _GUICtrlTreeView_AddChild($hWnd, $hSubItem, $aList[$i], $iIcon, $iIcon)
        Next
    EndIf
EndFunc

Func _GUICtrlTreeView_EnumDir3($hWnd, $sRoot3, $hItem = 0)
    Local $hSubItem, $sItem, $aList
    $sRoot3 = StringRegExpReplace($sRoot3, '\\+\Z', '')
    $sItem = StringRegExpReplace($sRoot3, '^.*\\', '')
    If StringRight($sItem, 1) = ':' Then
        $sItem &= '\'
    EndIf
    $hSubItem = _GUICtrlTreeView_AddChild($hWnd, $hItem, $sItem, 0, 1)
    $aList = _FileListToArray($sRoot3, '*', 2)
    If Not @error Then
        For $i = 1 To $aList[0]
            _GUICtrlTreeView_EnumDir3($hWnd, $sRoot3 & '\' & $aList[$i], $hSubItem)
        Next
    EndIf

    ; Если нужен список файлов
    $aList = _FileListToArray($sRoot3, '*', 1)

    If Not @error Then
        For $i = 1 To $aList[0]
            $aIcon = _FileGetIcon3($sRoot3 & '\' & $aList[$i], 0)

            If Not @error Then
                $iIcon = _GUIImageList_AddIcon($hImageList, $aIcon[1], $aIcon[2])
            Else
                $iIcon = 2
            EndIf

            _GUICtrlTreeView_AddChild($hWnd, $hSubItem, $aList[$i], $iIcon, $iIcon)
        Next
    EndIf
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    Local $tNMTREEVIEW = DllStructCreate($tagNMTREEVIEW, $lParam)
    Local $hTV = DllStructGetData($tNMTREEVIEW, 'hWndFrom')
    Local $ID = DllStructGetData($tNMTREEVIEW, 'Code')

    Switch $hTV
        Case $hTreeView
            Switch $ID
                Case $TVN_ITEMEXPANDEDA, $TVN_ITEMEXPANDEDW
                    _GUICtrlTreeView_SetImageIndex($hTreeView, _
                            DllStructGetData($tNMTREEVIEW, 'NewhItem'), _
                            BitAND(DllStructGetData($tNMTREEVIEW, 'NewState'), $TVIS_EXPANDED) = $TVIS_EXPANDED)
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _CPU()

    Local $Time2 = _WinAPI_GetSystemTimes()

    If IsArray($Time1) Then
        $TimeBusyCPU = ($Time2[1] + $Time2[2]) - ($Time1[1] + $Time1[2])
        $TimeIdleCPU = ($Time2[0] - $Time1[0])
   GUICtrlSetData($Label, StringFormat('%.f%', ($TimeBusyCPU - $TimeIdleCPU) / $TimeBusyCPU * 100))
		  $menustate = GUICtrlRead($Label)
		TrayTip("", $menustate, 5)
	EndIf
    $Time1 = $Time2
EndFunc   ;==>_CPU

Вот пример где AZJIO великолепно продемонстрировал пример, как это можно реализовать. То есть, добавлять иконки фалов в скрипт Pelerin.
http://autoit-script.ru/index.php/topic,3725.msg46180.html#msg46180
Может кто и будь поможет осуществить задуманное или может, у кого та лучший пример имеется.
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Наконец та из скрипта AZJIO удалось получить задуманное. :smile:
Спасибо AZJIO и вам всем. Но …
При частном обновлении произрастает нагрузка на ЦП и мерцают «проводники» при обновлении . С первого «проводника» удается запустит файл на исполнения, а с других пока нет.
Прошу ваших критик с исправлениями и дополнениями .Знаю что есть еще лучшие варианты –один их них скрипт Pelerin.Я пока не смог применить задуманное в скрипт Pelerin.Буду рад если AZJIO , Pelerin и другие (которые всегда мне помогали :-[ :scratch:) помогут мне .За ранее благодарен.

Вот переделанный рабочий вариант скрипта AZJIO.
Код:
#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>
#include <GuiImageList.au3>
#include <File.au3>
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)
Global $hListView,$hListView2,$hListView3,$hImage ,$PathCur,$PathCur2,$PathCur3,$iPath,$iList
$PathCur=@TempDir;'C:\Temp'
$PathCur2=@ScriptDir
$PathCur3=@ProgramFilesDir
;HotKeySet("{F2}","_1qwe")
$Form1=GUICreate('My Program', 230, 810,@DesktopHeight +50,0)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$StatusBar = GUICtrlCreateLabel('Путь к программе', 5, 795, 640 - 10, 17)

$Button = GUICtrlCreateButton($PathCur,0, 0, 200, 22)
GUICtrlSetOnEvent(-1, "_PathCur")
$Button11 = GUICtrlCreateButton('<---',205, 0, 25, 22)
GUICtrlSetOnEvent(-1, "_PathCur11")

$Button2 = GUICtrlCreateButton($PathCur2,0, 260, 200, 22)
GUICtrlSetOnEvent(-1, "_PathCur2")
$Button22 = GUICtrlCreateButton('<---',205, 260, 25, 22)
GUICtrlSetOnEvent(-1, "_PathCur22")

$Button3 = GUICtrlCreateButton($PathCur3,0, 530, 200, 22)
GUICtrlSetOnEvent(-1, "_PathCur3")
$Button33 = GUICtrlCreateButton('<---',205, 530, 25, 22)
GUICtrlSetOnEvent(-1, "_PathCur33")


$hImage = _GUIImageList_Create(16, 16, 5)
_GUIImageList_AddIcon($hImage, @SystemDir & '\shell32.dll', -4)
_GUIImageList_AddIcon($hImage, @SystemDir & '\shell32.dll', -5)
_GUIImageList_AddIcon($hImage, @SystemDir & '\shell32.dll', 0)
_GUICtrlListView_SetImageList($hListView, $hImage)
_GUICtrlListView_SetImageList($hListView2, $hImage)
_GUICtrlListView_SetImageList($hListView3, $hImage)

$E=''
$i=1
While 1
    $i+=1
    $sExt = RegEnumKey("HKCR", $i)
    If @error Or StringLeft($sExt, 1)<>'.' then ExitLoop
    $ico1=_FileDefaultIcon($sExt)
    If Not @error Then
        Switch UBound($ico1)
            Case 2
                If StringInStr(';.exe;.scr;.ico;.ani;.cur;', ';'&$sExt&';') Then
                    ContinueLoop
                Else
                    _GUIImageList_AddIcon($hImage, $ico1[1], 0)
                    If @error Then ContinueLoop
                EndIf
            Case 3
                _GUIImageList_AddIcon($hImage, $ico1[1], $ico1[2])
                If @error Then ContinueLoop
        EndSwitch
        $E&='|'&$sExt
    EndIf
	;Sleep(100)
WEnd
$E=StringTrimLeft($E, 1)
$aE=StringSplit($E, '|')
$ListView = GUICtrlCreateListView(' ', 0, 25, 230, 232, $LVS_NOCOLUMNHEADER + $LVS_SHOWSELALWAYS, $LVS_OWNERDRAWFIXED)
;GUICtrlSetBkColor(-1, 0xFFFFFF)
$hListView = GUICtrlGetHandle($ListView)
_GUICtrlListView_SetColumnWidth($ListView, 0, 210)
_GUICtrlListView_SetImageList($hListView, $hImage, 1)

$ListView2 = GUICtrlCreateListView(' ', 0, 285, 230, 242, $LVS_NOCOLUMNHEADER + $LVS_SHOWSELALWAYS, $LVS_OWNERDRAWFIXED)
;GUICtrlSetBkColor(-1, 0xf0f0f0)
$hListView2 = GUICtrlGetHandle($ListView2)
_GUICtrlListView_SetColumnWidth($ListView2, 0, 210)
_GUICtrlListView_SetImageList($hListView2, $hImage, 1)

$ListView3 = GUICtrlCreateListView(' ', 0, 555, 230, 235, $LVS_NOCOLUMNHEADER + $LVS_SHOWSELALWAYS, $LVS_OWNERDRAWFIXED)
;GUICtrlSetBkColor(-1, 0xf0f0f0)
$hListView3 = GUICtrlGetHandle($ListView3)
_GUICtrlListView_SetColumnWidth($ListView3, 0, 210)
_GUICtrlListView_SetImageList($hListView3, $hImage, 1)
GUIRegisterMsg(0x004E, 'WM_NOTIFY')
GUISetState()
WinSetOnTop ($Form1, '', 1)
While 1

	_1qwe($hListView,$PathCur)
	_1qwe($hListView2,$PathCur2)
	_1qwe($hListView3,$PathCur3)
	_CPU_Load()
		Sleep(5000)
WEnd
Func _Exit()
    Exit
EndFunc   ;==>_Exit

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tmp

   $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
   $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
   $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
   $iCode = DllStructGetData($tNMHDR, "Code")
   Switch $hWndFrom
        Case $hListView
            Switch $iCode
                Case $NM_DBLCLK
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                    $iItem = DllStructGetData($tInfo, 'Index')
                    If $iItem > -1 Then
                        $tmp = $PathCur&'\'&_GUICtrlListView_GetItemText($hListView, $iItem)
                        If FileExists($tmp) Then ShellExecute('"'&$tmp&'"')
                    EndIf
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc

Func _FileDefaultIcon($sExt)
    If $sExt = '' Or StringInStr($sExt, ':') Then Return SetError(1)

    Local $aCall = DllCall("shlwapi.dll", "int", "AssocQueryStringW", _
            "dword", 0x00000040, _ ;$ASSOCF_VERIFY
            "dword", 15, _ ;$ASSOCSTR_DEFAULTICON
            "wstr", $sExt, _
            "ptr", 0, _
            "wstr", "", _
            "dword*", 65536)

    If @error Then Return SetError(1, 0, "")

    If Not $aCall[0] Then
        $sExt=StringReplace($aCall[5], '"', '')
        $sExt=StringSplit($sExt, ',')
        Opt('ExpandEnvStrings', 1)
        $sExt[1]=$sExt[1]
        Opt('ExpandEnvStrings', 0)
        Return SetError(0, 0, $sExt)
    ElseIf $aCall[0] = 0x80070002 Then
        Return SetError(1, 0, "{unknown}")
    ElseIf $aCall[0] = 0x80004005 Then
        Return SetError(1, 0, "{fail}")
    Else
        Return SetError(2, $aCall[0], "")
    EndIf

EndFunc  ;==>_FileAssociation

Func _1qwe($iList,$iPath)
;Local $iPath,$iList
$tmp = $iPath
	GUICtrlSetData($StatusBar, $iPath)

	_GUICtrlListView_BeginUpdate($iList)
	_GUICtrlListView_DeleteAllItems($iList)
	$tmp = _FileListToArray($iPath, "*", 2)
	If Not @error Then
		For $i = 1 To $tmp[0]
			_GUICtrlListView_AddItem($iList, $tmp[$i], 0)
		Next
	EndIf
		$tmp=_FileListToArray($iPath, "*", 1)
		If Not @error Then
			For $i = 1 to $tmp[0]
				$tmp3=StringRegExpReplace($tmp[$i], '.*(\.\S+)', '\1')
				$ind=_ArraySearch($aE, $tmp3)
				If @error Then $ind=0
					_GUICtrlListView_AddItem($iList, $tmp[$i], $ind+2)
				Next
		EndIf
	_GUICtrlListView_EndUpdate($iList)
;ConsoleWrite(" $tmp-" &$tmp&"-$PathCur - " &$PathCur&@CRLF)
EndFunc

Func _PathCur()
	;$PathCur = FileSelectFolder('Выберите папку', '', 3, @DesktopDir, $Form1)
	$PathCur = FileSelectFolder("Выберите папку", "")
            If @error Then $PathCur =@TempDir

	GUICtrlSetData($Button , $PathCur)
EndFunc

Func _PathCur2()
$PathCur2 = FileSelectFolder("Выберите папку", "")
	GUICtrlSetData($Button2 , $PathCur2)
	If @error Then $PathCur =@ScriptDir
EndFunc

Func _PathCur3()
   $PathCur3 = FileSelectFolder("Выберите папку", "")
	GUICtrlSetData($Button3 , $PathCur3)
	If @error Then $PathCur =@ProgramFilesDir
EndFunc


Func _PathCur11()
	$PathCur = @TempDir
GUICtrlSetData($Button , $PathCur)
EndFunc

Func _PathCur22()
    $PathCur2 = @ScriptDir
GUICtrlSetData($Button2 , $PathCur2)
EndFunc

Func _PathCur33()
    $PathCur3 =@ProgramFilesDir
GUICtrlSetData($Button3 , $PathCur3)
EndFunc
 
Верх