zoukankan      html  css  js  c++  java
  • win7自动壁纸切换小工具AutoDesk一:初始化托盘

    win7的自带主题自动切换壁纸的功能挺不错,美中不足的是图片只能放本地,我一千多张背景图片占了不少磁盘空间,遂萌生写一个类似的自动切换软件,图片则从网上下载。

    计划工具分两部分,一是本地切换部分,一是网上下载部分。先说本地切换部分。

    本地切换部分,要实现的功能包括:初始化托盘,手动切换,定时切换,开机自启动等功能。

    一,初始化托盘

    这个功能博客园有很多文章,大家可以参考。基本上实现的功能包括,初始化时最小化到托盘,实现托盘右键菜单功能,双击显示主界面。

    托盘的菜单如下图:

    主界面就是“下一个”按钮。

    拖动notifyicon控件到主窗体,拖动菜单到主窗体,设置notifyicon的菜单项为床窗体菜单。

    窗体实现部分如下:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Windows.Forms;
      9 
     10 using System.Runtime.InteropServices;
     11 using Microsoft.Win32;
     12 using System.IO;
     13 
     14 namespace AutoDesk
     15 {
     16     public partial class AutoDesk : Form
     17     {
     18         // 存放壁纸的文件位置
     19         private string m_deskpick_path = "E:\\deskPic";
     20         private string m_pick_name = "3.jpg";
     21         // 记录快捷键的键码
     22         private int Hotkey1;
     23         // 记录是否关闭窗体。
     24         private DialogResult m_dialogResult = DialogResult.No;
     25 
     26 
     27         public AutoDesk()
     28         {
     29             InitializeComponent();
     30             
     31         }
     32 
     33         /// <summary>
     34         /// 从m_deskpick_path文件夹中随即选取一个文件
     35         /// </summary>
     36         /// <returns></returns>
     37         private string get_random_pick_name()
     38         {
     39             Random random = new Random(Environment.TickCount);
     40             string pick_name = "3.jpg";
     41             DirectoryInfo dInfo = new DirectoryInfo(m_deskpick_path);
     42             FileInfo[] files = dInfo.GetFiles();//"*.jpg|*.gif|*.png|*.bmp");
     43             if (files != null && files.Length > 0)
     44             {
     45                 int index = random.Next(0, files.Length);
     46                 pick_name = files[index].Name;
     47             }
     48             return pick_name;
     49         }
     50 
     51         /// <summary>
     52         /// 通过IActiveDesktop接口切换桌面,
     53         /// IActiveDesktop接口切换桌面具有win7的渐变效果(fade effect或者称为slideshow)
     54         /// 而通过SystemParametersInfo函数也能实现切换壁纸,但是没有渐变效果。
     55         /// 
     56         /// </summary>
     57         private void switch_to_next_waller()
     58         {
     59             string strSavePath = Path.Combine(m_deskpick_path, get_random_pick_name());
     60             //WinAPI.SystemParametersInfo(20, 1, strSavePath, 1);
     61             IActiveDesktop iad = shlobj.GetActiveDesktop();
     62             iad.SetWallpaper(strSavePath, 0);
     63             iad.ApplyChanges(AD_Apply.ALL | AD_Apply.FORCE | AD_Apply.BUFFERED_REFRESH);
     64             System.Runtime.InteropServices.Marshal.ReleaseComObject(iad);
     65         }
     66 
     67         /// <summary>
     68         /// 主界面切换下一桌面的实现。
     69         /// </summary>
     70         /// <param name="sender"></param>
     71         /// <param name="e"></param>
     72         private void btn_center_Click(object sender, EventArgs e)
     73         {
     74             try
     75             {
     76                 switch_to_next_waller();
     77             }
     78             catch (Exception ex)
     79             {
     80                 MessageBox.Show(ex.Message);
     81             }
     82         }
     83 
     84         /// <summary>
     85         /// 最小化到托盘,要实现初始化到托盘,需要设置窗体的初始状态为最小化。
     86         /// </summary>
     87         /// <param name="sender"></param>
     88         /// <param name="e"></param>
     89         private void AutoDesk_SizeChanged(object sender, EventArgs e)
     90         {
     91             try
     92             {
     93                 if (this.WindowState == FormWindowState.Minimized)
     94                 {
     95                     this.Hide();
     96                     this.notifyIcon1.Visible = true;
     97                 }
     98             }
     99             catch (Exception ex)
    100             {
    101                 MessageBox.Show(ex.Message);
    102             }
    103         }
    104 
    105         /// <summary>
    106         /// 
    107         /// </summary>
    108         /// <param name="sender"></param>
    109         /// <param name="e"></param>
    110         private void notifyIcon1_Click(object sender, EventArgs e)
    111         {
    112             try
    113             {
    114                 //this.Visible = true;
    115                 //this.WindowState = FormWindowState.Normal;
    116                 //this.notifyIcon1.Visible = false; 
    117             }
    118             catch (Exception ex)
    119             {
    120                 MessageBox.Show(ex.Message);
    121             }
    122         }
    123 
    124         /// <summary>
    125         /// 菜单项实现切换到下一桌面
    126         /// </summary>
    127         /// <param name="sender"></param>
    128         /// <param name="e"></param>
    129         private void NextToolStripMenuItem_Click(object sender, EventArgs e)
    130         {
    131             try
    132             {
    133                 switch_to_next_waller();
    134             }
    135             catch (Exception ex)
    136             {
    137                 MessageBox.Show(ex.Message);
    138             }
    139 
    140         }
    141 
    142         /// <summary>
    143         /// 菜单项退出应用程序
    144         /// </summary>
    145         /// <param name="sender"></param>
    146         /// <param name="e"></param>
    147         private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    148         {
    149             try
    150             {
    151                 m_dialogResult = System.Windows.Forms.DialogResult.Yes;
    152                 this.Close();
    153             }
    154             catch (Exception ex)
    155             {
    156                 MessageBox.Show(ex.Message);
    157             }
    158         }
    159 
    160         /// <summary>
    161         /// 菜单项显示主界面
    162         /// </summary>
    163         /// <param name="sender"></param>
    164         /// <param name="e"></param>
    165         private void showMainFrmToolStripMenuItem_Click(object sender, EventArgs e)
    166         {
    167             try
    168             {
    169                 this.Visible = true;
    170                 this.WindowState = FormWindowState.Normal;
    171                 
    172             }
    173             catch (Exception ex)
    174             {
    175                 MessageBox.Show(ex.Message);
    176             }
    177         }
    178 
    179         /// <summary>
    180         /// 窗体关闭相应事件。如果是点击窗体的关闭按钮,则只是隐藏。
    181         /// </summary>
    182         /// <param name="sender"></param>
    183         /// <param name="e"></param>
    184         private void AutoDesk_FormClosing(object sender, FormClosingEventArgs e)
    185         {
    186             try
    187             {
    188                 if (m_dialogResult == System.Windows.Forms.DialogResult.Yes)
    189                 {
    190                     e.Cancel = false;
    191                     Application.Exit();
    192                 }
    193                 else
    194                 {
    195                     e.Cancel = true;
    196                     this.Hide();
    197                 }
    198             }
    199             catch (Exception ex)
    200             {
    201                 MessageBox.Show(ex.Message);
    202             }
    203         }
    204 
    205         /// <summary>
    206         /// 窗体启动时挂载全局快捷键Ctrl+F1.
    207         /// </summary>
    208         /// <param name="sender"></param>
    209         /// <param name="e"></param>
    210         private void AutoDesk_Load(object sender, EventArgs e)
    211         {
    212             try
    213             {
    214                 
    215                  SystemHotKey.Hotkey hotkey;
    216                  hotkey = new SystemHotKey.Hotkey(this.Handle);  
    217        
    218                  //定义快键(Ctrl + F1)  
    219                  Hotkey1 = hotkey.RegisterHotkey(System.Windows.Forms.Keys.F1, SystemHotKey.Hotkey.KeyFlags.MOD_CONTROL);
    220                  hotkey.OnHotkey += new SystemHotKey.HotkeyEventHandler(OnHotkey);
    221 
    222             }
    223             catch (Exception ex)
    224             {
    225                 MessageBox.Show(ex.Message);
    226             }
    227         }
    228 
    229         /// <summary>
    230         /// 快捷键按下后切换到下一个随即壁纸。
    231         /// </summary>
    232         /// <param name="HotkeyID"></param>
    233          public void OnHotkey(int HotkeyID)  
    234          {
    235              try
    236              {
    237                  if (HotkeyID == Hotkey1)
    238                  {
    239                      switch_to_next_waller();
    240                  }
    241                  else
    242                  {
    243                      //this.Visible = false;  
    244                  }
    245              }
    246              catch (Exception ex)
    247              {
    248                  MessageBox.Show(ex.Message);
    249              }
    250          }  
    251 
    252         /// <summary>
    253         /// 托盘双击显示主界面
    254         /// </summary>
    255         /// <param name="sender"></param>
    256         /// <param name="e"></param>
    257         private void notifyIcon1_DoubleClick(object sender, EventArgs e)
    258         {
    259             try
    260             {
    261                 this.Visible = true;
    262                 this.WindowState = FormWindowState.Normal;
    263             }
    264             catch (Exception ex)
    265             {
    266                 MessageBox.Show(ex.Message);
    267             }
    268         }
    269     }
    270 }
  • 相关阅读:
    C
    B
    A
    F
    C
    H
    Fang Fang hdu 5455
    Fire Net hdu1045(DFS)
    Sudoku HDU 5547(DFS)
    UVA 10200 Prime Time (打表)
  • 原文地址:https://www.cnblogs.com/linbirg/p/2578477.html
Copyright © 2011-2022 走看看