110,537
社区成员
发帖
与我相关
我的任务
分享
private static int MakeKeyLparam(byte VirtualKey, bool KeyDown) {
String Firstbyte="";
//lparam参数的24-31位
if (KeyDown == true){
Firstbyte = "00";
}else{
int First = 12 * 16;
Firstbyte = First.ToString();
}
int Scancode=0;//获得键的扫描码
Scancode = MapVirtualKey(VirtualKey, 0);
String Secondbyte="";//lparam参数的16-23位,即虚拟键扫描码
String Temp="00"+Scancode.ToString();
Secondbyte=Temp.Substring(Temp.Length-2,2);
String s = Firstbyte+Secondbyte+"0001"; //0001为lparam参数的0-15位,即发送次数和其它扩展信息
int Back=0;
int.TryParse(s,out Back);
return Back;
}
/// <summary>
/// 按键
/// </summary>
/// <param name=”hWnd”>按键窗口句柄</param>
/// /// <param name=”key”>按键</param>
public static void KeyDown(IntPtr hWnd, Keys key)
{ //MyAlert.Alert(MakeKeyLparam((byte)key, true));
PostMessage(hWnd, WM_KEYDOWN, (IntPtr)key, (IntPtr)MakeKeyLparam((byte)key, true));
System.Threading.Thread.Sleep(100);
PostMessage(hWnd, WM_KEYUP, (IntPtr)key, (IntPtr)MakeKeyLparam((byte)key, false));
}
//注册热键(窗体句柄,热键ID,辅助键,实键)
RegisterHotKey(this.Handle, 225, 0, Keys.VolumeUp);
这个函数的意思是不是把 实键 改成 热键??
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0312: //这个是window消息定义的注册的热键消息
if (m.WParam.ToString().Equals("225")) //提高音量热键
{
MessageBox.Show("你按了VolumeUp ");
}
这个就是把 225 键改成了 volumeup 键? 如果我想给后台运行的某个窗口发送 ctrl+a 应该怎么写呢? private void Form1_Load(object sender, EventArgs e)
{
//窗体锚定在0,0
this.Location = new Point(-100, -100);
this.Height = 20;
this.Width = 20;
this.Activate();
//注册热键(窗体句柄,热键ID,辅助键,实键)
RegisterHotKey(this.Handle, 225, 0, Keys.VolumeUp);
RegisterHotKey(this.Handle, 226, 0, Keys.VolumeDown);
RegisterHotKey(this.Handle, 227, 0, Keys.VolumeMute);
RegisterHotKey(this.Handle, 227, 0, Keys.Control);
}
this.Handle 改成我想发送的窗体的句柄可以不protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0312:
switch (m.WParam.ToString())
{
case "热键ID":
//执行逻辑处理
break;
default:
break;
}
break;
}
base.WndProc(ref m);
}