Хочу создать свою оболочку наподобии
explorer.exe. Тоесть свой рабочий стол, меню "Пуск" и панель задач.
Очень нужно, но не знаю как это сделать. В инете искал, поиск не рулит, по иск по форуму вобще не роботает(Timeout), короче кто знает - подскажите.
Есть у меня подозрения на API функцию
CreateDesktop, но у меня ниче с ней не получаеться.
там все очень сложно. я когда-то начинал писать.
Там нужно юзать кучу хуков, перехватывать Апи, короче - геморрой. Если хочешь, то могу у себя исходники поискать. кое-что у меня получилось. но кажись я их грохнул всетки.
Docal, почаще заглядывай на vbnet.ru/faq:
Включить/выключить панель задач Windows
Добавьте на форму 2 CommandButton. Первая кнопка спрячет панель задач (там где расположена кнопка ПУСК), вторая - покажет.
------------------------------------
'Вариант 1
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Const SWP_HIDEWINDOW = &H80
Const SWP_SHOWWINDOW = &H40
Private Sub Command1_Click()
hwnd1 = FindWindow("Shell_traywnd", ""
Call SetWindowPos(hwnd1, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
End Sub
Private Sub Command2_Click()
hwnd1 = FindWindow("Shell_traywnd", ""
Call SetWindowPos(hwnd1, 0, 0, 0, 0, 0, SWP_SHOWWINDOW)
End Sub
'Вариант 2
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hWnd As Long, ByVal fEnable As Long) As Long
Const SW_HIDE = 0
Const SW_SHOW = 5
Public Sub ApplicationBar(Visible As Boolean)
Dim hWnd As Long
hWnd = FindWindow("Shell_TrayWnd", ""
If Visible Then
ShowWindow hWnd, SW_SHOW
Else
ShowWindow hWnd, SW_HIDE
End If
EnableWindow hWnd, Visible
End Sub
Private Sub Command1_Click()
ApplicationBar False
End Sub
Private Sub Command2_Click()
ApplicationBar True
End Sub
Создание всплывающей панели
У каждого юзера, работающего в операционной системе Windows'98 есть панель задач (это панелька, на которой находится кнопка ПУСК). Некоторые любят в настройках этой панели установить значение "Автоматически убирать с экрана", и тогда панель будет автоматически убираться, когда она не активна. Так вот этот пример покажет, как можно средствами VB создать такую всплывающую справа панельку, подобную панели задач. Проект сырой, то есть вы можете его доработать, как вам заблагорасудится. Если вы что-то измените в этом проекте, {дайте мне знать}.
Создайте новый проект. Положите на форму компонент Timer. В свойствах формы укажите:
.AutoRedraw = True
.BorderStyle = 0
.MinButton = False
.MaxButton = False
.ShowInTaskbar = False
Вставьте следующий код:
------------------------------------
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type Formsize
Left As Long
Top As Long
Width As Long
Height As Long
End Type
Private Const MaxSize = 50
Private Const MinSize = 1
Private Const Fade = False ' Установите данное значение либо True либо False
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Form_Load()
Timer1.Interval = 50
Form_Resize
End Sub
Private Sub Form_Resize()
Me.Move Screen.Width - (MinSize * Screen.TwipsPerPixelX), 0, (MaxSize * Screen.TwipsPerPixelX), Screen.Height
Me.Cls
Me.Line (0, 0)-(0, Me.Height), &HFFFFFF
End Sub
Private Sub Timer1_Timer()
Dim a As POINTAPI
Dim Form As Formsize
Dim CurCut As Long
Form.Width = Me.Width / Screen.TwipsPerPixelX
Form.Left = Me.Left / Screen.TwipsPerPixelX
Form.Height = Me.Height / Screen.TwipsPerPixelY
Form.Top = Me.Top / Screen.TwipsPerPixelY
Call GetCursorPos
If a.x >= Form.Left And a.x < Form.Left + Form.Width And a.y >= Form.Top And a.y < Form.Height + Form.Top Then
If Me.Tag <> "0" Then
If Fade = True Then
CurCut = 1
Do Until Me.Left - (CurCut * Screen.TwipsPerPixelX) <= Screen.Width - (MaxSize * Screen.TwipsPerPixelX)
Me.Left = Me.Left - (CurCut * Screen.TwipsPerPixelX)
DoEvents
Loop
Me.Move Screen.Width - (MaxSize * Screen.TwipsPerPixelX), 0, (MaxSize * Screen.TwipsPerPixelX), Screen.Height
Else
Me.Move Screen.Width - (MaxSize * Screen.TwipsPerPixelX), 0, (MaxSize * Screen.TwipsPerPixelX), Screen.Height
End If
Me.Tag = "0"
End If
Else
If Me.Tag <> "1" Then
If Fade = True Then
CurCut = 1
Do Until Me.Left + (CurCut * Screen.TwipsPerPixelX) >= Screen.Width - (MinSize * Screen.TwipsPerPixelX)
Me.Left = Me.Left + (CurCut * Screen.TwipsPerPixelX)
DoEvents
Loop
Me.Left = Screen.Width - (MinSize * Screen.TwipsPerPixelX)
Else
Me.Left = Screen.Width - (MinSize * Screen.TwipsPerPixelX)
End If
Me.Tag = "1"
End If
End If
End Sub
А вот как сделать, чтобы когда панель появляеться, все окна сдвигались?
Или есть еще способ создать свою панель задач?
Подскажите, плиз!
Я нашол способ создать панель задач нормальную, тока трей не знаю как делать, можно скачать здесь: http://vbcode.narod.ru/taskbar.zip.
Только учтите, я настраивал под свои размеры экрана, и еще - у меня Windows98, в ХР не испытывал.
ух респект, 98 рулит, хороший виндовс! надо себе будет на ВМ хотябы на память проинсталить А так это.. таскБар в Soft_shell был вроде неплохо реализован...
Вообще реализация своей оболчки предполагает отсутствия explorer.exe - т.е. убиваем его, и запускам своего...
Далее помнится надо было окно с определённым классом создавать, невспомню щас какой именно класс... можно посмотреть какой у трея winspy'ем например... и вообщем при создании окна такого система сама в него будет посылать сообщения, о том какая иконка добвлена, удалено итп итд... соответственно реагируя на эти сообщения можно создать свой трей...
А вообще говоря непонятна идея, ну зачем? Задача не из лёгких, для обучения не подходит, писать сложно и долго. Практической пользы немного - красивее сделать врядли получится, ограниченность пользователя разве что... хотя и в хр ровными руками можно довольно сурово настроить пользователя... Конкуренты тоже есть - LockWin например. Нет, я не отговариваю...