Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание системного трея для удаленного доступа с использованием Delphi

Delphi , Рабочий стол , Рабочий стол

Введение

Разработка приложений, работающих в среде удаленного доступа, требует особого подхода к управлению системным треем. В данной статье мы рассмотрим, как создать приложение на Delphi, которое будет отображаться в трее для пользователей, подключенных через Terminal Services (Remote Desktop), но не будет доступно пользователям, работающим локально на сервере.

Проблема

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

Решение

Для решения поставленной задачи можно использовать функцию, которая определяет, запущен ли сеанс на клиенте терминального сервера. Пример такой функции на Object Pascal для Delphi:

program HiddenTrayApp;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  Windows;

type
  PWINSTATIONQUERYINFORMATIONW = function(ServerName: PWideChar; LogonId: Cardinal; InformationLevel: DWORD; var Info: Pointer; InfoBufLen: DWORD; var RequiredSize: PULONG): BOOL; stdcall; 
  WINSTATIONINFORMATIONW = record
    ClientBuildNumber: DWORD;
    ClientProductId: DWORD;
    ClientNameLength: DWORD;
    ClientName: array[0..MaxLongStr-1] of Char;
    ClientDirectoryLength: DWORD;
    ClientDirectory: array[0..MaxLongStr-1] of Char;
    ServerNameLength: DWORD;
    ServerName: array[0..MaxLongStr-1] of Char;
    DomainNameLength: DWORD;
    DomainName: array[0..MaxLongStr-1] of Char;
    LogonId: DWORD;
    SessionId: DWORD;
    WinStationDesk: DWORD;
    ClientProductType: DWORD;
    StatusFlags: DWORD;
    SessionKeyLength: DWORD;
    SessionKey: array[0..MaxLongStr-1] of Char;
    ClientDisplay: TDWORD_PTR;
  end;

function IsRunningOnTerminalServerClient: Boolean;
var
  WinStationQueryInformationW: PWINSTATIONQUERYINFORMATIONW;
  wsInfo: WINSTATIONINFORMATIONW;
  hInstWinSta: HINSTANCE;
  ReturnLen: ULONG;
begin
  hInstWinSta := LoadLibrary('winsta.dll');
  if hInstWinSta <> 0 then
  begin
    WinStationQueryInformationW := GetProcAddress(hInstWinSta, 'WinStationQueryInformationW');
    if Assigned(WinStationQueryInformationW) and
       WinStationQueryInformationW(PChar('SERVERNAME_CURRENT'),
       LOGONID_CURRENT,
       WinStationInformation,
       @wsInfo,
       SizeOf(WINSTATIONINFORMATIONW),
       @ReturnLen) and
       (wsInfo.LogonId <> 0) then
    begin
      Result := TRUE;
      FreeLibrary(hInstWinSta);
    end
    else
      FreeLibrary(hInstWinSta);
  end
  else
    Result := FALSE;
end;

begin
  if IsRunningOnTerminalServerClient then
    // Показать трей
  else
    // Скрыть трей
  else
    ReadLn;
end.

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

Заключение

При разработке приложений для удаленного доступа важно учитывать различия в поведении приложений в разных сеансах. Использование функций, проверяющих тип сеанса, позволяет гибко управлять отображением системного трея и повышать удобство работы с приложением для конечных пользователей.

Создано по материалам из источника по ссылке.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Рабочий стол ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 19:47:30/0.0035500526428223/0