delphi 多屏幕关闭

procedure DetachDisplay;
var
  FoundSecondaryDisp: Boolean;
  DispNum: DWORD;
  DisplayDevice: _DISPLAY_DEVICEA;
  Result: Cardinal;
  szTemp: array[0..199] of AnsiChar;
  i: Integer;
  defaultMode: _devicemodeA;
  DEVMODE,ln: _devicemodeA;
begin
    // initialize DisplayDevice
  ZeroMemory(@DisplayDevice, sizeof(DisplayDevice));
  DisplayDevice.cb := sizeof(DisplayDevice);
  // get all display devices
  DispNum := 0;
  while (EnumDisplayDevices(nil, DispNum, DisplayDevice, 0)) do
  begin


    ZeroMemory(@defaultMode, sizeof(DEVMODE));
    defaultMode.dmSize := sizeof(DEVMODE);
    if not EnumDisplaySettings(@DisplayDevice.DeviceName[0], 1, defaultMode) then
      ShowMessage('Store default failed');
    if (DisplayDevice.StateFlags and DISPLAY_DEVICE_ATTACHED_TO_DESKTOP > 0) and (DisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0) then
    begin
      ZeroMemory(@DEVMODE, sizeof(DEVMODE));
      DEVMODE.dmSize := sizeof(DEVMODE);
      DEVMODE.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_POSITION or DM_DISPLAYFREQUENCY or DM_DISPLAYFLAGS;
      Result := ChangeDisplaySettingsEx(@DisplayDevice.DeviceName[0], DEVMODE, 0, CDS_UPDATEREGISTRY, nil);
      ChangeDisplaySettings(DEVMODE, 0);
    end;
    ZeroMemory(@DisplayDevice, sizeof(DisplayDevice));
    DisplayDevice.cb := sizeof(DisplayDevice);
    inc(DispNum);
  end;


end;

猜你喜欢

转载自blog.csdn.net/y281252548/article/details/79742459