INNO Setup: How to get the primary monitor's resolution?

后端 未结 2 2007
情话喂你
情话喂你 2021-01-15 05:13

I\'m trying to script an installer with INNO and I am stuck at a point where I need to get the screen resolution of the machine in which the setup is running and use that va

2条回答
  •  轮回少年
    2021-01-15 05:27

    You'll need some code to get the current resolution. Then you can add those values to the [Icon] entry to create the shortcut. Here's some code to get you started:

    [Setup]
    AppName=DisplayResoltution
    AppVerName=DisplayResoltution
    DefaultDirName=DisplayResoltution
    DisableStartupPrompt=true
    Uninstallable=false
    
    [Files]
    Source: "C:\util\innosetup\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
    ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
    
    [Icons]
    Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"; Parameters: {code:GetParams}
    
    
    [Code]
    // Functions to get BPP & resolution
    
    function DeleteDC (hDC: Integer): Integer;
     external 'DeleteDC@GDI32 stdcall';
    
    function CreateDC (lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
     external 'CreateDCA@GDI32 stdcall';
    
    function GetDeviceCaps (hDC, nIndex: Integer): Integer;
     external 'GetDeviceCaps@GDI32 stdcall';
    
    Const
        HORZRES = 8;    //horizontal resolution
        VERTRES = 10;   //vertical resolution
        BITSPIXEL = 12; //bits per pixel
        PLANES = 14;    //number of planes (color depth=bits_per_pixel*number_of_planes)
    var
    xres, yres, bpp, pl, tmp: Integer;
    
    function InitializeSetup(): Boolean;
      var 
          hDC: Integer;
    begin
    
        //get resolution & BPP
        hDC := CreateDC('DISPLAY', '', '', 0);
        pl := GetDeviceCaps(hDC, PLANES);
        bpp := GetDeviceCaps(hDC, BITSPIXEL);
        xres := GetDeviceCaps(hDC, HORZRES); //horizontal resolution
        yres := GetDeviceCaps(hDC, VERTRES); //vertical resolution
        tmp := DeleteDC(hDC);
        bpp := pl * bpp;   //color depth
    
        MsgBox( 'Current resolution is ' + IntToStr(xres) +
            'x' + IntToStr(yres) +
            ' and color depth is ' + IntToStr( bpp )
            , mbInformation, MB_OK );
    
        Result := true;
    end;
    
    function GetParams(def: string): string;
    var
    sTemp : string;
    begin
      sTemp := 'xres=' + IntToStr(xres) + ' yres=' +IntToStr(yres);
      result := sTemp;
    end;
    

    Code adapted from http://www.vincenzo.net/isxkb/index.php?title=Detect_current_display_resolution_and_color_depth

提交回复
热议问题