gpt4 book ai didi

C# 全局键盘钩子(Hook),从控制台应用程序打开一个表单

转载 作者:太空狗 更新时间:2023-10-29 22:35:52 25 4
gpt4 key购买 nike

<分区>

所以我有一个带有表单的 C# 控制台应用程序,我想使用热键打开它。比方说 Ctrl + < 打开表单。所以我现在得到了处理 globalkeylistener 的代码,但看起来我实现它失败了。它做了一个 while 循环以防止它关闭程序,我尝试使用 kbh_OnKeyPressed 方法从用户那里获取输入。

我试着这样实现:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Globalkey
{
static class Program
{
[DllImport("user32.dll")]
private static extern bool RegisterHotkey(int id, uint fsModifiers, uint vk);

private static bool lctrlKeyPressed;
private static bool f1KeyPressed;


[STAThread]
static void Main()
{

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

LowLevelKeyboardHook kbh = new LowLevelKeyboardHook();
kbh.OnKeyPressed += kbh_OnKeyPressed;
kbh.OnKeyUnpressed += kbh_OnKeyUnpressed;
kbh.HookKeyboard();

while(true) { }

}

private static void kbh_OnKeyUnpressed(object sender, Keys e)
{
if (e == Keys.LControlKey)
{
lctrlKeyPressed = false;
Console.WriteLine("CTRL unpressed");
}
else if (e == Keys.F1)
{
f1KeyPressed = false;
Console.WriteLine("F1 unpressed");
}
}

private static void kbh_OnKeyPressed(object sender, Keys e)
{
if (e == Keys.LControlKey)
{
lctrlKeyPressed = true;
Console.WriteLine("CTRL pressed");
}
else if (e == Keys.F1)
{
f1KeyPressed = true;
Console.WriteLine("F1 pressed");
}
CheckKeyCombo();
}

static void CheckKeyCombo()
{
if (lctrlKeyPressed && f1KeyPressed)
{
Application.Run(new Form1());
}
}
}
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com