PDA

View Full Version : تغییر رزلوشن صفحه نمایش با اجرای برنامه



bahar_engineer
شنبه 29 فروردین 1388, 11:42 صبح
سلام

می خوام رزلوشن صفحه نمایش با اجرای برنامه به 1024 تغییر بکنه و پس از خروج به حالت اول برگرده....
سرچ کردم اما مطلب به درد بخوری پیدا نکردم

این کدو دارم اما مخصوص صفحات وب هست و با using Resolution; کار می کنه اما در فرم ها چنین فضای نامی نداریم!!!



Screen Srn = Screen.PrimaryScreen;
tempHeight = Srn.Bounds.Width;
tempWidth = Srn.Bounds.Height;
Page.ClientScript.RegisterStartupScript(this.GetTy pe(), "Error", "");
//if you want Automatically Change res.at page load. please uncomment this code.

if (tempHeight == 600)//if the system is 800*600 Res.then change to
{
FixHeight = 768;
FixWidth = 1024;
Resolution.CResolution ChangeRes = new Resolution.CResolution(FixHeight, FixWidth);
}


من برای فرم ها می خوام ....

ممنون می شم نظراتتونو اظهار بفرمایید :متفکر:

mahdi_7610
شنبه 29 فروردین 1388, 12:53 عصر
How To Change The Screen Resolution in C# (http://www.csharphelp.com/archives4/archive676.html)

موفق باشی

bahar_engineer
شنبه 29 فروردین 1388, 14:23 عصر
درست شد اگه کسی خواست بگه راهنمایی کنم...

amir.khanlari
یک شنبه 30 فروردین 1388, 10:27 صبح
اگه بگيد كه مشكلتون چطور برطرف شده ممنون ميشم

bahar_engineer
یک شنبه 30 فروردین 1388, 10:33 صبح
یک کلاس به نام resolution در پروژه اضافه می کنین و کدهای زیر را در اون کپی کنید




using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

[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;
}


namespace Resolution
{
class CResolution
{
public CResolution(int a,int b)
{
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)
{
MessageBox.Show("Unable to process your request");
MessageBox.Show("Description: Unable To Process Your Request. Sorry For This Inconvenience.","Information",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
iRet = User_32.ChangeDisplaySettings (ref dm, User_32.CDS_UPDATEREGISTRY);

switch (iRet)
{
case User_32.DISP_CHANGE_SUCCESSFUL:
{
break;

//successfull change
}
case User_32.DISP_CHANGE_RESTART:
{

MessageBox.Show("Description: You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode.","Information",MessageBoxButtons.OK,MessageBoxIcon.Information);
break;
//windows 9x series you have to restart
}
default:
{

MessageBox.Show("Description: Failed To Change The Resolution.","Information",MessageBoxButtons.OK,MessageBoxIcon.Information);
break;
//failed to change
}
}
}

}
}
}
}

سپس متغیر های زیر را به فرمتون اضافه کنین


private int tempHeight = 0, tempWidth = 0;
private int FixHeight = 1024, FixWidth = 768;
بعد از اون


Screen Srn = Screen.PrimaryScreen;
tempHeight = Srn.Bounds.Width;
tempWidth = Srn.Bounds.Height;
این کدها رو به سازنده فرمتون اضافه کنین یعنی بعد از خط InitializeComponent(); کپی کنید.

بعد هم در رویداد load فرمتون این کد رو اضافه کنین


Resolution.CResolution ChangeRes = new Resolution.CResolution(FixHeight, FixWidth);

در اینصورت بعد از اجرا صفحه نمایش شما به حالت 1024*768 در می آد...

سپس در رویداد کلیک دکمه خروج از فرم کد زیر را اضافه کنین:


Resolution.CResolution ChangeRes = new Resolution.CResolution(tempHeight, tempWidth);

این کد رزلوشن صفحه رو به حالت اول بر می گردونه

کدهایی که بهتون دادم رزلوشن رو به طور ثابت به 1024*768 تبدیل می کنه ... اگه خواستین به رزلوشن دیگه ای تبدیل بشه کافیه مقدار متغیرهاتون رو تغییر بدین.


راستی یادم رفت فضای نام


using System.Runtime.InteropServices;
رو باید به بالای فرمتون اضافه کنین

موفق باشید