学习C#已经有两个多月,在网上查了很多资料,也整理了很多类。大部分来自网络,然后自己修改一下
发个帖整理一下,希望对园友有所帮助
1 热键注册类
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Runtime.InteropServices;
5
using System.Windows.Forms;
6
7
namespace IDCard
8
{
9
class HotKey
10
{
11
//如果函数执行成功,返回值不为0。
12
//如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
13
[DllImport("user32.dll", SetLastError = true)]
14
public static extern bool RegisterHotKey(
15
IntPtr hWnd, //要定义热键的窗口的句柄
16
int id, //定义热键ID(不能与其它ID重复)
17
KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
18
Keys vk //定义热键的内容
19
);
20
[DllImport("user32.dll", SetLastError = true)]
21
public static extern bool UnregisterHotKey(
22
IntPtr hWnd, //要取消热键的窗口的句柄
23
int id //要取消热键的ID
24
);
25
//定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
26
[Flags()]
27
public enum KeyModifiers
28
{
29
None = 0,
30
Alt = 1,
31
Ctrl = 2,
32
Shift = 4,
33
WindowsKey = 8
34
}
35
}
36
}
37

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

2 加密解密类
1
using System;
2
using System.Data;
3
using System.Data.OleDb;
4
using System.Collections.Generic;
5
using System.Text;
6
using System.IO;
7
using System.Security.Cryptography;
8
using Microsoft.Win32;
9
using System.Configuration;
10
using System.Windows.Forms;
11
12
namespace IDCard
13
{
14
class Decrypt
15
{
16
17
//默认密钥向量
18
private static byte[] Keys = { 0x55, 0x32, 0xF8, 0xEA, 0x93, 0xC3, 0xF9, 0xB2 };
19
/// <summary>
20
/// DES加密字符串
21
/// </summary>
22
/// <param name="encryptString">待加密的字符串</param>
23
/// <param name="encryptKey">加密密钥,要求为8位</param>
24
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
25
public static string EncryptDES(string encryptString, string encryptKey)
26
{
27
try
28
{
29
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey);
30
byte[] rgbIV = Keys;
31
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
32
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
33
MemoryStream mStream = new MemoryStream();
34
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
35
cStream.Write(inputByteArray, 0, inputByteArray.Length);
36
cStream.FlushFinalBlock();
37
return Convert.ToBase64String(mStream.ToArray());
38
}
39
catch (Exception e)
40
{
41
MessageBox.Show("Message=" + e.Message);
42
return encryptString;
43
}
44
}
45
46
/// <summary>
47
/// DES解密字符串
48
/// </summary>
49
/// <param name="decryptString">待解密的字符串</param>
50
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
51
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
52
public static string DecryptDES(string decryptString, string decryptKey)
53
{
54
try
55
{
56
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
57
byte[] rgbIV = Keys;
58
byte[] inputByteArray = Convert.FromBase64String(decryptString);
59
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
60
MemoryStream mStream = new MemoryStream();
61
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
62
cStream.Write(inputByteArray, 0, inputByteArray.Length);
63
cStream.FlushFinalBlock();
64
return Encoding.UTF8.GetString(mStream.ToArray());
65
}
66
catch (Exception e)
67
{
68
MessageBox.Show("Message=" + e.Message);
69
return decryptString;
70
}
71
}
72
73
public static string Formate(string decryptString, string decryptKey)
74
{
75
string transactSn = string.Empty;
76
if (decryptString != "")
77
{
78
string sn = EncryptDES(EncryptDES(EncryptDES(decryptString, decryptKey), decryptKey),decryptKey);
79
80
sn = Get_MD5_Method1(sn);
81
transactSn = sn.Substring(0, 4) + "-" + sn.Substring(4, 4) +
82
"-" + sn.Substring(8, 4) + "-" + sn.Substring(12, 4);
83
return transactSn;
84
}
85
else
86
return transactSn;
87
}
88
89
public static string Get_MD5_Method1(string strSource)
90
{ //new9
91
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
92
//获取密文字节数组
93
byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(strSource));
94
//转换成字符串,并取9到25位
95
string strResult = BitConverter.ToString(bytResult, 4, 8);
96
//转换成字符串,32位
97
//string strResult = BitConverter.ToString(bytResult);
98
//BitConverter转换出来的字符串会在每个字符中间产生一个分隔符,需要去除掉
99
strResult = strResult.Replace("-", "");
100
return strResult;
101
}
102
}
103
}
104

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

3 繁简体转换
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using Microsoft.VisualBasic;
5
namespace IDCard
6
{
7
class FontStyle
8
{
9
/// <summary>
10
/// 繁体转简体
11
/// </summary>
12
/// <param name="str">需转换的繁体文字</param>
13
/// <returns></returns>
14
public static string Traditional2Simplified(string str)
15
{
16
return (Microsoft.VisualBasic.Strings.StrConv(str, Microsoft.VisualBasic.VbStrConv.SimplifiedChinese, 0));
17
18
}
19
/// <summary>
20
/// 简体转繁体
21
/// </summary>
22
/// <param name="str">需转换的简体文字</param>
23
/// <returns></returns>
24
public static string Simplified2Traditional(string str)
25
{
26
return (Microsoft.VisualBasic.Strings.StrConv(str as String, Microsoft.VisualBasic.VbStrConv.TraditionalChinese, 0));
27
}
28
29
}
30
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

4 读取系统配置文件
1
using System;
2
using System.IO;
3
using System.Runtime.InteropServices;
4
using System.Text;
5
using System.Collections;
6
using System.Collections.Specialized;
7
8
namespace IDCard
9
{
10
/**/
11
/**/
12
/**/
13
/// <summary>
14
/// IniFiles的类
15
/// </summary>
16
public class IniFiles
17
{
18
public string FileName; //INI文件名
19
//声明读写INI文件的API函数
20
[DllImport("kernel32")]
21
private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
22
[DllImport("kernel32")]
23
private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);
24
//类的构造函数,传递INI文件名
25
public IniFiles(string AFileName)
26
{
27
// 判断文件是否存在
28
FileInfo fileInfo = new FileInfo(AFileName);
29
//Todo:搞清枚举的用法
30
if ((!fileInfo.Exists))
31
{ // ¦ ¦ (FileAttributes.Directory in fileInfo.Attributes))
32
//文件不存在,建立文件
33
System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default);
34
try
35
{
36
sw.Write("#表格配置档案");
37
sw.Close();
38
}
39
catch
40
{
41
throw (new ApplicationException("Ini文件不存在"));
42
}
43
}
44
//必须是完全路径,不能是相对路径
45
FileName = fileInfo.FullName;
46
}
47
//写INI文件
48
public void WriteString(string Section, string Ident, string Value)
49
{
50
if (!WritePrivateProfileString(Section, Ident, Value, FileName))
51
{
52
53
throw (new ApplicationException("写Ini文件出错"));
54
}
55
}
56
//读取INI文件指定
57
public string ReadString(string Section, string Ident, string Default)
58
{
59
Byte[] Buffer = new Byte[65535];
60
int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);
61
//必须设定0(系统默认的代码页)的编码方式,否则无法支持中文
62
string s = Encoding.GetEncoding(0).GetString(Buffer);
63
s = s.Substring(0, bufLen);
64
return s.Trim();
65
}
66
67
//读整数
68
public int ReadInteger(string Section, string Ident, int Default)
69
{
70
string intStr = ReadString(Section, Ident, Convert.ToString(Default));
71
try
72
{
73
return Convert.ToInt32(intStr);
74
}
75
catch (Exception ex)
76
{
77
Console.WriteLine(ex.Message);
78
return Default;
79
}
80
}
81
82
//写整数
83
public void WriteInteger(string Section, string Ident, int Value)
84
{
85
WriteString(Section, Ident, Value.ToString());
86
}
87
88
//读布尔
89
public bool ReadBool(string Section, string Ident, bool Default)
90
{
91
try
92
{
93
return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));
94
}
95
catch (Exception ex)
96
{
97
Console.WriteLine(ex.Message);
98
return Default;
99
}
100
}
101
102
//写Bool
103
public void WriteBool(string Section, string Ident, bool Value)
104
{
105
WriteString(Section, Ident, Convert.ToString(Value));
106
}
107
108
//从Ini文件中,将指定的Section名称中的所有Ident添加到列表中
109
public void ReadSection(string Section, StringCollection Idents)
110
{
111
Byte[] Buffer = new Byte[16384];
112
//Idents.Clear();
113
114
int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0),
115
FileName);
116
//对Section进行解析
117
GetStringsFromBuffer(Buffer, bufLen, Idents);
118
}
119
120
private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)
121
{
122
Strings.Clear();
123
if (bufLen != 0)
124
{
125
int start = 0;
126
for (int i = 0; i < bufLen; i++)
127
{
128
if ((Buffer[i] == 0) && ((i - start) > 0))
129
{
130
String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start);
131
Strings.Add(s);
132
start = i + 1;
133
}
134
}
135
}
136
}
137
//从Ini文件中,读取所有的Sections的名称
138
public void ReadSections(StringCollection SectionList)
139
{
140
//Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section
141
byte[] Buffer = new byte[65535];
142
int bufLen = 0;
143
bufLen = GetPrivateProfileString(null, null, null, Buffer,
144
Buffer.GetUpperBound(0), FileName);
145
GetStringsFromBuffer(Buffer, bufLen, SectionList);
146
}
147
//读取指定的Section的所有Value到列表中
148
public void ReadSectionValues(string Section, NameValueCollection Values)
149
{
150
StringCollection KeyList = new StringCollection();
151
ReadSection(Section, KeyList);
152
Values.Clear();
153
foreach (string key in KeyList)
154
{
155
Values.Add(key, ReadString(Section, key, ""));
156
157
}
158
}
159
//清除某个Section
160
public void EraseSection(string Section)
161
{
162
//
163
if (!WritePrivateProfileString(Section, null, null, FileName))
164
{
165
throw (new ApplicationException("无法清除Ini文件中的Section"));
166
}
167
}
168
//删除某个Section下的键
169
public void DeleteKey(string Section, string Ident)
170
{
171
WritePrivateProfileString(Section, Ident, null, FileName);
172
}
173
//Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件
174
//在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile
175
//执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。
176
public void UpdateFile()
177
{
178
WritePrivateProfileString(null, null, null, FileName);
179
}
180
181
//检查某个Section下的某个键值是否存在
182
public bool ValueExists(string Section, string Ident)
183
{
184
//
185
StringCollection Idents = new StringCollection();
186
ReadSection(Section, Idents);
187
return Idents.IndexOf(Ident) > -1;
188
}
189
190
//确保资源的释放
191
~IniFiles()
192
{
193
UpdateFile();
194
}
195
}
196
}
197
198

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198
