Для того чтобы программно открыть стандартную кнопку Windows Пуск, достаточно выполнить команду (см. пример PMove в каталоге Forms на приложенном к книге диске):

SendMessage(Handle,WM_SYSCOMMAND,SC_TASKLIST,0);

Параметр Parent является дескриптором того родительского окна, дочернее окно которого надо найти. Если этот параметр равен 0, то подразумевается дескриптор Рабочего Стола (см. разд. 11.5). Параметр Child является дескриптором того дочернего окна, после которого начинается поиск. Иначе говоря, поиск начинается со следующего окна в Z-послеДовательности. Если Child = 0 то поиск идет, начиная с первого дочернего окна. Таким образом, если и Parent, и Child равны О, то поиск идет среди всех окон верхнего уровня.

Параметр IpszClass является указателем на строку, содержащую имя класса искомого окна, или является атомом, содержащим имя класса и установленным ранее функцией Global Add Atom (см. разд. 13.2.5). Параметр WindowName является указателем на строку, содержащую заголовок окна. Если этот параметр равен nil, ищется окно с любым заголовком.

Таким образом, получить дескриптор окна кнопки "Пуск" (его класс Button), являющегося дочерним окном полосы задач (ее класс Shell__TrayWnd - см. разд. 11.7) можно с помощью операторов:

var Н: HWND;

Н := FindWindowEx(FindWindow(1Shell_TrayWnd' , nil), 0, 'Button', nil)

В этом операторе функция FindWindow возвращает дескриптор полосы задач, он передается в качестве первого параметра в функцию FindWindowEx, которая возвращает дескриптор дочернего окна класса Button.

После получения дескриптора кнопки "Пуск" сделать ее невидимой, можно, например, воспользовавшись функцией SetWindowRgn, подробно описанной в разд. 12.1.2. В этом случае скрытие кнопки "Пуск" осуществляется кодом:

var Rgn : hRgn;
Rgn := CreateRectRgn(0, 0, 0, 0);
SetWindowRgn(Н, Rgn, true);

Восстановление видимости кнопки можно осуществить оператором:

SetWindowRgn(Н, 0, true);

Впрочем, еще проще управлять видимостью кнопки "Пуск" можно с помощью функции ShowWindow, описанной подробнее в разд. 11.7. Оператор

ShowWindow(Н, SW_HIDE);

сделает ее невидимой, а оператор

ShowWindow(Н, SW_SHOWNORMAL);

восстановит ее видимость.

Управлять доступностью кнопки можно с помощью функции EnableWindow:

function EnableWindow(hWnd: HWND;
bEnable: BOOL): BOOL;

Первым параметром в нее передается дескриптор окна, а вторым - устанавливаемое состояние: true - доступное, false - недоступное. Так что оператор

EnableWindow(Н, false); сделает кнопку недоступной, а оператор

EnableWindow(Н, true);

вернет ей доступность.

Можно также управлять составом меню, открываемого кнопкой Пуск. Занести какой-то документ в раздел Недавние документы можно с помощью функции SHAdd-ToRecentDocs, объявленной в VCL Win32 в модуле SMOB следующим образом:

procedure SHAddToRecentDocs(uFlags: UINT;
pv: Pointer);
stdcall;

а в VCL .NET объявленной так:

procedure SHAddToRecentDocs(uFlags: UINT;
pv: IntPtr);

Параметр uFlags определяет, что именно указано параметром pv. Если uFlags = SHARD_PATH, то параметр pv является указателем на строку, содержащую имя файла с путем к нему. А если uFlags = SHARD__PIDL, то параметр pv является указателем на запись типа TItemIDList (см. разд. 10.2) этого документа. Если параметр pv равен нулю, то раздел Недавние документы будет очищен. Таким образом, в приложении VCL Win32 следующие операторы занесут в раздел Недавние документы ссылку на файл документа, имя которого вместе с путем записано в окне Editl:

uses ShlOBJ;
SHAddToRecentDocs (SHARD_E*ATH, PChar (Editl . Text) ) ;

В приложении VCL .NET аналогичный результат дадут операторы:

uses System.Runtime.InteropServices, ShlOBJ;
var P: IntPtr;
P := Marshal.StringToHGlobalAuto(Editl.Text);
SHAddToRecentDocs(SHARD_PATH, P);

Следующий оператор в любом приложении VCL очистит раздел Недавние документы:

SHAddToRecentDocs(SHARD_PATH, nil);

11.5 Дескриптор рабочего стола || Оглавление || 11.7 Управление полосой задач


Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Май
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс