111,088
社区成员




private const int WM_HOTKEY = 0x312; //窗口消息-热键
private const int HOT_KEY_ID = 8451476;
[DllImport("user32.dll")]
public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk);
[DllImport("user32.dll")]
private static extern int UnregisterHotKey(IntPtr hwnd, int id);
public Form_AutoInputAlipayPwd()
{
InitializeComponent();
}
private void Form_AutoInputAlipayPwd_Activated(object sender, EventArgs e)
{
RegisterHotKey(Handle, HOT_KEY_ID, 1 | 2, (UInt32)Keys.M); //注册热键,Alt=1、Ctrl=2
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_HOTKEY && m.WParam.ToInt32() == HOT_KEY_ID)
{
SendKeys.Send("abcdefghijklmnopqrstuvwxyz");
}
}
private void Form_AutoInputAlipayPwd_FormClosing(object sender, FormClosingEventArgs e)
{
UnregisterHotKey(Handle, HOT_KEY_ID); //销毁热键
}
public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}
private const int ID_HOTKEY_STATE = 0x01;
private const int ID_HOTKEY_TEST = 0x02;//第二个热键
private void Form1_Load(object sender, EventArgs e) {
if (!Win32.RegisterHotKey(this.Handle, ID_HOTKEY_STATE,
Win32.MOD_CONTROL | Win32.MOD_ALT, (uint)Keys.H)) {
MessageBox.Show("热键注册失败");
}
if (!Win32.RegisterHotKey(this.Handle, ID_HOTKEY_TEST,
Win32.MOD_CONTROL | Win32.MOD_ALT, (uint)Keys.J)) {
MessageBox.Show("热键注册失败");
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
Win32.UnregisterHotKey(this.Handle, ID_HOTKEY_STATE);
Win32.UnregisterHotKey(this.Handle, ID_HOTKEY_TEST);
}
//重写消息处理函数
protected override void WndProc(ref Message m) {
switch ((uint)m.Msg) {
case Win32.WM_HOTKEY://如果注册成功 按下热键的时候会收到消息
switch (m.WParam.ToInt32()) {//wParam中是热键的注册ID
case ID_HOTKEY_STATE:
if (this.WindowState == FormWindowState.Minimized) {
this.WindowState = FormWindowState.Normal;
}
this.Activate();
break;
case ID_HOTKEY_TEST:
MessageBox.Show("第二个热键被点下");
break;
}
break;
}
base.WndProc(ref m);
}
}
剔除了 api 申明部分的代码<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>
也不行,新增这个后,电脑里面的千牛和QQ尽然来回乱七八糟跳,跳的都无法操作电脑了。我已经看过了千牛和QQ里面的相同热键已经被我关闭了。
然后改成<appSettings>
<add key="SendKeys" value="JournalHook"/>
</appSettings>
就和现状一样:只能使用一次。
我断点了一下,每次都会执行热键,看来问题就出在SendKeys上面了。坛子里有相关帖子《SendKeys.Send() 不稳定》http://bbs.csdn.net/topics/370169013