111,126
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Diagnostics;
namespace pigTime
{
public partial class Form1 : Form
{
//委托
public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
static int hHook = 0;
public const int WH_KEYBOARD_LL = 13;
//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
HookProc KeyBoardHookProcedure;
//快捷按键1设定存储
public static string qkey1 = "";
//快捷按键2设定存储
public static string qkey2 = "";
//猪圈国家点
public static int currCity = 0;
//刷新点名称
public static string currPoint = "";
//设定时间间隔
public static int tmjg = 0;
//设定误差时间
public static int wctm = 0;
private static int hour, minute, second, millsecond;
//键盘Hook结构函数
[StructLayout(LayoutKind.Sequential)]
public class KeyBoardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
#region DllImport
//设置钩子
[DllImport("user32.dll")]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
//抽掉钩子
public static extern bool UnhookWindowsHookEx(int idHook);
[DllImport("user32.dll")]
//调用下一个钩子
public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
[DllImport("kernel32.dll")]
public static extern int GetCurrentThreadId();
[DllImport("kernel32.dll")]
public static extern IntPtr GetModuleHandle(string name);
#endregion
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: 这行代码将数据加载到表“dbDataSet.TimeData”中。您可以根据需要移动或移除它。
this.timeDataTableAdapter.Fill(this.dbDataSet.TimeData);
// TODO: 这行代码将数据加载到表“dbDataSet.itemData”中。您可以根据需要移动或移除它。
this.itemDataTableAdapter.Fill(this.dbDataSet.itemData);
this.smallItemDataTableAdapter.Fill(this.dbDataSet.SmallItemData);
comboBox1.SelectedIndex = 6;
int sitemid = int.Parse(comboBox1.SelectedValue.ToString());
currCity = sitemid;
DataRowCollection drc = this.smallItemDataTableAdapter.GetDataBy(sitemid).Rows;
label4.Text = drc[0][1].ToString();
label5.Text = drc[1][1].ToString();
label6.Text = drc[0][1].ToString();
label7.Text = drc[1][1].ToString();
textBox3.Text = drc[0]["Qkey"].ToString();
textBox4.Text = drc[1]["Qkey"].ToString();
qkey1 = drc[0]["Qkey"].ToString();
qkey2 = drc[1]["Qkey"].ToString();
tmjg = int.Parse(textBox1.Text.Trim().ToString());
wctm = int.Parse(textBox2.Text.Trim().ToString());
Hook_Start();
}
#region 自定义事件
public void Hook_Start()
{
// 安装键盘钩子
if (hHook == 0)
{
KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
KeyBoardHookProcedure,
GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
//如果设置钩子失败.
if (hHook == 0)
{
Hook_Clear();
//throw new Exception("设置Hook失败!");
}
}
}
//取消钩子事件
public void Hook_Clear()
{
bool retKeyboard = true;
if (hHook != 0)
{
retKeyboard = UnhookWindowsHookEx(hHook);
hHook = 0;
}
//如果去掉钩子失败.
if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
}
//这里可以添加自己想要的信息处理
public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
if (getHookProc(qkey1, kbh.vkCode, (int)Control.ModifierKeys))
{
MessageBox.Show("测试1!");//在这里执行timer1.Start()方法 无法让计时器显示,郁闷
timer1.Start();
return 1;
}
if (getHookProc(qkey2, kbh.vkCode, (int)Control.ModifierKeys))
{
MessageBox.Show("测试2!");
return 1;
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
#endregion
/// <summary>
/// 判断组合按键是否正确
/// </summary>
/// <param name="qk">快捷键设定</param>
/// <param name="vkc">监听到的按键</param>
/// <param name="modk">监听到的指示键</param>
/// <returns></returns>
public static bool getHookProc(string qk, int vkc, int modk)
{
//解析设定键
qk = qk.Trim();
string[] aqk = qk.Split('+');
string strvk = aqk[aqk.Length - 1].ToString();
int mkCount = 0;
if (aqk.Length > 1)
{
for (int i = 0; i < aqk.Length - 1; i++)
{
if (aqk[i].Trim() == "Ctrl")
{
mkCount = mkCount + (int)Keys.Control;
}
if (aqk[i].Trim() == "Alt")
{
mkCount = mkCount + (int)Keys.Alt;
}
if (aqk[i].Trim() == "Shift")
{
mkCount = mkCount + (int)Keys.Shift;
}
}
}
if (mkCount > 0)
{
if (vkc == System.Text.Encoding.ASCII.GetBytes(strvk)[0] && modk == mkCount)
{
return true;
}
}
else
{
if (vkc == System.Text.Encoding.ASCII.GetBytes(strvk)[0])
{
return true;
}
}
return false;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Hook_Clear();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (second == 0)
{
if (minute == 0)
{
if (hour == 0)
{
timer1.Stop();//时间到
return;
}
else
{
hour--;
minute = 59;
second = 59;
}
}
else
{
minute--;
second = 59;
}
}
else
{
second--;
}
lbTime.Text = hour.ToString() + ":" + minute.ToString() + ":" + second.ToString();
textBox6.Text = hour.ToString() + ":" + minute.ToString() + ":" + second.ToString();
}
}
}