解决方案 »
- ASP.NET ,PHP等能不能获得客户端的网卡地址?
- aspx文件中已经有TextBox控件 但aspx.cs里面却说不存在
- C# 获得窗口句柄??
- 如何根据条件决定是否显示自己的登录窗体?
- 各位谁弄过西蒙子s7-200,用.net和他通讯,传送指令,哪位好心大哥给点资料
- 如果判断是不是从指定页面过来的?
- 怎样用C#开发一个 显示微博内容的 自定义控件
- 高分求一个带阴影的panel......内附效果图
- 大家看过csdn主页上的一篇文章了没有啊?关于一个女程序员创业的,来谈谈感想!散分!
- vs.net简直把我装郁闷了!
- Winform中显示倒计时器
- 如何从Form1设置Form2中的计时器可用
{
if (e.KeyCode==Keys.Enter)
{
SendKeys.Send("{TAB}"); //输入tab
e.Handled=ture;
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace WindowsApplication1
{
public partial class AutoDeleteMessageBox : Form
{
[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); public const int WM_CLOSE = 0x10; public AutoDeleteMessageBox()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
StartKiller();
MessageBox.Show("3秒钟后自动关闭MessageBox窗口", "MessageBox");
} private void StartKiller()
{
Timer timer = new Timer();
timer.Interval = 3000; //3秒启动
timer.Tick += new EventHandler(Timer_Tick);
timer.Start();
} private void Timer_Tick(object sender, EventArgs e)
{
KillMessageBox();
//停止Timer
((Timer)sender).Stop();
} private void KillMessageBox()
{
//按照MessageBox的标题,找到MessageBox的窗口
IntPtr ptr = FindWindow(null, "MessageBox");
if (ptr != IntPtr.Zero)
{
//找到则关闭MessageBox窗口
PostMessage(ptr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
}
}
}
}
我在程序里面找不到这个
static int hHook = 0;
public const int WH_KEYBOARD_LL = 13;
//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
HookProc KeyBoardHookProcedure;
//键盘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", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
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", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
//调用下一个钩子
public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", CharSet = CharSet.Auto,CallingConvention = CallingConvention.StdCall)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
#endregion
#region 自定义事件
public void Hook_Start()
{
// 安装键盘钩子
if (hHook == 0)
{
KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
//hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
Process curProcess = Process.GetCurrentProcess();
ProcessModule curModule = curProcess.MainModule; hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure,
GetModuleHandle(curModule.ModuleName), 0); //KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
//hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
// KeyBoardHookProcedure,
// Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 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;
this.label1.Text = "";
}
//如果去掉钩子失败.
if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
} //这里可以添加自己想要的信息处理
public int KeyBoardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0)
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct)); this.label1.Text += GetUnicode(kbh.vkCode); if (kbh.vkCode == (int)Keys.Enter)
{
this.label1.Text += "\r\n";
} }
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
#endregion
/*
[STAThread]
public static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
*/ public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
} void Start_BtnClick(object sender, EventArgs e)
{
this.Hook_Start();
} void Clear_BtnClick(object sender, EventArgs e)
{
this.Hook_Clear();
} public string GetUnicode(int i)
{
char c = (char)i; return c.ToString();
}
我想在红色的这里,区分是我输入的还是模拟键盘输入的,请帮忙看一下 谢谢
{
if (nCode >= 0)
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct)); this.label1.Text += GetUnicode(kbh.vkCode); if (kbh.vkCode == (int)Keys.Enter)
{
this.label1.Text += "\r\n";
} }
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
public int KeyBoardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0)
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
if((kbh.flags & 0x10) != 0) //LLKHF_INJECTED = 0x10;
{
//这是模拟按键
return 1;//全部拦截,也可以进行键值判断后决定是否拦截
}
else
{
//这是真实按键
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}