Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

включить auto-hide taskbar на Делфи [D7]


Ландграф Павел ©   (2005-09-01 12:11:00) 

Подскажите как программно включить/выключить эту опцию, при условии совместимости со всеми версиями начиная с 98.


Ландграф Павел   (2005-09-03 18:36:00) [1]

СенькЫсь! под 98 буду отдельно писать.. или плюнуть на них!?=)


Турист   (2005-09-03 16:34:00) [2]

:-)


procedure HardAutoHideTaskBar(aAutoHide: Boolean);
var
 bNewState: Byte;
 Buffer: array[0..255] of Byte;
 hExplorer: THandle;
 dwExplorerID: DWord;
 dwSettingsSize: DWord;
begin
 with TRegistry.Create do try
   if OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2', False) or
      OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects', False) then begin
     dwSettingsSize := ReadBinaryData('Settings', Buffer, SizeOf(Buffer));
     if (dwSettingsSize > 0) then begin
       if aAutoHide then
         bNewState := Buffer[8] or 1
       else
         bNewState := Buffer[8] and not 1;
       if bNewState <> Buffer[8] then begin
         Buffer[8] := bNewState;
         WriteBinaryData('Settings', Buffer, dwSettingsSize);
       end
     end
   end
 finally
   Free
 end;
 if GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), dwExplorerID) <> 0 then begin
   hExplorer := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, FALSE, dwExplorerID);
   if hExplorer <> 0 then try
     TerminateProcess(hExplorer, 0)
   finally
     CloseHandle(hExplorer)
   end
 end;
 if GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), dwExplorerID) = 0 then
   WinExec('explorer.exe', SW_SHOWNORMAL)
end;


Турист   (2005-09-03 13:27:00) [3]

>Турист   (03.09.05 12:56) [5]
К сожалению, для Windows XP


Турист   (2005-09-03 12:56:00) [4]

Вроде работает


const
 ABM_SETSTATE = $0000000a;

procedure AutoHideTaskBar(aAutoHide: Boolean);
var
 BarData: TAppBarData;
 dwState, dwNewState: DWord;
begin
 FillChar(BarData, SizeOf(BarData), 0);
 BarData.cbSize := SizeOf(BarData);
 dwState := SHAppBarMessage(ABM_GETSTATE, BarData);
 if aAutoHide then
   dwNewState := dwState or ABS_AUTOHIDE
 else
   dwNewState := dwState and not ABS_AUTOHIDE;
 if dwState <> dwNewState then begin
   BarData.lParam := dwNewState;
   SHAppBarMessage(ABM_SETSTATE, BarData)
 end
end;


Ландграф мобил=)   (2005-09-02 19:50:00) [5]

Нашел, но в каждой винде по разному=(


xmed   (2005-09-02 17:43:00) [6]

тода Regedit там надо искать


Ландграф Павел   (2005-09-02 17:25:00) [7]

Енто не то... можешь проверить сам и найти отличия=) када SW_HIDE то эту панельку оттуда уже никак не вытащишь, а мне надо чтобы именно AUTO-hide, т.е. мышильду опускаем вниз - панелька выехала


xmed   (2005-09-02 15:09:00) [8]

procedure TaskBar( Turn:Boolean );
var
   hTaskBar : THandle;
begin
   hTaskbar := FindWindow( 'Shell_TrayWnd', Nil );
   if Turn then begin
       ShowWindow( hTaskBar, SW_SHOWNORMAL );
   end else begin
       ShowWindow( hTaskBar, SW_HIDE );
   end;
end


Наверх

Титульная страница Поиск, карта сайта Написать письмо