Заметки
Компактный режим Диспетчера задач Windows

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика


Наверняка вы знаете что у виндового Диспетчера задач есть (и уже очень давно, еще со времен Windows 2000) компактный режим, так называемый "Tiny Footprint Mode", в котором у окна пропадает заголовок, вкладки и меню. Для переключения в этот режим (и обратно) достаточно дважды кликнуть на любом свободном месте окна. В компактном режиме функциональность окна сохраняется, переключаться между вкладками можно с помощью клавиатуры, использую комбинацию клавиш Ctrl + Tab.

Изначально режим "Tiny Footprint Mode" был спроектирован для пользователей, которые хотели бы использовать Диспетчер задач в виде виджета на рабочем столе, например, такого:


Ситуацию немного омрачает лишь то, что в Windows нет штатных настроек для того, чтобы Диспетчер задач сразу запускался в компактном виде. Но оказывается, путем несложных манипуляций с бинарным параметром Preferences, находящемся в системном реестре в ключе "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\TaskManager", ситуацию можно исправить! За внешний вид Диспетчер задач отвечает 4-й бит в байте по адресу $320. Если бит сброшен, то окно отображается в обычном режиме, если установлен - в режиме "Tiny Footprint Mode" (проверено на Windows 7 Professional SP1).


Ниже пример небольного приложения, которое манипулируя указанным выше битом меняет вид окна Диспетчера задач при запуске.

uses
  Registry, ShellAPI;

function IsTinyFootprintMode: Boolean;

  function IsBitSet(Value: Cardinal; Bit: Byte): Boolean;
  begin
     Result := ((Value shr Bit) and 1) = 1;
  end;

var
  Reg: TRegistry;
  Buf: array of Byte;
  BufSize: Integer;
begin
   Reg := TRegistry.Create;
   try
      Reg.RootKey := HKEY_CURRENT_USER;
      Reg.OpenKeyReadOnly('Software\Microsoft\Windows NT\CurrentVersion\TaskManager');
      BufSize := Reg.GetDataSize('Preferences');
      SetLength(Buf, BufSize);
      Reg.ReadBinaryData('Preferences', Buf[0], BufSize);

      Result := IsBitSet(Buf[$320], 4);
   finally
      Reg.CloseKey;
      FreeAndNil(Reg);
   end;
end;

procedure ToggleTinyFootprintMode(const Enable: Boolean);

  function BitOn(const Value: LongInt; const Bit: Byte): LongInt;
  begin
     Result := Value or (1 shl Bit);
  end;

  function BitOff(const Value: LongInt; const Bit: Byte): LongInt;
  begin
     Result := Value and not (1 shl Bit);
  end;

var
  Reg: TRegistry;
  Buf: array of Byte;
  BufSize: Integer;
begin
   Reg := TRegistry.Create;
   try
      Reg.RootKey := HKEY_CURRENT_USER;
      Reg.OpenKey('Software\Microsoft\Windows NT\CurrentVersion\TaskManager', False);
      BufSize := Reg.GetDataSize('Preferences');
      SetLength(Buf, BufSize);
      Reg.ReadBinaryData('Preferences', Buf[0], BufSize);

      case Enable of
         True: Buf[$320] := BitOn(Buf[$320], 4);
         False: Buf[$320] := BitOff(Buf[$320], 4);
      end;

      Reg.WriteBinaryData('Preferences', Buf[0], BufSize);
   finally
      Reg.CloseKey;
      FreeAndNil(Reg);
   end;
end;

procedure TTaskmgrModeForm.Button1Click(Sender: TObject);
begin
   ToggleTinyFootprintMode(True);
end;

procedure TTaskmgrModeForm.Button2Click(Sender: TObject);
begin
   ToggleTinyFootprintMode(False);
end;

procedure TTaskmgrModeForm.Button3Click(Sender: TObject);
begin
   case IsTinyFootprintMode of
      True: ShowMessage('Режим Tiny Footprint включен');
      False: ShowMessage('Режим Tiny Footprint выключен');
   end;
end;

procedure TTaskmgrModeForm.Button4Click(Sender: TObject);
begin
   ShellExecute(Handle, 'open', 'taskmgr.exe', '', '', SW_SHOWNORMAL);
end;

На этом все, удачи!

.: Пример к данной заметке :.


При использовании материала - ссылка на сайт обязательна