下午班上一做网站的同学打电话,请我帮忙做一个小工具。源于他做了一个网站,手头也采集了大量的帖子(应该是电子文档吧),发帖子总不能是一个时候发的吧,于是就请可帮做一个小工具——在指定的时间范围内间隔指定的时间随机改变系统时间。

要改变系统时间,.NET里好像没有现成的方法,就只有通过Win32 API来实现了。于是我就查阅了API大全,得到的SetSystemTime函数:

在SetSystemTime的参数中,参数类型为SYSTEMTIME,查阅MSND后得到SYSTEMTIME的结构如下:

typedef struct _SYSTEMTIME {

WORD wYear;

WORD wMonth;

WORD wDayOfWeek;

WORD wDay;

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds;

} SYSTEMTIME;

其内容相信不用我说了吧。

所以在C#中SYSTEMTIME的结构和SetSystemTime函数定义如下:

 1        [StructLayout(LayoutKind.Sequential)]
 2        public struct SystemTime
 3        {
 4            public ushort wYear;
 5            public ushort wMonth;
 6            public ushort wDayOfWeek;
 7            public ushort wDay;
 8            public ushort wHour;
 9            public ushort wMinute;
10            public ushort wSecond;
11            public ushort wMiliseconds;
12        }   
13
14        [DllImport("kernel32")]
15        public static extern Int32 SetSystemTime(ref SystemTime time);

已经有了设为系统时间的方法,接下来就需要一个方法来创建随机时间。如果你直接取年的随机值、月的随机值、日的随机值……这种方法是不可行的,因为你会发现取到的时间并不一定是在你限定的时间范围内。

因为Datetime的基本单位是秒,所有我们可以在秒上做文章:先用TimeSpan求出两个时间之间相差的秒数,在以秒为最大值随机取一个值,然后以就小的时间加上随机取得的数。

 1public DateTime GetRandomTime(DateTime time1, DateTime time2)
 2{
 3    Random random = new Random((int)DateTime.Now.Ticks);
 4    DateTime minTime = new DateTime();
 5    DateTime maxTime = new DateTime();
 6
 7    System.TimeSpan ts = new System.TimeSpan(time1.Ticks - time2.Ticks);
 8
 9    double dTotalSecontds = ts.TotalSeconds;
10
11    int i = random.Next((int)System.Math.Abs(dTotalSecontds));
12
13    return minTime.AddSeconds(i);
14}

接下来是将DateTime转换为SystemTime

Code
 1private SystemTime DateTimeToSystemTime(DateTime dt)
 2{
 3    SystemTime st = new SystemTime();
 4
 5    st.wYear = (ushort)dt.Year;
 6    st.wMonth = (ushort)dt.Month;
 7    st.wDay = (ushort)dt.Day;
 8    st.wDayOfWeek = (ushort)dt.DayOfWeek;
 9    st.wHour = (ushort)dt.Hour;
10    st.wMinute = (ushort)dt.Minute;
11    st.wSecond = (ushort)dt.Second;
12    st.wMiliseconds = (ushort)dt.Millisecond;
13
14    return st;
15}

源码下载:

http://files.cnblogs.com/desmend/ChangeSysTime.rar

转载于:https://www.cnblogs.com/desmend/archive/2008/09/22/1296289.html

小工具—系统API应用相关推荐

  1. python课程小作业之桌面小工具系统

    from tkinter import *#图形界面包 from tkinter import messagebox import os.path import os import math impo ...

  2. php测试接口的小工具,PHP API接口测试小工具

    前端时间给手机客户端做接口,当时弱爆了,写完API接口后,也不怎么测试,最后是等客户端调用的时候检验API的正确性. 后面利用PHP的curl实现Post请求,检验API接口的正确性:配合前面做的一个 ...

  3. Python小工具——通过API获取天气预报

    Python通过API获取天气预报 闲来无事,用Python实现了一个小工具,通过实现API来获取当前的天气预报. 获取API的key 在阿凡达数据上查找天气预报相关的API,注册申请可获得一个key ...

  4. android小工具-系统音量管理器

    简介:调节系统音量的小工具,能够快捷的调节系统铃声,媒体音乐.闹钟和通话声音.你可能会想,手机自带的音量键还不够快捷吗?还得写个程序?首先,用音量键调音只能调节一种声音,像闹钟这种声音不能直接调.其次 ...

  5. 利用这个小工具+系统日历让你在SCAU成为时间管理大师

  6. win7倒计时桌面小工具_iOS 14系统面板截图曝光,新增桌面小工具,越来越像安卓了...

    商务合作请联系QQ:710035765 大家好,我是波老师.随着iOS 14越来越多的爆料,波老师预测距离iOS 14测试版的发布也要越来越近了.近日,有博主在Twitter上曝出了iOS 14墙纸设 ...

  7. php api接口调试,PHP API接口测试小工具

    前端时间给手机客户端做接口,当时弱爆了,写完API接口后,也不怎么测试,最后是等客户端调用的时候检验API的正确性. 后面利用PHP的curl实现Post请求,检验API接口的正确性:配合前面做的一个 ...

  8. php 接口测压,PHP API接口测试小工具

    前端时间给手机客户端做接口,当时弱爆了,写完API接口后,也不怎么测试,最后是等客户端调用的时候检验API的正确性. 后面利用PHP的curl实现Post请求,检验API接口的正确性:配合前面做的一个 ...

  9. 今日头条Marketing API小工具(.Net Core版本)

    前言 由于工作原因,需要用到今日头条的Marketing API做一些广告投放的定制化开发.然后看现在网上也没多少关于头条Marketing API的文章,于是便就有了该篇文章. 头条Marketin ...

最新文章

  1. java平台类成员访问修饰符_JAVA类的修饰符及访问权限
  2. react es6+ 代码优化之路-1
  3. 两节点的最小公共祖先LCA
  4. [Todo] 乐观悲观锁,自旋互斥锁等等
  5. Ubuntu18.04下安装OpenCV依赖包出现ibjasper-dev无法安装的问题
  6. Matlab常用函数:rand,randi和randn区别
  7. “错题集”帮你期末考试冲向满分
  8. linux cut 命令详解
  9. STM32打印log--使用J-Link RTT Viewer
  10. java多线程设计模式:wait/notify机制(转)
  11. declares(declares是什么意思)
  12. python小课风变编程_风变编程Python小课最近很火,大家学完感受如何?
  13. 零基础学php rar,php实现rar文件的读取和解压
  14. 小程序中的页面导航(页面跳转)
  15. java eclipse怎么下载_javaeclipse简介(附下载地址和安装包)
  16. spring开发常用的
  17. android 无法添加帐户,android - Android SecurityException:uid xxxxx无法显式添加帐户 - 堆栈内存溢出...
  18. 【CSS】【position】css中的position属性
  19. R语言用load(xxx.Rdata)报错 bad restore file magic number (file may be corrupted) -- no data loaded
  20. 自制Microbit图形化编程小车

热门文章

  1. 对php的感受100字_【php实训心得】php心得体会
  2. js 控制鼠标_原生js实现改变视频播放速率
  3. 在html中直接使用%3c php%3e,HTB-靶机-Calamity
  4. C++轻量级微服务_微服务的部署
  5. java poi导出Excel表格超大数据量解决方案
  6. 3dmax如何显示参考图_3dmax怎么在视图中放入参照
  7. udp程序启动后检测都是未启动_【例子教程】联想Leez P710 物联网AI物体检测
  8. matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件间的数据传递...
  9. 防抖与节流方案_关于图片懒加载的几种方案
  10. matlab求方程实根,简单迭代法求方程根的MATLAB程序