I need to read some information regarding the monitors connected through the EnumDisplayDevicesA function.
I tried to convert the following example written in c++ to delphi, but I have a problem when I try to read the device name from the PDISPLAY_DEVICEA structure LDeviceName := LDisplayDevice.deviceName; as it only returns Chinese characters.
I think it is a problem related to character encoding but I don't know how to fix it.
My source code:
program Monitor;
{$APPTYPE CONSOLE}
uses
  System.SysUtils;
const
  user32 = 'user32.dll';
type
  LONG = LongInt;
  BOOL = LongBool;
  PDISPLAY_DEVICE = ^DISPLAY_DEVICE;
  LPCSTR = array[0..128 - 1] of WideChar;
  PLPCSTR = ^LPCSTR;
  //https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-display_devicea
  DISPLAY_DEVICE = packed record
    cb: Cardinal;
    deviceName: array[0..32 - 1] of WideChar;
    deviceString: array[0..128 - 1] of WideChar;
    stateFlags: Cardinal;
    deviceID: array[0..128 - 1] of WideChar;
    deviceKey: array[0..128 - 1] of WideChar;
  end;
//https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enumdisplaydevicesa
function EnumDisplayDevicesA(APCSTR: PLPCSTR; iDevNum: Cardinal; PDISPLAY_DEVICEA: PDISPLAY_DEVICE; dwFlags: Cardinal): BOOL; stdcall; external user32;
procedure PrintMonitorNames();
var
  LDisplayDevice: DISPLAY_DEVICE;
  LDeviceIndex: Integer;
  LMonitorIndex: Integer;
  LDeviceName: string;
begin
  LDisplayDevice.cb := Sizeof(LDisplayDevice);
  LDeviceIndex := 0;
  while EnumDisplayDevicesA(nil, LDeviceIndex, @LDisplayDevice, 0) do
  begin
    LDeviceName := LDisplayDevice.deviceName;
    Writeln('Device name: ' + LDeviceName);
    LMonitorIndex := 0;
    while EnumDisplayDevicesA(@LDeviceName, LMonitorIndex, @LDisplayDevice, 0) do
    begin
      Writeln(StrPas(LDisplayDevice.deviceName) + ' ' + StrPas(LDisplayDevice.deviceString));
      Inc(LMonitorIndex);
    end;
    Inc(LDeviceIndex);
  end;
end;
var
  LDummy: string;
begin
  Writeln('START');
  PrintMonitorNames();
  Writeln('FINISH');
  Readln(LDummy);
end.