首页 > 解决方案 > 与会话断开连接后,RDP 正在调整大小?

问题描述

我在 BluePrism 中设置了一个程序,当在所述网页中检测到错误时,它会截取网页的屏幕截图。到目前为止,我一切正常,但唯一让我感到困惑的是正在调整窗口大小。连接到 RDP 时,我将窗口设置为 1920x1080,但是当我断开会话时,窗口会自行调整为 1024x968。值得注意的是,我正在使用批处理文件断开会话断开连接后,有什么方法可以将窗口保持在 1920x1080?

标签: rdpblueprism

解决方案


在您的过程中,您可以制作初始页面,该页面可以调用您的自定义对象操作,该操作可以设置您想要的分辨率。我正在使用这样的代码:

[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE1
{
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string dmDeviceName;
    public short dmSpecVersion;
    public short dmDriverVersion;
    public short dmSize;
    public short dmDriverExtra;
    public int dmFields;
    public short dmOrientation;
    public short dmPaperSize;
    public short dmPaperLength;
    public short dmPaperWidth;
    public short dmScale;
    public short dmCopies;
    public short dmDefaultSource;
    public short dmPrintQuality;
    public short dmColor;
    public short dmDuplex;
    public short dmYResolution;
    public short dmTTOption;
    public short dmCollate;

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string dmFormName;
    public short dmLogPixels;
    public short dmBitsPerPel;
    public int dmPelsWidth;
    public int dmPelsHeight;
    public int dmDisplayFlags;
    public int dmDisplayFrequency;
    public int dmICMMethod;
    public int dmICMIntent;
    public int dmMediaType;
    public int dmDitherType;
    public int dmReserved1;
    public int dmReserved2;
    public int dmPanningWidth;
    public int dmPanningHeight;
};

class User_32
{
    [DllImport("user32.dll")]
    public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode);
    [DllImport("user32.dll")]
    public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags);
    public const int ENUM_CURRENT_SETTINGS = -1;
    public const int CDS_UPDATEREGISTRY = 0x01;
    public const int CDS_TEST = 0x02;
    public const int DISP_CHANGE_SUCCESSFUL = 0;
    public const int DISP_CHANGE_RESTART = 1;
    public const int DISP_CHANGE_FAILED = -1;
}

class CResolution
{
    public void ChangeResolution(int a, int b, out bool success, out string message)
    {
        Screen screen = Screen.PrimaryScreen;
        int iWidth = a;
        int iHeight = b;
        DEVMODE1 dm = new DEVMODE1();
        dm.dmDeviceName = new String(new char[32]);
        dm.dmFormName = new String(new char[32]);
        dm.dmSize = (short)Marshal.SizeOf(dm);
        if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm))
        {
            dm.dmPelsWidth = iWidth;
            dm.dmPelsHeight = iHeight;
            int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST);
            if (iRet == User_32.DISP_CHANGE_FAILED)
            {
                success = false;
                message = "Unable to process your request. Description: Unable To Process Your Request. Sorry For This Inconvenience.";
            }
            else
            {
                iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY);
                switch (iRet)
                {
                    case User_32.DISP_CHANGE_SUCCESSFUL: 
                        break;
                    case User_32.DISP_CHANGE_RESTART:
                    {
                        success = false;
                        message = "Description: You Need To Reboot For The Change To Happen. If You Feel Any Problem After Rebooting Your Machine Then Try To Change Resolution In Safe Mode.";
                        break;
                    }
                    default:
                    {
                        success = false;
                        message = "Description: Failed To Change The Resolution.";
                        break;
                    }
                }
            }
        }
        success = true;
        message = string.Empty;
    }
}

使用标准分辨率,例如 1024x768、1280x800、1280x1024、1360x768、1366x768、1400x1050、1440x900、1600x900、1680x1050、1920x1080。

我这样称呼它:

在此处输入图像描述

在此处输入图像描述


推荐阅读