1 /*
2 using System;
3 using System.Text;
4 using System.Runtime.InteropServices;
5 using System.Reflection;
6 using System.Windows.Forms;
7
8 namespace MouseKeyboardLibrary
9 {
10 /// <summary>
11 /// Abstract base class for Mouse and Keyboard hooks
12 /// </summary>
13 public abstract class GlobalHook
14 {
15 #region Windows API Code
16
17 [StructLayout(LayoutKind.Sequential)]
18 protected class POINT
19 {
20 public int x;
21 public int y;
22 }
23
24 [StructLayout(LayoutKind.Sequential)]
25 protected class MouseHookStruct
26 {
27 public POINT pt;
28 public int hwnd;
29 public int wHitTestCode;
30 public int dwExtraInfo;
31 }
32
33 [StructLayout(LayoutKind.Sequential)]
34 protected class MouseLLHookStruct
35 {
36 public POINT pt;
37 public int mouseData;
38 public int flags;
39 public int time;
40 public int dwExtraInfo;
41 }
42
43 [StructLayout(LayoutKind.Sequential)]
44 protected class KeyboardHookStruct
45 {
46 public int vkCode;
47 public int scanCode;
48 public int flags;
49 public int time;
50 public int dwExtraInfo;
51 }
52
53 [DllImport("user32.dll", CharSet = CharSet.Auto,
54 CallingConvention = CallingConvention.StdCall,
55 SetLastError = true)]
56 protected static extern int setWindowsHookEx(
57 int idHook,
58 HookProc lpfn,
59 IntPtr hMod,
60 int dwThreadId);
61
62 [DllImport("user32", CharSet = CharSet.Auto,
63 CallingConvention = CallingConvention.StdCall,
64 SetLastError = true)]
65 protected static extern int UnhookWindowsHookEx(int idHook);
66
67 [DllImport("user32", CharSet = CharSet.Auto,
68 CallingConvention = CallingConvention.StdCall)]
69 protected static extern int CallNextHookEx(
70 int idHook,
71 int nCode,
72 int wParam,
73 IntPtr lParam);
74
75 [DllImport("user32")]
76 protected static extern int ToAscii(
77 int uVirtKey,
78 int uScanCode,
79 byte[] lpbKeyState,
80 byte[] lpwTransKey,
81 int fuState);
82
83 [DllImport("user32")]
84 protected static extern int GetKeyboardState(byte[] pbKeyState);
85
86 [DllImport("user32",CharSet=CharSet.Auto,CallingConvention =CallingConvention.StdCall)]
87 protected static extern short GetKeyState(int vKey);
88
89 protected delegate int HookProc(int nCode, int wParam, IntPtr lParam);
90
91 protected const int WH_MOUSE_LL = 14;
92 protected const int WH_KEYBOARD_LL = 13;
93
94 protected const int WH_MOUSE = 7;
95 protected const int WH_KEYBOARD = 2;
96 protected const int WH_MOUSEMOVE = 0x200;
97 protected const int WH_LBUTTONDOWN = 0x201;
98 protected const int WH_RBUTTONDOWN = 0x204;
99 protected const int WH_MBUTTONDOWN = 0x207;
100 protected const int WH_LBUTTONUP = 0x202;
101 protected const int WH_RBUTTONUP = 0x205;
102 protected const int WH_MBUTTONUP = 0x208;
103 protected const int WH_LBUTTONCLICK = 0x203;
104 protected const int WH_RBUTTONCLICK = 0x206;
105 protected const int WH_MBUTTONCLICK = 0x209;
106 protected const int WH_MOUSEWHEEL = 0x020a;
107 protected const int WH_KEYDOWN = 0x100;
108 protected const int WH_KEYUP = 0x101;
109 protected const int WH_SYSKEYDOWN = 0x104;
110 protected const int WH_SYSKEYUP = 0x105;
111
112 protected const byte VK_SHIFTT = 0x10;
113 protected const byte VK_CAPITAL = 0x14;
114 protected const byte VK_NUMLOCK = 0x90;
115
116 protected const byte VK_LSHIFT = 0xa0;
117 protected const byte VK_RSHIFT = 0xa1;
118 protected const byte VK_LCONTROL = 0xa2;
119 protected const byte VK_RCONTROL = 0xa3;
120 protected const byte VK_LALT = 0xa4;
121 protected const byte VK_RALT = 0xa5;
122
123 protected const byte LLKHF_ALTDOWN = 0x20;
124
125 #endregion
126
127 #region Private Variables
128 protected int _hookType;
129 protected int _handleToHook;
130 protected bool _isStarted;
131 protected HookProc _hookCallback;
132 #endregion
133
134
135
136
137 }
138 }
139 */
140
141
142
143
144
145 //写log文件
146 /*
147 using System;
148 using System.Collections.Generic;
149 using System.Linq;
150 using System.Text;
151 using System.Threading.Tasks;
152 //using System.Diagnostics;
153 using System.IO;
154
155
156 namespace ConsoleApplication1
157 {
158 class Program
159 {
160 //
161 static void Main(string[] args)
162 {
163
164 //可以作为修改的内容
165 int i;
166 int j;
167
168 //作除法的设置
169 try
170 {
171 i = 0;
172 j = 2 / i;
173 }
174 catch (Exception ex)
175 {
176 WriteLog(ex);//set ex
177 }
178 finally
179 {
180 j = 2 / 1;
181 Console.Write(j);
182 Console.ReadLine();
183 }
184 }
185
186 ///<summary>
187 ///打印异常
188 ///</summary>
189 ///<param name="ex">异常</param>
190 ///<param name="LogAddress">日志文件地址</param>
191 public static void WriteLog(Exception ex, string LogAddress = "")
192 {
193 //if日志文件为空,默认在Debug目录下建立
194 //建立日志文件的标题
195 if (LogAddress == "")
196 {
197 LogAddress = Environment.CurrentDirectory + '\\' +
198 DateTime.Now.Year + '-' +
199 DateTime.Now.Month + '-' +
200 DateTime.Now.Day + "_Log.log";
201 }
202
203 //将异常信息输出到文件
204 StreamWriter fs = new StreamWriter(LogAddress, true);
205 fs.WriteLine("当前信息:" + DateTime.Now.ToString());
206 fs.WriteLine("异常信息:" + ex.Message);
207 fs.WriteLine("异常信息:" + ex.Source);
208 fs.WriteLine("调用堆栈:\n" + ex.StackTrace.Trim());
209 fs.WriteLine("触发方法:" + ex.TargetSite);
210 fs.WriteLine();
211 fs.Close();//释放WriteLine内存
212 }
213 }
214 }
215 */
216
217 //2018-10-10
218 //using events
219 //创建一个委托
220 //将创建委托与事件关联
221 //编写c#事件处理程序
222 //生成委托实例
223 //委托实例添加到产生事件对象的事件列表中,为订阅事件
224 //
225 /*
226 using System;
227 using System.Collections.Generic;
228 using System.Linq;
229 using System.Text;
230
231 namespace Example_EventTest
232 {
233 class Judgment
234 {
235 //define 委托
236 public delegate void delegateRun();
237 //define event
238 public event delegateRun eventRun;
239 //引发事件的方法
240 public void Begin()
241 {
242 eventRun();//被引发的事件
243 }
244
245 }
246 class RunSports
247 {
248 //define deal with events ways
249 public void Run()
250 {
251 Console.WriteLine("start and later end");
252 }
253 }
254 class Program
255 {
256 static void Main(string[] args)
257 {
258 RunSports runsport = new RunSports();//实例化事件发布者
259 Judgment judgment = new Judgment();//实例化事件订阅者
260 //订阅事件
261 judgment.eventRun +=new Judgment.delegateRun(runsport.Run);
262 //引发事件
263 judgment.Begin();
264 Console.ReadKey();
265
266 }
267 }
268 }
269 */
270
271
272 using System;
273 using System.IO;
274
275 namespace BoilerEventApp1
276 {
277 //boiler类
278 class Boiler
279 {
280 private int temp;
281 private int pressure;
282 public Boiler(int t, int p)
283 {
284 temp = t;
285 pressure = p;
286 }
287 //temp,pressure
288 public int getTemp()
289 {
290 return temp;
291 }
292 public int getPressure()
293 {
294 return pressure;
295 }
296 }
297
298 //事件发布器
299 class DelegateBoilerEvent
300 {
301 public delegate void BoilerLogHandler(string status);
302 //委托定义事件
303 public event BoilerLogHandler BoilerEventLog;
304 public void LogProgress()
305 {
306 string remarks="o.k";
307 Boiler b = new Boiler(100, 12);
308 int t = b.getTemp();
309 int p = b.getPressure();
310 if (t > 150 || t < 80 || p < 12 || p > 15)
311 {
312 remarks = "start one access";
313 }
314 //output message
315 OnBoilerEventLog("Logging Info:\n");
316 OnBoilerEventLog("Temparature"+t+"\nPressure:"+p);
317 OnBoilerEventLog("Message:"+remarks);
318 }
319 protected void OnBoilerEventLog(string message)
320 {
321 if (BoilerEventLog != null)
322 {
323 BoilerEventLog(message);
324 }
325 }
326 }
327
328 //保留该类写入日志文件
329 class BoilerInfoLogger
330 {
331 FileStream fs;
332 StreamWriter sw;
333 public BoilerInfoLogger(string filename)
334 {
335 fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
336 sw = new StreamWriter(fs);
337 }
338 public void Logger(string info)
339 {
340 sw.WriteLine(info);
341 }
342 public void Close()
343 {
344 sw.Close();
345 fs.Close();
346 }
347 }
348
349 //事件订阅器
350 public class RecordBoilerInfo
351 {
352 static void Logger(string info)
353 {
354 Console.WriteLine(info);
355 }
356 //Main code
357 static void Main(string[] args)
358 {
359 //location
360 BoilerInfoLogger filelog = new BoilerInfoLogger("e:\\boiler.txt");
361 DelegateBoilerEvent boilerEvent = new DelegateBoilerEvent();
362 boilerEvent.BoilerEventLog+=new DelegateBoilerEvent.BoilerLogHandler(Logger);
363 boilerEvent.BoilerEventLog+=new DelegateBoilerEvent.BoilerLogHandler(filelog.Logger);
364 boilerEvent.LogProgress();
365 Console.ReadLine();
366 filelog.Close();
367 }
368 }
369 }