C#利用win32 Api 修改本地系统时间、获取硬盘序列号
作者:hebedich 发布时间:2021-11-23 06:52:24
标签:c#,win32,api,系统时间,硬盘序列号
C#利用win32 Api 修改本地系统时间、获取硬盘序列号,可以用于软件注册机制的编写!
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Fengyun
{
public class Win32
{
#region 修改本地系统时间
[DllImport("Kernel32.dll")]
private extern static void GetSystemTime(ref SYSTEMTIME lpSystemTime);
[DllImport("Kernel32.dll")]
private extern static uint SetLocalTime(ref SYSTEMTIME lpSystemTime);
[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
/// <summary>
/// 将本地时间与sqlserver服务器时间同步
/// </summary>
/// <param name="SqlServerTime">时间</param>
public static void SetTime(DateTime SqlServerTime)
{
SYSTEMTIME st = new SYSTEMTIME();
st.wYear = Convert.ToUInt16(SqlServerTime.Year);
st.wMonth = Convert.ToUInt16(SqlServerTime.Month);
st.wDay = Convert.ToUInt16(SqlServerTime.Day);
st.wHour = Convert.ToUInt16(SqlServerTime.Hour);
st.wMilliseconds = Convert.ToUInt16(SqlServerTime.Millisecond);
st.wMinute = Convert.ToUInt16(SqlServerTime.Minute);
st.wSecond = Convert.ToUInt16(SqlServerTime.Second);
SetLocalTime(ref st);
}
#endregion
#region 获取硬盘序列号
[DllImport("kernel32.dll")]
private static extern int GetVolumeInformation(
string lpRootPathName,
string lpVolumeNameBuffer,
int nVolumeNameSize,
ref int lpVolumeSerialNumber,
int lpMaximumComponentLength,
int lpFileSystemFlags,
string lpFileSystemNameBuffer,
int nFileSystemNameSize
);
/// <summary>
/// 获取硬盘序列号
/// </summary>
/// <param name="drvID">硬盘盘符[c|d|e|....]</param>
/// <returns></returns>
public static string GetDiskVolume(string drvID)
{
const int MAX_FILENAME_LEN = 256;
int retVal = 0;
int lpMaximumComponentLength = 0;
int lpFileSystemFlags = 0;
string lpVolumeNameBuffer = null;
string lpFileSystemNameBuffer = null;
int i = GetVolumeInformation(
drvID + @":\",
lpVolumeNameBuffer,
MAX_FILENAME_LEN,
ref retVal,
lpMaximumComponentLength,
lpFileSystemFlags,
lpFileSystemNameBuffer,
MAX_FILENAME_LEN
);
return retVal.ToString("x");
}
#endregion
}
}


猜你喜欢
- 本文实例讲述了C#多线程学习之使用定时器进行多线程的自动管理。分享给大家供大家参考。具体分析如下:Timer类:设置一个定时器,定时执行用户
- 本文实例讲述了Android简单获取经纬度的方法。分享给大家供大家参考,具体如下:public void getLoc() {
- 本文实例讲述了Android实现音量调节的方法。分享给大家供大家参考。具体如下:main.xml布局文件:<?xml version=
- /** 获取昨天日期 方法一,这个方法好像有点慢*/Date dt = new Date(); Calendar cal = Calenda
- 缘起经过前面三章的入门,我们大概了解了Mybatis的主线逻辑是什么样子的,在本章中,我们将正式进入Mybatis的源码海洋。Mybatis
- 官方文档 https://developer.android.google.cn/guide/components/activit
- 话不多说,请看代码:package com.lxj.demo;import java.io.BufferedReader;import ja
- 23种设计模式第十二篇:java模版方法模式定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义
- 先看英文意思命名空间using System.Text.RegularExpressions;正则表达式是干什么用的?简单来说就是 检索 数
- 序言之前封装过一个日志注解,打印方法执行信息,功能较为单一不够灵活,近来兴趣来了,想重构下,使其支持表达式语法,以应对灵活的日志打印需求。该
- 动态替换Spring容器中的Bean原因最近在编写单测时,发现使用 Mock 工具预定义 Service 中方法的行为特别难用,而且无法精细
- SpringMVC实现RESTful风格RESTful中文释义为”表现层状态转换“,它不是一种标准,
- 一、引言那么那么那么今天来说下MP中强大的条件查询功能。本章是基于上个案例来讲的:MyBaits-Plus 快速入门案例二、具体操作首先来说
- FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或Stre
- Maven setting中私有仓库配置浅析最近遇到过不少这样那样的问题,曾经做过maven的分享,但是发现当时部分内容还是太想当然了,下面
- ObjectMapper 忽略字段大小写核心代码:ObjectMapper mapper = new ObjectMapper();mapp
- 1、用字符串分隔: using System.Text.RegularExpressions; string str="aaajs
- 什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。每一个链表都包含多个节点,
- 在android 6.0开始,部分的权限需要我们动态申请,也就是说当我们的打开app的时候系统不会主动像您申请app所需要的部分权限,需要客
- 核心配置文件mybatis-config.xml 系统核心配置文件MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属