using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Serialization; using System.IO; using Transitionals; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Threading; using System.Drawing; using System.Configuration; namespace PCScreenSavers.Common { public static class MyConfig { //public static void ConfigInit() //{ // string Filename = System.Environment.CurrentDirectory + "\\app.config"; // if (File.Exists(Filename) != true) // { // SetVaule("ServerIp", "192.168.1.126"); // 包含了 自动创建 的功能 // SetVaule("ServerPort", "1261"); // } //} /// ///返回*.exe.config文件中appSettings配置节的value项 /// /// /// public static string GetVaule(string strKey) { ExeConfigurationFileMap file = new ExeConfigurationFileMap(); file.ExeConfigFilename = "PCScreenSavers.exe.config"; Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); foreach (string key in config.AppSettings.Settings.AllKeys) { if (key == strKey) { return config.AppSettings.Settings[strKey].Value.ToString(); } } return null; } /// ///在*.exe.config文件中appSettings配置节增加一对键值对 /// /// /// public static void SetVaule(string newKey, string newValue) { ExeConfigurationFileMap file = new ExeConfigurationFileMap(); file.ExeConfigFilename = "PCScreenSavers.exe.config"; Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); bool exist = false; foreach (string key in config.AppSettings.Settings.AllKeys) { if (key == newKey) { exist = true; } } if (exist) { config.AppSettings.Settings.Remove(newKey); } config.AppSettings.Settings.Add(newKey, newValue); config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); } //public static void testc() //{ // MyConfig.SetVaule("path", ""); // // cancle.WriteLine(MyConfig.GetVaule("path")); //} } public static class CommonMethod { /// /// 反序列化XML为类实例 /// /// /// /// public static T DeserializeXML(string xmlObj) { try { XmlSerializer serializer = new XmlSerializer(typeof(T)); using (StringReader reader = new StringReader(xmlObj)) { return (T)serializer.Deserialize(reader); } } catch { //MessageBox.Show(ex.ToString()); return default(T); } } /// /// 序列化类实例为XML /// /// /// /// public static string SerializeXML(T obj) { try { using (StringWriter writer = new StringWriter()) { new XmlSerializer(obj.GetType()).Serialize((TextWriter)writer, obj); return writer.ToString(); } } catch { return string.Empty; } } /// /// 切换效果 /// /// 百叶窗-0,遮帘 -1,淡化 - 2,渐变 -3,溶解 - 4,旋转 - 5 /// public static Transition GetTransition(string effect) { //所有的变换 //Transitionals.Transitions.StarTransition //星 //Transitionals.Transitions.RotateTransition //3d旋转 //Transitionals.Transitions.VerticalWipeTransition//下拉 //Transitionals.Transitions.PageTransition //翻页 //Transitionals.Transitions.RollTransition //旋转出 //Transitionals.Transitions.DiamondsTransition //棋盒棱形 //Transitionals.Transitions.VerticalBlindsTransition //垂直百叶窗 //Transitionals.Transitions.HorizontalWipeTransition //左拉 //Transitionals.Transitions.FadeAndBlurTransition //淡入 //Transitionals.Transitions.ExplosionTransition //球形散开 //Transitionals.Transitions.CheckerboardTransition //棋盒方形 //Transitionals.Transitions.TranslateTransition //飞入 //Transitionals.Transitions.RotateWipeTransition //旋转擦除 //Transitionals.Transitions.MeltTransition //柱状 //Transitionals.Transitions.DiagonalWipeTransition //斜擦除 //Transitionals.Transitions.FlipTransition //单面翻书 //Transitionals.Transitions.DotsTransition //球状棋盒 //Transitionals.Transitions.FadeAndGrowTransition //淡入 //Transitionals.Transitions.DoubleRotateWipeTransition //双线擦除 //Transitionals.Transitions.DoorTransition //门状 //Transitionals.Transitions.HorizontalBlindsTransition //水平百叶窗 //Transitionals.Transitions.FadeTransition //溶解 switch (effect) { case "马赛克": return new Transitionals.Transitions.CheckerboardTransition(); case "上下滑动": return new Transitionals.Transitions.VerticalWipeTransition(); case "左右滑动": return new Transitionals.Transitions.HorizontalWipeTransition(); case "渐入": return new Transitionals.Transitions.FadeTransition(); case "4": return new Transitionals.Transitions.FadeTransition(); case "5": return new Transitionals.Transitions.RollTransition(); default: return new Transitionals.Transitions.FadeTransition(); } } ///// ///// 以逆时针为方向对图像进行旋转 ///// ///// 位图流 ///// 旋转角度[0,360](前台给的) ///// //public Bitmap RotateImg(System.Drawing.Image b, int angle) //{ // angle = angle % 360; // //弧度转换 // double radian = angle * Math.PI / 180.0; // double cos = Math.Cos(radian); // double sin = Math.Sin(radian); // //原图的宽和高 // int w = (int)b.Width; // int h = (int)b.Height; // int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))); // int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))); // //目标位图 // Bitmap dsImage = new Bitmap(W, H); // System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage); // g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; // g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; // //计算偏移量 // System.Drawing.Point Offset = new System.Drawing.Point((int)(W - w) / 2, (int)(H - h) / 2); // //构造图像显示区域:让图像的中心与窗口的中心点一致 // System.Drawing.Rectangle rect = new System.Drawing.Rectangle(Offset.X, Offset.Y, w, h); // System.Drawing.Point center = new System.Drawing.Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2); // g.TranslateTransform(center.X, center.Y); // g.RotateTransform(360 - angle); // //恢复图像在水平和垂直方向的平移 // g.TranslateTransform(-center.X, -center.Y); // g.DrawImage(b, rect); // //重至绘图的所有变换 // g.ResetTransform(); // g.Save(); // g.Dispose(); // //保存旋转后的图片 // b.Dispose(); // //dsImage.Save("FocusPoint.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); // return dsImage; //} // 映射 DEVMODE 结构 // 可以参照 DEVMODE结构的指针定义: // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183565(v=vs.85).aspx [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct DEVMODE { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmDeviceName; public short dmSpecVersion; public short dmDriverVersion; public short dmSize; public short dmDriverExtra; public int dmFields; public int dmPositionX; public int dmPositionY; public int dmDisplayOrientation; public int dmDisplayFixedOutput; 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; }; // Win32 函数在托管环境下的声明 public class NativeMethods { // 平台调用的申明 [DllImport("user32.dll")] public static extern int EnumDisplaySettings( string deviceName, int modeNum, ref DEVMODE devMode); [DllImport("user32.dll")] public static extern int ChangeDisplaySettings( ref DEVMODE 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; // 控制改变方向的常量定义 public const int DMDO_DEFAULT = 0; public const int DMDO_90 = 1; public const int DMDO_180 = 2; public const int DMDO_270 = 3; } /// /// 改变分辨率 /// /// 0:切换横屏,1:切换竖屏 public static int ChangeResolution(int displayOrientation) { // 初始化 DEVMODE结构 DEVMODE devmode = new DEVMODE(); devmode.dmDeviceName = new String(new char[32]); devmode.dmFormName = new String(new char[32]); devmode.dmSize = (short)Marshal.SizeOf(devmode); if (0 != NativeMethods.EnumDisplaySettings(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref devmode)) { //// 改变屏幕分辨率 //int iRet = NativeMethods.ChangeDisplaySettings(ref devmode, NativeMethods.CDS_TEST); //if (iRet == NativeMethods.DISP_CHANGE_FAILED) //{ // //MessageBox.Show("不能执行你的请求", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); //} //else //{ // int temp = devmode.dmPelsWidth; // devmode.dmPelsWidth = devmode.dmPelsHeight; // devmode.dmPelsHeight = temp; // if (displayOrientation == 0) // devmode.dmDisplayOrientation = NativeMethods.DMDO_90; // else // devmode.dmDisplayOrientation = NativeMethods.DMDO_DEFAULT; // iRet = NativeMethods.ChangeDisplaySettings(ref devmode, NativeMethods.CDS_UPDATEREGISTRY); // switch (iRet) // { // // 成功改变 // case NativeMethods.DISP_CHANGE_SUCCESSFUL: // { // break; // } // case NativeMethods.DISP_CHANGE_RESTART: // { // // MessageBox.Show("你需要重新启动电脑设置才能生效", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); // break; // } // default: // { // // MessageBox.Show("改变屏幕分辨率失败", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); // break; // } // } //} } if (devmode.dmDisplayOrientation == 0) return 0; else if (devmode.dmDisplayOrientation == 1) return 90; else if (devmode.dmDisplayOrientation == 2) return 180; else return -90; } [DllImport("user32.dll")] static extern void keybd_event ( byte bVk,// 虚拟键值 byte bScan,// 硬件扫描码 uint dwFlags,// 动作标识 IntPtr dwExtraInfo// 与键盘动作关联的辅加信息 ); /// /// 截屏 /// public static string PrintScreen() { string path = Environment.CurrentDirectory + @"\Screen.jpg"; Bitmap bit = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics g = Graphics.FromImage(bit); g.CopyFromScreen(new Point(0, 0), new Point(0, 0), bit.Size); try { if (File.Exists(path)) File.Delete(path); bit.Save(path); } catch { } finally { g.Dispose(); bit.Dispose(); } return path; } } }