自用小工具

SourceInsight是个看代码的好工具;在平时的工作中真是离不开,可是它的license也很贵,人民币好像要2K多吧,在公司用的时候不敢乱用sn,只好用试用版的,它的试用版是从安装起开始30天的期限,到期后如果把系统时间改回去还可以继续使用。以前都是每次启动SI之前先把系统时间调回去,启动完毕之后再调回来,并且启动完毕后还要点击一下try。。。每天都要这样来一次,挺麻烦的,所以就做了一个小工具,这个小工具首先修改系统时间,然后启动SI,启动完成后自动点击try,然后恢复系统时间,这样,点击一次就可以正常使用SI了:)

 

没有几行代码,用C#写的,里面主用了这几个方面的东西:

1.c#中如何修改系统时间;

2.c#中如何根据标题找窗口句柄;

3.c#中如何通过窗口句柄向该窗口发送快捷键;

4.c#中如何启动外部程序;

5.c#中如何让线程睡眠;

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Runtime.InteropServices;
  9. using System.Threading;
  10. namespace SI
  11. {
  12.     public partial class SI : Form
  13.     {
  14.         SYSTEMTIME oldst;
  15.         SYSTEMTIME newst;
  16.         public SI()
  17.         {
  18.             InitializeComponent();
  19.             SYSTEMTIME oldst = new SYSTEMTIME(); 
  20.             SYSTEMTIME newst = new SYSTEMTIME();
  21.             start();
  22.         }
  23.         public struct SYSTEMTIME
  24.         {
  25.             public ushort wYear;
  26.             public ushort wMonth;
  27.             public ushort wDayOfWeek;
  28.             public ushort wDay;
  29.             public ushort wHour;
  30.             public ushort wMinute;
  31.             public ushort wSecond;
  32.             public ushort wMilliseconds;
  33.             /// Convert form System.DateTime
  34.             public void FromDateTime(DateTime time)
  35.             {
  36.                 wYear = (ushort)time.Year;
  37.                 wMonth = (ushort)time.Month;
  38.                 wDayOfWeek = (ushort)time.DayOfWeek;
  39.                 wDay = (ushort)time.Day;
  40.                 wHour = (ushort)time.Hour;
  41.                 wMinute = (ushort)time.Minute;
  42.                 wSecond = (ushort)time.Second;
  43.                 wMilliseconds = (ushort)time.Millisecond;
  44.             }
  45.             
  46.         }
  47.         //SetLocalTime C# Signature
  48.         [DllImport("Kernel32.dll")]
  49.         public static extern bool SetLocalTime(ref SYSTEMTIME Time);
  50.         /// <summary > 
  51.         /// 获取窗口标题的句柄 
  52.         /// </summary > 
  53.         /// <param name= "类名 " >指定类名,不指定可以输入Null </param > 
  54.         /// <param name= "程序标题 " >查找窗体的标题名称 </param > 
  55.         /// <returns > </returns > 
  56.         [DllImport("user32.dll")]
  57.         public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
  58.         [DllImport("user32.dll")]
  59.         public static extern bool SetForegroundWindow(IntPtr hWnd); 
  60.         //[DllImport( "user32.dll ",EntryPoint= " ")] 
  61.         /// <summary > 
  62.         /// 应用程序的主入口点。 
  63.         /// </summary > 
  64.         [STAThread]
  65.         private void start()
  66.         {
  67.             //获取系统当前时间,并保存起来以便恢复
  68.             DateTime oldt = DateTime.Now;                
  69.             oldst.FromDateTime(oldt);
  70.             //设置SI可以运行的时间2008-1-1
  71.             newst.wYear = 2008;
  72.             newst.wMonth = 1;
  73.             newst.wDay = 1;            
  74.             SetLocalTime(ref newst);
  75.             //准备启动SI
  76.             System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
  77.             //设置外部程序名
  78.             Info.FileName = "Insight3.exe";
  79.             //设置外部程序的启动参数(命令行参数)为test.txt
  80.             //Info.Arguments = "test.txt";
  81.             //设置外部程序工作目录,这里可以考虑可以配置
  82.             Info.WorkingDirectory = "d://program files//Source Insight 3";
  83.             //声明一个程序类
  84.             System.Diagnostics.Process Proc;
  85.             try
  86.             {
  87.                 //启动外部程序
  88.                 Proc = System.Diagnostics.Process.Start(Info);
  89.                 //等待source insight启动完成,知道出来试用期的对话框
  90.                 IntPtr hwnd;
  91.                 do
  92.                 {
  93.                     Thread.Sleep(100);
  94.                     //窗体title可以考虑可配置
  95.                     hwnd = FindWindow(null"Source Insight - 28 Days Left in Trial License");
  96.                 }
  97.                 while (hwnd == IntPtr.Zero);
  98.                 //把试用期对话框置前,然后向其发送快捷键Alt + t,关闭对话框
  99.                 SetForegroundWindow(hwnd);
  100.                 SendKeys.SendWait("%t");
  101.                 //恢复系统时间,然后程序退出
  102.                 SetLocalTime(ref oldst);               
  103.                 System.Environment.Exit(0);   
  104.             }
  105.             catch (System.ComponentModel.Win32Exception error)
  106.             {
  107.                 MessageBox.Show("系统找不到指定的程序文件");
  108.                 System.Environment.Exit(0);
  109.             }
  110.             
  111.         }     
  112.     }
  113. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值