using System.Windows.Forms;
using UAS_MES_NEW.CustomControl.ButtonUtil;
using UAS_MES_NEW.CustomControl.ClickPicBox;
using UAS_MES_NEW.CustomControl.CustomCheckBox;
using UAS_MES_NEW.CustomControl.TextBoxWithIcon;
using UAS_MES_NEW.Entity;
namespace UAS_MES_NEW.PublicMethod
{
///
/// Author zhangz 2016/12/30
/// 全局事件处理,通过句柄获取触发事件的控件
/// 结合捕获的全局的键盘事件来验证用户进行的操作
///
class GlobalEventsHandler : IMessageFilter
{
public static Keys keycode;
//鼠标左键点击
public const int WM_LBUTTONDOWN = 0x0201;
//键盘敲击事件
public const int WM_KEYDOWN = 0x100;
private MessageBoxButtons messButton = MessageBoxButtons.OK;
private MessageBoxIcon messIcon = MessageBoxIcon.Exclamation;
string Type = "";
string Type1 = "";
public bool PreFilterMessage(ref Message m)
{
//通过句柄去获取具体触发事件的控件
Control c = Control.FromHandle(m.HWnd);
//可进行数据操作的控件需要进行权限的判断,结合WM_LBUTTONDOWN对按钮进行判断
if (c != null && m.Msg == WM_LBUTTONDOWN && (c is NormalButton || c is DeleteButton || c is Button || c is ClickPicBox || c is SearchTextBox||c is CustomCheckBox))
{
//获取控件的类型
return CheckControlPower(c);
}
//集合WM_KEYDOWN对输入框进行判断
else if (c != null && m.Msg == WM_KEYDOWN && (c is EnterTextBox || c is TextBox))
{
string ControlType = c.GetType().ToString();
switch (ControlType.Substring(ControlType.LastIndexOf(".")))
{
case "EnterTextBox": break;
default: break;
}
//在TextBox或者EnterBox中按下了回车键
if (keycode == Keys.Return)
{
keycode = Keys.None;
return CheckControlPower(c);
}
else
return false;
}
else
return false;
}
///
/// 返回True表示消息已处理,不再往后传递
/// 返回False表示消息未处理,后续程序处理此事件
///
///
///
private bool CheckControlPower(Control c)
{
//弹出的小窗体不做校验
if (c.FindForm().Tag.ToString() == "ShowDialogWindow")
return false;
//获取控件的类型
string ControlType = c.GetType().ToString();
switch (ControlType.Substring(ControlType.LastIndexOf(".") + 1))
{
case "NormalButton":
LogManager.DoLog(c.FindForm().Text + "窗体" + "点击按钮【" + c.Text + "】");
//判断是否拥有全部权限
if ((c as NormalButton).AllPower != null)
{
Type = "IFALL";
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
return false;
}
if ((c as NormalButton).Power != null)
{
switch ((c as NormalButton).Power.ToString().ToUpper())
{
case "IFREAD":
Type = "IFREAD";
Type1 = "读取";
break;
case "IFWRITE":
Type = "IFWRITE";
Type1 = "修改";
break;
case "IFDELETE":
Type = "IFDELETE";
Type1 = "删除";
break;
case "IFSPECIAL":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFSPECIAL"])
return false;
else
{
MessageBox.Show("此操作需要特殊权限", "提示", messButton, messIcon);
return true;
}
default:
break;
}
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
return false;
else
{
MessageBox.Show("没有" + Type1 + "数据的权限", "提示", messButton, messIcon);
return true;
}
}
break;
case "ClickPicBox":
if ((c as ClickPicBox).AllPower != null)
{
Type = "IFALL";
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
return false;
}
if ((c as ClickPicBox).Power != null && (c as ClickPicBox).Power.ToString() != "")
{
LogManager.DoLog(c.FindForm().Text + "窗体" + "点击按钮【" + c.Text + "】");
switch ((c as ClickPicBox).Power.ToString().ToUpper())
{
case "IFREAD":
Type = "IFREAD";
Type1 = "读取";
break;
case "IFWRITE":
Type = "IFWRITE";
Type1 = "修改";
break;
case "IFDELETE":
Type = "IFDELETE";
Type1 = "删除";
break;
case "IFSPECIAL":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFSPECIAL"])
return false;
else
{
MessageBox.Show("此操作需要特殊权限", "提示", messButton, messIcon);
return true;
}
default: break;
}
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
return false;
else
{
MessageBox.Show("没有" + Type1 + "数据的权限", "提示", messButton, messIcon);
return true;
}
}
break;
case "SearchTextBox":
if ((c as SearchTextBox).AllPower != null)
{
Type = "IFALL";
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
return false;
}
if ((c as SearchTextBox).Power != null)
{
LogManager.DoLog(c.FindForm().Text + "窗体" + "输入框【" + c.Text + "】");
switch ((c as SearchTextBox).Power.ToString().ToUpper())
{
case "IFREAD":
Type = "IFREAD";
Type1 = "读取";
break;
case "IFWRITE":
Type = "IFWRITE";
Type1 = "修改";
break;
case "IFDELETE":
Type = "IFDELETE";
Type1 = "删除";
break;
case "IFSPECIAL":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFSPECIAL"])
return false;
else
{
MessageBox.Show("此操作需要特殊权限", "提示", messButton, messIcon);
return true;
}
default: break;
}
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
{
return false;
}
else
{
MessageBox.Show("没有" + Type1 + "数据的权限", "提示", messButton, messIcon);
return true;
}
}
break;
case "DeleteButton":
if ((c as DeleteButton).AllPower != null)
{
Type = "IFALL";
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
return false;
}
if ((c as DeleteButton).Power != null)
{
LogManager.DoLog(c.FindForm().Text + "窗体" + "点击按钮【" + c.Text + "】");
switch ((c as DeleteButton).Power.ToString().ToUpper())
{
case "IFREAD":
Type = "IFREAD";
Type1 = "读取";
break;
case "IFWRITE":
Type = "IFWRITE";
Type1 = "修改";
break;
case "IFDELETE":
Type = "IFDELETE";
Type1 = "删除";
break;
case "IFSPECIAL":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFSPECIAL"])
return false;
else
{
MessageBox.Show("此操作需要特殊权限", "提示", messButton, messIcon);
return true;
}
default: break;
}
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
return false;
else
{
MessageBox.Show("没有" + Type1 + "数据的权限", "提示", messButton, messIcon);
return true;
}
}
break;
case "Button":
if (c.Tag != null)
{
LogManager.DoLog(c.FindForm().Text + "窗体" + "点击按钮【" + c.Text + "】");
switch (c.Tag.ToString().ToUpper())
{
case "IFREAD":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFREAD"])
return false;
else
{
MessageBox.Show("没有读取数据的权限", "提示", messButton, messIcon);
return true;
}
case "IFWRITE":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFWRITE"])
return false;
else
{
MessageBox.Show("没有修改数据的权限", "提示", messButton, messIcon);
return true;
}
case "IFDELETE":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFDELETE"])
return false;
else
{
MessageBox.Show("没有删除数据的权限", "提示", messButton, messIcon);
return true;
}
case "IFSPECIAL":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFSPECIAL"])
return false;
else
{
MessageBox.Show("此操作需要特殊权限", "提示", messButton, messIcon);
return true;
}
default: break;
}
}
break;
case "EnterTextBox":
if ((c as EnterTextBox).AllPower != null)
{
Type = "IFALL";
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
return false;
}
if ((c as EnterTextBox).Power != null)
{
LogManager.DoLog(c.FindForm().Text + "窗体" + "输入框【" + c.Text + "】");
switch ((c as EnterTextBox).Power.ToString().ToUpper())
{
case "IFREAD":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFREAD"])
return false;
else
{
MessageBox.Show("没有读取数据的权限", "提示", messButton, messIcon);
return true;
}
case "IFWRITE":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFWRITE"])
return false;
else
{
MessageBox.Show("没有修改数据的权限", "提示", messButton, messIcon);
return true;
}
case "IFDELETE":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFDELETE"])
return false;
else
{
MessageBox.Show("没有删除数据的权限", "提示", messButton, messIcon);
return true;
}
case "IFSPECIAL":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFSPECIAL"])
return false;
else
{
MessageBox.Show("此操作需要特殊权限", "提示", messButton, messIcon);
return true;
}
default: break;
}
}
break;
case "CustomCheckBox":
if ((c as CustomCheckBox).AllPower != null)
{
Type = "IFALL";
if (SystemInf.Caller[c.FindForm().Tag.ToString()][Type])
return false;
}
if ((c as CustomCheckBox).Power != null)
{
LogManager.DoLog(c.FindForm().Text + "窗体" + "输入框【" + c.Text + "】");
switch ((c as CustomCheckBox).Power.ToString().ToUpper())
{
case "IFREAD":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFREAD"])
return false;
else
{
MessageBox.Show("没有读取数据的权限", "提示", messButton, messIcon);
return true;
}
case "IFWRITE":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFWRITE"])
return false;
else
{
MessageBox.Show("没有修改数据的权限", "提示", messButton, messIcon);
return true;
}
case "IFDELETE":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFDELETE"])
return false;
else
{
MessageBox.Show("没有删除数据的权限", "提示", messButton, messIcon);
return true;
}
case "IFSPECIAL":
if (SystemInf.Caller[c.FindForm().Tag.ToString()]["IFSPECIAL"])
return false;
else
{
MessageBox.Show("此操作需要特殊权限", "提示", messButton, messIcon);
return true;
}
default: break;
}
}
break;
default: break;
}
return false;
}
}
}