Что нового

Как создать в GUI объект "Проводник Windows"?

sss

Продвинутый
Сообщения
332
Репутация
96
Всем привет! Я хочу создать в своем GUI часть Проводника Windows (отображение папок-файлов и т.д., без левого и верхнего меню), но что-то никак не получается. Необходимо сохранить все "фичи" родного проводника - контекстное меню, Drag&Drop и т.д. И, если возможно, изменить цвет заднего фона с белого на слегка сероватый (а если получится на полупрозрачный, чтобы был виден Рабочий стол - вообще шикарно).
Подскажите, в какую сторону копать...
P.S: у меня Windows 7, и хотелось бы интерфейс именно Проводника от семерки...
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Вот пример:
Код:
GUICreate("Explorer Test", 750, 500)
$oIE = ObjCreate("Shell.Explorer.2")
$GUIActiveX = GUICtrlCreateObj($oIE, -240, 0 , 990, 500)
$oIE.navigate(@SystemDir)
GUISetState ()

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


C навигацией:
Код:
$iIE = ObjCreate("Shell.Explorer.2")
GUICreate("Explorer Test", 750, 500)
GUISetBkColor(0xC4C4C4)
$Input1 = GUICtrlCreateInput('', 125, 9, 525)
$Button1 = GUICtrlCreateButton('Перейти', 660, 8, 80, 22)
$Button2 = GUICtrlCreateButton('Нащад', 10, 8, 50, 22)
$Button3 = GUICtrlCreateButton('Вперед', 65, 8, 50, 22)
$iActiveX = GUICtrlCreateObj($iIE, -240, 40, 990, 500)
$iIE.Navigate(@DesktopDir)
GUISetState ()

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $Button1
			$iIE.Navigate(GUICtrlRead($Input1))
			If @error Then ContinueLoop
		Case $Button2
			$iIE.GoBack()
		Case $Button3
			$iIE.GoForward()
	EndSwitch
WEnd

PS Проверял на XP
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Zaramot
Спасибо, пример хорош. Но есть одна проблемка - нет колонки "Имя". И еще вопрос - можно менять вид интерфейса с таблицы на значки?
Вот скриншот. Сверху родной проводник, внизу Ваш пример.

UPD: колонка Имя есть, но она вдвинута в самую левую часть, от нее только 10-15 пикселей видно. Надо бы как-нибудь исправить...
 

Arei

Скриптер
Сообщения
938
Репутация
115
у меня вот так, отлично работает.
Код:
$iIE = ObjCreate("Shell.Explorer.2")
GUICreate("Explorer Test", 1000, 1000)
$GUIActiveX = GUICtrlCreateObj($iIE, 0, 50 , 1000, 1000)
$Input1 = GUICtrlCreateInput("", 150, 8, 489, 21)
$Button1 = GUICtrlCreateButton('Перейти', 660, 8, 80, 22)
$Button2 = GUICtrlCreateButton('Назад', 10, 8, 50, 22)
$Button3 = GUICtrlCreateButton('Вперед', 65, 8, 50, 22)
$iActiveX = GUICtrlCreateObj($iIE, -240, 40, 990, 500)
$iIE.Navigate(@DesktopDir)
GUISetState ()

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
        Case $Button1
            $iIE.Navigate(GUICtrlRead($Input1))
            If @error Then ContinueLoop
        Case $Button2
            $iIE.GoBack()
        Case $Button3
            $iIE.GoForward()
    EndSwitch
WEnd
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Arei
Да, так все отлично! Но теперь другая засада... При открытии папки в нашем окне открывается родной проводник. Т.е. нажимаю я на "Новая папка", а она открывается в обычном проводнике, а в нашем ничего не меняется.
И еще вопрос: почему создаешь 2 объекта Shell.Explorer.2? Пытался понять, но так и не понял.
 
Верх