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

Как получить строку устройства в Delphi 7.0 для EnumDisplaySettings с использованием TMonitor

Delphi , Синтаксис , Справочник по API-функциям

Вопрос, поднятый пользователем, связан с необходимостью преобразования свойства Handle объекта TMonitor в строку, которая может быть использована в функции EnumDisplaySettings в параметре lpszDeviceName. Это необходимо для получения списка настроек устройства по заданному идентификатору монитора.

Описание проблемы

В Delphi 7.0 пользователю требуется преобразовать HMONITOR, полученный из массива Monitors компонента TScreen, в строку, которая используется в функции EnumDisplaySettings. Это необходимо для достижения конечной цели - получения списка настроек устройства по значению HMONITOR, передавая разрешенное lpszDeviceName в вызовы EnumDisplaySettings.

Подробная информация

Свойство Handle объекта TMonitor имеет тип HMONITOR и обычно используется в функции GetMonitorInfo, которая возвращает информацию о геометрии, но не lpszDeviceName. Структура TMonitorInfoEx содержит поле szDevice, но на системе пользователя оно не заполняется.

Альтернативный ответ

Пользователь также рассматривает возможность использования szDeviceName для получения соответствующего HMONITOR. Для этого он предлагает функцию GetMonitorDeviceName, которая сравнивает HMONITOR с полученными значениями.

Обновление

Благодаря помощи Давида Хэффернана, пользователь тестировал его решение и предоставил пример функции GetMonitorName, которая получает имя монитора по заданному HMONITOR.

Подтвержденный ответ

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

Однако, пользователь столкнулся с ошибкой "неверный параметр", что обычно указывает на неверное значение cbSize. Важно проверить значение cbSize под отладчиком и убедиться, что используется правильная версия TMonitorInfoEx.

Решение проблемы

После дополнительных проверок выяснилось, что пользователь использует Delphi 7, и размер TMonitorInfoEx под отладчиком составляет 76 байт, в то время как ожидается значение 72. Это указывает на то, что пользователь использует более старую версию Delphi в ANSI-режиме.

Исправленная версия структуры TMonitorInfoEx

Для решения проблемы необходимо использовать правильно определенную структуру TMonitorInfoEx. Вот исправленный вариант:

type
  TMonitorInfoEx = record
    cbSize: DWORD;
    rcMonitor: TRect;
    rcWork: TRect;
    dwFlags: DWORD;
    szDevice: array[0..CCHDEVICENAME - 1] of AnsiChar;
  end;

Эту структуру следует добавить в начало кода перед объявлением переменных.

Пример использования GetMonitorInfo

{$APPTYPE CONSOLE}
uses
  SysUtils, MultiMon, Windows, Forms;

type
  TMonitorInfoEx = record
    cbSize: DWORD;
    rcMonitor: TRect;
    rcWork: TRect;
    dwFlags: DWORD;
    szDevice: array[0..CCHDEVICENAME - 1] of AnsiChar;
  end;

var
  i: Integer;
  MonitorInfo: TMonitorInfoEx;
begin
  MonitorInfo.cbSize := SizeOf(MonitorInfo);
  for i := 0 to Screen.MonitorCount-1 do
  begin
    if not GetMonitorInfo(Screen.Monitors[i].Handle, @MonitorInfo) then
      RaiseLastOSError;
    Writeln(MonitorInfo.szDevice);
  end;
  Readln;
end.

После внесения изменений в структуру TMonitorInfoEx и проверки корректности значения cbSize, функция GetMonitorInfo должна работать корректно и возвращать строки устройств.

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

Пользователю необходимо преобразовать дескриптор устройства (HMONITOR), полученный из компонента TMonitor в Delphi 7.0, в строку для использования в функции EnumDisplaySettings, чтобы получить настройки дисплея для конкретного монитора.


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

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




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


:: Главная :: Справочник по API-функциям ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 19:16:51/0.0036768913269043/0