Вызовите Windows API функцию SHAddToRecentDocs() передав nil вместо имени файла в качестве параметра.

Добавить новый пункт меню в системное меню диалога:

Code:

AppendMenu(GetSystemMenu(Self.Handle,FALSE),MF_ENABLED,1001,'&Help');

 Автор ответа: Sheff

 

Code:

//Спрятать

procedure TForm1.Button1Click(Sender: TObject);

var

hTaskBar : THandle;

begin

hTaskbar := FindWindow('Shell_TrayWnd', Nil);

ShowWindow(hTaskBar, SW_HIDE);

end;

 

 

//Показать

procedure TForm1.Button2Click(Sender: TObject);

var

hTaskBar : THandle;

begin

hTaskbar := FindWindow('Shell_TrayWnd', Nil);

ShowWindow(hTaskBar, SW_SHOWNORMAL);

end;

 

Эта программа добавляет файл "File.txt" в "Пуск/Документы".

Code:

uses ShlOBJ;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

SHAddToRecentDocs(SHARD_PATH, PChar('File.txt'));

end;

 

 Автор советов: Даниил Карапетян

e-mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

 

Автор справки: Алексей Денисов

e-mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

 

 

 

Code:

uses.., ShellApi;

 

var

AppBarData: TAppBarData;

bAlwaysOnTop: Boolean; {Поверх окон}

bAutoHide: boolean; {Авт. убирать с экрана}

ClRect: TRect; {Клиентские области}

Rect: TRect;

Edge: UInt; {Местоположение TaskBar}

 

procedure DetectTaskBar;

begin

AppBarData.hWnd := FindWindow('Shell_TrayWnd', nil);

AppBarData.cbSize := sizeof(AppBarData);

bAlwaysOnTop := (SHAppBarMessage(ABM_GETSTATE, AppBardata) and ABS_ALWAYSONTOP) < > 0;

bAutoHide := (SHAppBarMessage(ABM_GETSTATE, AppBardata) and ABS_AUTOHIDE) < > 0;

GetClientRect(AppBarData.hWnd, ClRect.rc);

GetWindowRect(AppBarData.hwnd, rect);

if (Rect.top > 0) then

   Edge := ABE_BOTTOM

else if (Rect.Bottom < Screen.Height) then

   Edge := ABE_TOP

else if Rect.Right < Screen.Width then

   Edge := ABE_LEFT

else

   Edge := ABE_RIGHT;

end;

 

 

 

Code:

program proga2;

 

uses

Windows;

 

var

Wnd: THandle; { объявляем переменные }

int: integer;

 

begin

Randomize; { холостой прогон генератора случайных чисел }

int := Random(3); { выбор одного варианта из четырёх }

case int of

   0: { если первый вариант то }

   begin

     Wnd := FindWindow('Progman', nil);

     Wnd := FindWindowEx(Wnd, HWND(0), 'ShellDll_DefView', nil);

     { прячем трей }

     ShowWindow(Wnd, sw_hide);

   end;

   1: { если второй вариант то }

   begin

     Wnd := FindWindow('Shell_TrayWnd', nil);

     Wnd := FindWindowEx(Wnd, HWND(0), 'TrayNotifyWnd', nil);

     Wnd := FindWindowEx(Wnd, HWND(0), 'TrayClockWClass', nil);

     { прячем часы }

     ShowWindow(Wnd, sw_hide);

   end;

   2:

   begin

     Wnd := FindWindow('Shell_TrayWnd', nil);

     Wnd := FindWindowEx(Wnd, HWND(0), 'Button', nil);

     {прячем кнопку "Пуск"}

     ShowWindow(Wnd, sw_hide);

end;

3:

begin

   Wnd := FindWindow('Shell_TrayWnd', nil);

   Wnd := FindWindowEx(Wnd, HWND(0), 'TrayNotifyWnd', nil);

   { прячем "Панель задач" }

   ShowWindow(Wnd, sw_hide);

end;

end;

 

end.

 

 

Code:

unit TaskBar;

 

interface

 

uses Windows, ShellAPI;

 

const

// Дублируем описания из ShellAPI, чтобы не писать его в Uses

// везде, где мы используем этот модуль

NIF_TIP = ShellAPI.NIF_TIP;

NIF_ICON = ShellAPI.NIF_ICON;

 

function TaskBarAddIcon(

hWindow: THandle; // окно, создавшее значок

ID: Cardinal; // идентификатор значка

ICON: hIcon; // иконка

CallbackMessage: Cardinal; // сообщение, которое будет посылаться окну

Tip: PChar // ToolTip

): Boolean;

 

function TaskBarModifyIcon(

hWindow: THandle;

ID: Cardinal;

Flags: Cardinal;

ICON: hIcon;

Tip: PChar): Boolean;

 

function TaskBarDeleteIcon(

hWindow: THandle;

ID: Integer): Boolean;

 

implementation

 

function TaskBarAddIcon(

hWindow: THandle;

ID: Cardinal;

ICON: hIcon;

CallbackMessage: Cardinal;

Tip: PChar): Boolean;

var

NID: TNotifyIconData;

begin

FillChar(NID, SizeOf(TNotifyIconData), 0);

with NID do

begin

   cbSize := SizeOf(TNotifyIconData);

   Wnd := hWindow;

   uID := ID;

   uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;

   uCallbackMessage := CallbackMessage;

   hIcon := Icon;

   lstrcpyn(szTip, Tip, SizeOf(szTip));

end;

Result := Shell_NotifyIcon(NIM_ADD, @NID);

end;

 

function TaskBarModifyIcon(

hWindow: THandle;

ID: Cardinal;

Flags: Cardinal;

ICON: hIcon;

Tip: PChar): Boolean;

var

NID: TNotifyIconData;

begin

FillChar(NID, SizeOf(TNotifyIconData), 0);

with NID do

begin

   cbSize := SizeOf(TNotifyIconData);

   Wnd := hWindow;

   uID := ID;

   uFlags := Flags;

   hIcon := Icon;

   lstrcpyn(szTip, Tip, SizeOf(szTip));

end;

Result := Shell_NotifyIcon(NIM_MODIFY, @NID);

end;

 

function TaskBarDeleteIcon(

hWindow: THandle;

ID: Integer): Boolean;

var

NID: TNotifyIconData;

begin

FillChar(NID, SizeOf(TNotifyIconData), 0);

with NID do

begin

   cbSize := SizeOf(TNotifyIconData);

   Wnd := hWindow;

   uID := ID;

end;

Result := Shell_NotifyIcon(NIM_DELETE, @NID);

end;

 

end.

 

 

 

 Я хочу представить простой мульти-экран эмулятор, написанный на Delphi.

Он состоит в небольшой форме размещения в правом нижнем углу экрана, прямо над треем, которая состоит из 5 кнопок.

В начале первая кнопка вниз; затем, когда я нажимаю другую кнопку,  открывается новый рабочий стол. В этом новом рабочем столе я могу открыть другие программы

и так далее с другими кнопками. Когда я вернусь к одной из кнопок,  Я буду видеть только программы, открытые в этом контексте, без других.

Фокус состоит в том, чтобы сделать следующие шаги непосредственно перед нажатием другой кнопки:

 

 

В этой статье я хотел бы описать полезную функцию не документированную GetTaskmanWindow. Функция GetTaskmanWindow возвращает дескриптор

 окно, которое владеет кнопками панели задач.  Вот цитата о панели задач из Microsoft MSDN:  "Программа Microsoft® для Windows® интерфейс, включающий приложение

 панель называется панелью задач.  Панель задач может использоваться для выполнения таких задач, как переключение между открытыми

 Windows и запуск новых приложений..."  и "панель задач содержит меню Пуск, кнопки панели задач,  контекстное меню и панель состояния...".  К сожалению, Win32 API не содержит документированных

 функция, которая может быть использована для доступа к  задач, поэтому мы должны снова использовать недокументированный способ.

 

 

Code:

uses ShellAPI;

 

...

 

function IsTaskbarAutoHideOn : boolean;

var ABData : TAppBarData;

begin

ABData.cbSize := sizeof(ABData);

Result :=(SHAppBarMessage(ABM_GETSTATE, ABData) and ABS_AUTOHIDE) > 0;

end;

 

 

Для вывода информации мы будет использовать компонент TStringGrid с закладки Additional.

Сначала вам нужно будет после

Code:

var

Form1: TForm1;