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

要改变系统时间,.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. [转帖]tar高级教程:增量备份、定时备份、网络备份
  2. android sdk版本控制,1. 统一SDK版本管理配置
  3. c语言字符串化简,华为面试题:一元多项式的化简 C语言实现源码
  4. ajax jq 图片上传请求头_如何使用js或jQuery向Ajax请求添加自定义HTTP头?
  5. JZOJ 5639. 【NOI2018模拟4.8】秘密袭击
  6. 企业或将借助OA走出经济危机
  7. 经典排序算法(五)--鸽巢排序Pigeonhole Sort
  8. python与pycharm的作用_JSON 在pycharm 与python 三者有什么关系?JSON有什么作用?
  9. mysql ---- 全文索引:中文语义分词检索
  10. 数字后端设计相关文件说明
  11. 【优化求解】基于头脑风暴优化算法BSO求解最优目标matlab源码
  12. Android学习之登陆界面设计(二)基本界面设计
  13. python打开文件对话框
  14. 微信页面模板基础知识汇总
  15. linux oracle 常用操作
  16. Pytorch混合精度训练
  17. 性能指标:队列深度、IOPS与时延
  18. IOS开发之——图片的内存优化
  19. 就业市场状况指数(LMCI)和非农数据
  20. 打开anaconda prompt 出错 import ctypes

热门文章

  1. html不同类别的列表设置,HTML --列表
  2. contos7改分辨率_centos7分辨率怎么设置-修改centos7分辨率的方法 - 河东软件园
  3. figma客户端_小白的Figma入门手册
  4. 邹检验 matlab,科学网—Matlab中一个很有用的函数:regionprops - 邹兴文的博文
  5. 系统学习机器学习之随机场(二)--MEMM
  6. USC ECG Learning Center/ ECG Glossary
  7. Vue- Markdown 使用大全
  8. android中的横幅通知
  9. Hive提取json字段信息
  10. Windows Driver开发_TraceEvents调试以及加载驱动的方法