当我执行热键 Alt + S 时, windowFirst = FindWindow("WSWINDOW", null); 这这句执行了,但 keybd_event((byte)Keys.F7, 0, 0, 0); //按下
keybd_event((byte)Keys.F7, 0, 2, 0); //释放
timer1.Enabled = true;
这三句都没有执行,热键 Alt + E 时也是一样的。代码我贴在下面,麻烦大家帮看看,谢谢
public partial class Form1 : Form
{ IntPtr windowFirst;
public Form1()
{
InitializeComponent();
} //激活窗口的 API 函数
[DllImport("USER32.DLL")]
public static extern IntPtr FindWindow(string className, string WindowName); [DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk, //虚拟键值
byte bScan,// 一般为0
int dwFlags, //这里是整数类型 0 为按下,2为释放
int dwExtraInfo //这里是整数类型 一般情况下设成为 0
);
private void timer1_Tick(object sender, EventArgs e)
{
IntPtr windowLast = FindWindow("WSWINDOW", null); if ((int)windowLast != 0)
{ keybd_event((byte)Keys.F11, 0, 0, 0); //按下
keybd_event((byte)Keys.F11, 0, 2, 0); //释放 keybd_event((byte)Keys.F7, 0, 0, 0); //按下
keybd_event((byte)Keys.F7, 0, 2, 0); //释放 windowFirst = windowLast; }
else
{ label1.Text = "当前句柄是:" + windowLast.ToString();
}
}
//////////////////////////////////// 注册热键 //////////////////////////////////////////
[DllImport("user32.dll")] //申明API函数
public static extern bool RegisterHotKey(
IntPtr hWnd,
int id,
uint fsModifiers,
Keys vk
[DllImport("user32.dll")] //申明 卸载热键的 API 函数
public static extern bool UnregisterHotKey(IntPtr hWnd, int id); private void Form1_Load(object sender, EventArgs e)
{
RegisterHotKey(Handle, 1, 1, Keys.S); //注册定义热键一为:Alt+S。
RegisterHotKey(Handle, 2, 1, Keys.E); //注册定义热键二为:Alt+E。 MessageBox.Show(" 启动完后,打开游戏,按 Alt+S 开始登陆,按 Alt+E 停止登陆! ");
} protected override void WndProc(ref Message m)//监视Windows消息
{
const int WM_HOTKEY = 0x0312;//如果m.Msg的值为0x0312那么表示用户按下了热键
switch (m.Msg)
{
case WM_HOTKEY:
ProcessHotkey(m);//按下热键时调用ProcessHotkey()函数
break;
}
base.WndProc(ref m); //将系统消息传递自父类的WndProc
} private void ProcessHotkey(Message m) //按下设定的键时调用该函数
{
IntPtr id = m.WParam; //IntPtr用于表示指针或句柄的平台特定类型
string sid = id.ToString();
switch (sid)
{
case "1":
windowFirst = FindWindow("WSWINDOW", null);
keybd_event((byte)Keys.F7, 0, 0, 0); //按下
keybd_event((byte)Keys.F7, 0, 2, 0); //释放
timer1.Enabled = true;
break;
case "2":
label1.Text = "";
keybd_event((byte)Keys.F11, 0, 0, 0); //按下
keybd_event((byte)Keys.F11, 0, 2, 0); //释放
timer1.Enabled = false;
MessageBox.Show("停止");
break;
}
}
}
public enum KeyModifiers //组合键枚举
{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
Windows = 8
}
keybd_event((byte)Keys.F7, 0, 2, 0); //释放
timer1.Enabled = true;
这三句都没有执行,热键 Alt + E 时也是一样的。代码我贴在下面,麻烦大家帮看看,谢谢
public partial class Form1 : Form
{ IntPtr windowFirst;
public Form1()
{
InitializeComponent();
} //激活窗口的 API 函数
[DllImport("USER32.DLL")]
public static extern IntPtr FindWindow(string className, string WindowName); [DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk, //虚拟键值
byte bScan,// 一般为0
int dwFlags, //这里是整数类型 0 为按下,2为释放
int dwExtraInfo //这里是整数类型 一般情况下设成为 0
);
private void timer1_Tick(object sender, EventArgs e)
{
IntPtr windowLast = FindWindow("WSWINDOW", null); if ((int)windowLast != 0)
{ keybd_event((byte)Keys.F11, 0, 0, 0); //按下
keybd_event((byte)Keys.F11, 0, 2, 0); //释放 keybd_event((byte)Keys.F7, 0, 0, 0); //按下
keybd_event((byte)Keys.F7, 0, 2, 0); //释放 windowFirst = windowLast; }
else
{ label1.Text = "当前句柄是:" + windowLast.ToString();
}
}
//////////////////////////////////// 注册热键 //////////////////////////////////////////
[DllImport("user32.dll")] //申明API函数
public static extern bool RegisterHotKey(
IntPtr hWnd,
int id,
uint fsModifiers,
Keys vk
[DllImport("user32.dll")] //申明 卸载热键的 API 函数
public static extern bool UnregisterHotKey(IntPtr hWnd, int id); private void Form1_Load(object sender, EventArgs e)
{
RegisterHotKey(Handle, 1, 1, Keys.S); //注册定义热键一为:Alt+S。
RegisterHotKey(Handle, 2, 1, Keys.E); //注册定义热键二为:Alt+E。 MessageBox.Show(" 启动完后,打开游戏,按 Alt+S 开始登陆,按 Alt+E 停止登陆! ");
} protected override void WndProc(ref Message m)//监视Windows消息
{
const int WM_HOTKEY = 0x0312;//如果m.Msg的值为0x0312那么表示用户按下了热键
switch (m.Msg)
{
case WM_HOTKEY:
ProcessHotkey(m);//按下热键时调用ProcessHotkey()函数
break;
}
base.WndProc(ref m); //将系统消息传递自父类的WndProc
} private void ProcessHotkey(Message m) //按下设定的键时调用该函数
{
IntPtr id = m.WParam; //IntPtr用于表示指针或句柄的平台特定类型
string sid = id.ToString();
switch (sid)
{
case "1":
windowFirst = FindWindow("WSWINDOW", null);
keybd_event((byte)Keys.F7, 0, 0, 0); //按下
keybd_event((byte)Keys.F7, 0, 2, 0); //释放
timer1.Enabled = true;
break;
case "2":
label1.Text = "";
keybd_event((byte)Keys.F11, 0, 0, 0); //按下
keybd_event((byte)Keys.F11, 0, 2, 0); //释放
timer1.Enabled = false;
MessageBox.Show("停止");
break;
}
}
}
public enum KeyModifiers //组合键枚举
{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
Windows = 8
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货