- Дорогой, ты кого больше любишь? Меня или эту дурацкую штуку, за которой ты проводить целый, св#лочь!!!
- Ну, киса, как ты можешь сравнивать неодушевленный предмет с компьютером?!
{
The "Choose Computer" is a dialog provided by network services
(NTLANMAN.DLL) for Windows 2k/NT/XP
to display the servers and their computers.
}type
TServerBrowseDialogA0 = function(hwnd: HWND; pchBuffer: Pointer; cchBufSize: DWORD): bool;
stdcall;
function ShowServerDialog(AHandle: THandle): string;
var
ServerBrowseDialogA0: TServerBrowseDialogA0;
LANMAN_DLL: DWORD;
buffer: array[0..1024] of char;
bLoadLib: Boolean;
begin
LANMAN_DLL := GetModuleHandle('NTLANMAN.DLL');
if LANMAN_DLL = 0 thenbegin
LANMAN_DLL := LoadLibrary('NTLANMAN.DLL');
bLoadLib := True;
end;
if LANMAN_DLL <> 0 thenbegin @ServerBrowseDialogA0 := GetProcAddress(LANMAN_DLL, 'ServerBrowseDialogA0');
DialogBox(HInstance, MAKEINTRESOURCE(101), AHandle, nil);
ServerBrowseDialogA0(AHandle, @buffer, 1024);
if buffer[0] = '\' thenbegin
Result := buffer;
end;
if bLoadLib then
FreeLibrary(LANMAN_DLL);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := ShowServerDialog(Form1.Handle);
end;
Программа на Delphi, которая отображает диалоговое окно "Выберите компьютер", типично используемое для поиска и выбора компьютеров или серверов в сети.
Вот разбивка кода:
Первая секция определяет функцию TServerBrowseDialogA0, экспортированную из библиотеки NTLANMAN.DLL. Функция принимает три параметра: hwnd, pchBuffer и cchBufSize, и возвращает булевое значение.
Вторая секция определяет процедуру ShowServerDialog, которая принимает handle окна (AHandle) как параметр. Она загружает библиотеку NTLANMAN.DLL, получает адрес функции TServerBrowseDialogA0 с помощью GetProcAddress, и затем вызывает эту функцию с предоставленным handle.
Процедура ShowServerDialog также инициализирует буфер (buffer) для хранения результата диалогового окна. Она устанавливает размер буфера в 1024 символа.
Когда диалоговое окно отображается, оно заполняет буфер именем выбранного компьютера или сервера.
Если буфер начинается с обратной косой черты (\), процедура возвращает содержимое буфера как строку.
Наконец, если библиотека была загружена динамически с помощью LoadLibrary, процедура освобождает библиотеку с помощью FreeLibrary.
Третья секция определяет обработчик события для клика кнопки на форме. Когда эта кнопка кликается, она вызывает процедуру ShowServerDialog и устанавливает заголовок метки (label1) в результат.
Чтобы отобразить это диалоговое окно, вам нужно иметь библиотеку NTLANMAN.DLL установленной на вашем системе. Библиотека обычно предоставляется с операционными системами Windows, включая Windows 2k/NT/XP.
Вот пример использования кода:
unitUnit1;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs;typeTForm1=class(TForm)Button1:TButton;Label1:TLabel;procedureButton1Click(Sender:TObject);end;varForm1:TForm1;implementation{$R *.dfm}procedureTForm1.Button1Click(Sender:TObject);beginLabel1.Caption:=ShowServerDialog(Form1.Handle);end;functionShowServerDialog(AHandle:THandle):string;varServerBrowseDialogA0:TServerBrowseDialogA0;LANMAN_DLL:DWORD;buffer:array[0..1024]ofchar;bLoadLib:Boolean;begin// ... (rest of the code remains the same)end;end.
Это отобразит диалоговое окно "Выберите компьютер" при клике кнопки, и затем установит заголовок метки в имя выбранного компьютера или сервера.
В статье описывается создание диалога выбора компьютера в Windows, используя функцию ServerBrowseDialogA0 из библиотеки NTLANMAN.DLL и реализация этого диалога на языке Pascal.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.