屏幕类,用于全屏程序&显示任务栏
来源:互联网 发布:深圳华夏软件学校招生 编辑:程序博客网 时间:2024/04/30 13:36
/// <summary>
/// 屏幕类,用于全屏程序&显示任务栏
/// </summary>
public class ScreenHelper
{
#region Windows Mobile全屏
[DllImport("aygshell.dll")]
public static extern bool SHFullScreen(IntPtr hWnd, uint dwState);
const uint SHFS_SHOWTASKBAR = 0x1;//任务栏
const uint SHFS_HIDETASKBAR = 0x2;
const uint SHFS_SHOWSIPBUTTON = 0x4;//输入法
const uint SHFS_HIDESIPBUTTON = 0x8;
const uint SHFS_SHOWSTARTICON = 0x10;//开始菜单栏
const uint SHFS_HIDESTARTICON = 0x20;
/// <summary>
/// 全屏显示,即隐藏WM和win CE的任务栏(和开始菜单栏)
/// </summary>
/// <param name="hWnd">要显示的窗体句柄</param>
/// <param name="isFull">true全屏,false取消全屏</param>
/// <returns></returns>
public static bool FullScreen(IntPtr hWnd, bool isFull)
{
uint dwState = 0;
if (isFull)
{
dwState = SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON;
}
else
{
dwState = SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON;
}
return SHFullScreen(hWnd, dwState);
}
//this.WindowState = FormWindowState.Maximized;//这句不能少,且注意窗体的大小与屏幕相同
//Win32.FullScreen(this.Handle,true);//本示例在windows mobile 6.1下测试通过
#endregion
//Win32 API
[DllImport("coredll.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpWindowName, string lpClassName);
[DllImport("coredll.dll", EntryPoint = "ShowWindow")]
private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("coredll.dll", EntryPoint = "SystemParametersInfo")]
private static extern int SystemParametersInfo(int uAction, int uParam, ref Rectangle lpvParam, int fuWinIni);
[DllImport("coredll.dll", EntryPoint = "ShowWindow")]
public static extern int ShowWindow(int hwnd, int nCmdShow);
public const int SPI_SETWORKAREA = 47;
public const int SPI_GETWORKAREA = 48;
public const int SW_HIDE = 0x00;
public const int SW_SHOW = 0x0001;
public const int SPIF_UPDATEINIFILE = 0x01;
public const int TASKBAR_SW_SHOW = 5; //显示窗口常量
public const int TASKBAR_SW_HIDE = 0; //隐藏窗口常量
/// <summary>
/// 隐藏任务栏
/// </summary>
/// <param name="FLAG">是否隐藏</param>
/// <returns></returns>
public static bool HideTaskBar(bool FLAG)
{
int Hwnd = FindWindow("HHTaskBar", null).ToInt32();
if (Hwnd == 0) return false;
else
{
if (FLAG)
{
ShowWindow(Hwnd, TASKBAR_SW_HIDE);
}
else
{
ShowWindow(Hwnd, TASKBAR_SW_SHOW);
}
}
return true;
}
/// <summary>
/// 是否全屏
/// </summary>
/// <param name="fullscreen">是否全屏</param>
/// <param name="rectOld"></param>
/// <returns></returns>
public static bool SetFullScreen(bool fullscreen, ref Rectangle rectOld)
{
IntPtr Hwnd = FindWindow("HHTaskBar", null);
if (Hwnd == IntPtr.Zero) return false;
if (fullscreen)
{
ShowWindow(Hwnd, SW_HIDE);
Rectangle rectFull = Screen.PrimaryScreen.Bounds;
SystemParametersInfo(SPI_GETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);//get SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectFull, SPIF_UPDATEINIFILE);//set
}
else
{
ShowWindow(Hwnd, SW_SHOW);
SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);
}
return true;
}
/// <summary>
/// 屏幕居中
/// </summary>
/// <param name="f"></param>
/// <returns></returns>
public static bool CenterScreen(Form f)
{
Rectangle ScreenArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
f.Left = (ScreenArea.Width - f.Width) / 2;
f.Top = (ScreenArea.Height - f.Height) / 2;
return true;
}
public static bool CenterControl(Control child, Control parent)
{
child.Left = (parent.Width - child.Width) / 2;
child.Top = (parent.Height - child.Height) / 2;
return true;
}
public static Size GetScreenSize()
{
Rectangle rectFull = Screen.PrimaryScreen.Bounds;
return new Size(rectFull.Width, rectFull.Height);
}
#region 屏幕像素计算
static ScreenHelper()
{
Init();
}
private static double InchesToMMUnit = 25.4;
private static double ScreenDPI_X = 102.8;
private static double ScreenDPI_Y = 102.8;
private static void Init()
{
#if Computer
using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
{
ScreenDPI_X = graphics.DpiX;
ScreenDPI_Y = graphics.DpiY;
}
#endif
}
//[DllImport("user32.dll")]
//static extern IntPtr GetDC(IntPtr ptr);
//[DllImport("user32.dll", EntryPoint = "ReleaseDC")]
//public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
//[DllImport("gdi32.dll")]
//private static extern int GetDeviceCaps(IntPtr hdc, int Index);
//private static void Init()
//{
// IntPtr screenDC = GetDC(IntPtr.Zero);
// int width = GetDeviceCaps(screenDC, 4); // 毫米宽度
// int pixels = GetDeviceCaps(screenDC, 8); // 像素
// ReleaseDC(IntPtr.Zero, screenDC);
// double vDpi = pixels / width;
// ScreenDPI_X = vDpi * InchesToMMUnit;
// ScreenDPI_Y = vDpi * InchesToMMUnit;
//}
/// <summary>
/// 毫米转为像素(注:dpi分水平和垂直,获取方法为得到 Graphics 的实例化对象 g,调用g.DpiX、g.DpiY)
/// </summary>
/// <param name="mm">毫米</param>
/// <param name="fDPI">分辨率(水平/垂直)</param>
/// <returns></returns>
public static double MillimetersToPixel(double mm, double fDPI)
{
//毫米转像素:mm * dpi / 25.4
return mm * fDPI / InchesToMMUnit;
}
/// <summary>
/// 根据毫米获取屏幕像素
/// </summary>
/// <param name="mm"></param>
/// <returns></returns>
public static int MillimetersToPixel(double mm)
{
return (int)Math.Round(MillimetersToPixel(mm, ScreenDPI_X), 0);
}
/// <summary>
/// 像素转为毫米(注:dpi分水平和垂直,获取方法为得到 Graphics 的实例化对象 g,调用g.DpiX、g.DpiY)
/// </summary>
/// <param name="px">像素</param>
/// <param name="fDPI">分辨率(水平/垂直)</param>
/// <returns></returns>
public static double PixelToMillimeters(double px, double fDPI)
{
//像素转毫米:px * 25.4 / dpi
return px * InchesToMMUnit / fDPI;
}
/// <summary>
/// 根据像素获取毫米
/// </summary>
/// <param name="px">像素</param>
/// <returns></returns>
public static double PixelToMillimeters(double px)
{
return PixelToMillimeters(px, ScreenDPI_X);
}
/// <summary>
/// 英寸到像素
/// </summary>
/// <param name="inches"></param>
/// <returns></returns>
public static double InchesToPixels(double inches, double fDPI)
{
return inches * fDPI;
}
/// <summary>
/// 像素到英寸
/// </summary>
/// <param name="px"></param>
/// <returns></returns>
public static double PixelsToInches(double px, double fDPI)
{
return px / fDPI;
}
/// <summary>
/// 毫米到英寸
/// </summary>
/// <param name="mm"></param>
/// <returns></returns>
public static double MillimetersToInches(double mm)
{
return mm / InchesToMMUnit;
}
/// <summary>
/// 英寸到毫米
/// </summary>
/// <param name="mm"></param>
/// <returns></returns>
public static double InchesToMillimeters(double Inches)
{
return Inches * InchesToMMUnit;
}
#endregion
}
/// 屏幕类,用于全屏程序&显示任务栏
/// </summary>
public class ScreenHelper
{
#region Windows Mobile全屏
[DllImport("aygshell.dll")]
public static extern bool SHFullScreen(IntPtr hWnd, uint dwState);
const uint SHFS_SHOWTASKBAR = 0x1;//任务栏
const uint SHFS_HIDETASKBAR = 0x2;
const uint SHFS_SHOWSIPBUTTON = 0x4;//输入法
const uint SHFS_HIDESIPBUTTON = 0x8;
const uint SHFS_SHOWSTARTICON = 0x10;//开始菜单栏
const uint SHFS_HIDESTARTICON = 0x20;
/// <summary>
/// 全屏显示,即隐藏WM和win CE的任务栏(和开始菜单栏)
/// </summary>
/// <param name="hWnd">要显示的窗体句柄</param>
/// <param name="isFull">true全屏,false取消全屏</param>
/// <returns></returns>
public static bool FullScreen(IntPtr hWnd, bool isFull)
{
uint dwState = 0;
if (isFull)
{
dwState = SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON;
}
else
{
dwState = SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON;
}
return SHFullScreen(hWnd, dwState);
}
//this.WindowState = FormWindowState.Maximized;//这句不能少,且注意窗体的大小与屏幕相同
//Win32.FullScreen(this.Handle,true);//本示例在windows mobile 6.1下测试通过
#endregion
//Win32 API
[DllImport("coredll.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpWindowName, string lpClassName);
[DllImport("coredll.dll", EntryPoint = "ShowWindow")]
private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("coredll.dll", EntryPoint = "SystemParametersInfo")]
private static extern int SystemParametersInfo(int uAction, int uParam, ref Rectangle lpvParam, int fuWinIni);
[DllImport("coredll.dll", EntryPoint = "ShowWindow")]
public static extern int ShowWindow(int hwnd, int nCmdShow);
public const int SPI_SETWORKAREA = 47;
public const int SPI_GETWORKAREA = 48;
public const int SW_HIDE = 0x00;
public const int SW_SHOW = 0x0001;
public const int SPIF_UPDATEINIFILE = 0x01;
public const int TASKBAR_SW_SHOW = 5; //显示窗口常量
public const int TASKBAR_SW_HIDE = 0; //隐藏窗口常量
/// <summary>
/// 隐藏任务栏
/// </summary>
/// <param name="FLAG">是否隐藏</param>
/// <returns></returns>
public static bool HideTaskBar(bool FLAG)
{
int Hwnd = FindWindow("HHTaskBar", null).ToInt32();
if (Hwnd == 0) return false;
else
{
if (FLAG)
{
ShowWindow(Hwnd, TASKBAR_SW_HIDE);
}
else
{
ShowWindow(Hwnd, TASKBAR_SW_SHOW);
}
}
return true;
}
/// <summary>
/// 是否全屏
/// </summary>
/// <param name="fullscreen">是否全屏</param>
/// <param name="rectOld"></param>
/// <returns></returns>
public static bool SetFullScreen(bool fullscreen, ref Rectangle rectOld)
{
IntPtr Hwnd = FindWindow("HHTaskBar", null);
if (Hwnd == IntPtr.Zero) return false;
if (fullscreen)
{
ShowWindow(Hwnd, SW_HIDE);
Rectangle rectFull = Screen.PrimaryScreen.Bounds;
SystemParametersInfo(SPI_GETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);//get SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectFull, SPIF_UPDATEINIFILE);//set
}
else
{
ShowWindow(Hwnd, SW_SHOW);
SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectOld, SPIF_UPDATEINIFILE);
}
return true;
}
/// <summary>
/// 屏幕居中
/// </summary>
/// <param name="f"></param>
/// <returns></returns>
public static bool CenterScreen(Form f)
{
Rectangle ScreenArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
f.Left = (ScreenArea.Width - f.Width) / 2;
f.Top = (ScreenArea.Height - f.Height) / 2;
return true;
}
public static bool CenterControl(Control child, Control parent)
{
child.Left = (parent.Width - child.Width) / 2;
child.Top = (parent.Height - child.Height) / 2;
return true;
}
public static Size GetScreenSize()
{
Rectangle rectFull = Screen.PrimaryScreen.Bounds;
return new Size(rectFull.Width, rectFull.Height);
}
#region 屏幕像素计算
static ScreenHelper()
{
Init();
}
private static double InchesToMMUnit = 25.4;
private static double ScreenDPI_X = 102.8;
private static double ScreenDPI_Y = 102.8;
private static void Init()
{
#if Computer
using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
{
ScreenDPI_X = graphics.DpiX;
ScreenDPI_Y = graphics.DpiY;
}
#endif
}
//[DllImport("user32.dll")]
//static extern IntPtr GetDC(IntPtr ptr);
//[DllImport("user32.dll", EntryPoint = "ReleaseDC")]
//public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
//[DllImport("gdi32.dll")]
//private static extern int GetDeviceCaps(IntPtr hdc, int Index);
//private static void Init()
//{
// IntPtr screenDC = GetDC(IntPtr.Zero);
// int width = GetDeviceCaps(screenDC, 4); // 毫米宽度
// int pixels = GetDeviceCaps(screenDC, 8); // 像素
// ReleaseDC(IntPtr.Zero, screenDC);
// double vDpi = pixels / width;
// ScreenDPI_X = vDpi * InchesToMMUnit;
// ScreenDPI_Y = vDpi * InchesToMMUnit;
//}
/// <summary>
/// 毫米转为像素(注:dpi分水平和垂直,获取方法为得到 Graphics 的实例化对象 g,调用g.DpiX、g.DpiY)
/// </summary>
/// <param name="mm">毫米</param>
/// <param name="fDPI">分辨率(水平/垂直)</param>
/// <returns></returns>
public static double MillimetersToPixel(double mm, double fDPI)
{
//毫米转像素:mm * dpi / 25.4
return mm * fDPI / InchesToMMUnit;
}
/// <summary>
/// 根据毫米获取屏幕像素
/// </summary>
/// <param name="mm"></param>
/// <returns></returns>
public static int MillimetersToPixel(double mm)
{
return (int)Math.Round(MillimetersToPixel(mm, ScreenDPI_X), 0);
}
/// <summary>
/// 像素转为毫米(注:dpi分水平和垂直,获取方法为得到 Graphics 的实例化对象 g,调用g.DpiX、g.DpiY)
/// </summary>
/// <param name="px">像素</param>
/// <param name="fDPI">分辨率(水平/垂直)</param>
/// <returns></returns>
public static double PixelToMillimeters(double px, double fDPI)
{
//像素转毫米:px * 25.4 / dpi
return px * InchesToMMUnit / fDPI;
}
/// <summary>
/// 根据像素获取毫米
/// </summary>
/// <param name="px">像素</param>
/// <returns></returns>
public static double PixelToMillimeters(double px)
{
return PixelToMillimeters(px, ScreenDPI_X);
}
/// <summary>
/// 英寸到像素
/// </summary>
/// <param name="inches"></param>
/// <returns></returns>
public static double InchesToPixels(double inches, double fDPI)
{
return inches * fDPI;
}
/// <summary>
/// 像素到英寸
/// </summary>
/// <param name="px"></param>
/// <returns></returns>
public static double PixelsToInches(double px, double fDPI)
{
return px / fDPI;
}
/// <summary>
/// 毫米到英寸
/// </summary>
/// <param name="mm"></param>
/// <returns></returns>
public static double MillimetersToInches(double mm)
{
return mm / InchesToMMUnit;
}
/// <summary>
/// 英寸到毫米
/// </summary>
/// <param name="mm"></param>
/// <returns></returns>
public static double InchesToMillimeters(double Inches)
{
return Inches * InchesToMMUnit;
}
#endregion
}
1 0
- 屏幕类,用于全屏程序&显示任务栏
- 去掉任务栏显示全屏
- win7 扩展屏幕 显示任务栏
- delphi 程序全屏显示无标题栏,覆盖整个屏幕
- 任务栏显示程序详解
- android实现去掉任务栏或全屏显示
- ANDROID 隐藏 任务栏 systemui systembar 全屏显示
- ANDROID 隐藏 任务栏 systemui systembar 全屏显示
- ANDROID 隐藏 任务栏 systemui systembar 全屏显示
- 全屏显示对话框,(隐藏任务栏)
- ANDROID 隐藏 任务栏 systemui systembar 全屏显示
- C# 实现Winform全屏后不遮挡任务栏,显示任务栏
- c#中怎么让程序在屏幕上显示的时候任务栏中不显示?
- WinCE 程序全屏隐藏任务栏的方法
- 设置窗体透明 隐藏任务栏 与全屏显示
- VC 隐藏任务栏,实现对话框的全屏显示
- 设置窗体透明 隐藏任务栏 与全屏显示 .
- c# winfrom 全屏显示,遮盖任务栏,解决闪屏问题
- C++ Builder中制作图片边缘模糊效果的几种方法
- 礼物无货
- alsa-lib和alsa-util在TQ2416上的移植
- Java 包冲突
- 【5002】排版问题
- 屏幕类,用于全屏程序&显示任务栏
- 浮点型 比较
- 抢红包背后的技术点
- liferay中自定义字段及部分路由说明
- k-means算法学习
- Codeforces Round #379 (Div. 2) -- D. Anton and Chess (if else 的水题)
- Python 内置函数 locals()和 globals()
- 双链表的插入学习(C和指针)
- Unity3D都有哪些坑