Я пробовал GlobalKeyboardHook. Я пробовал использовать этот
`класс GlobalKeyboardHook
{
private const int WH_KEYBOARD_LL = 13;
частная константа int WM_KEYUP = 0x0101;
Код: Выделить всё
private delegate int LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
private IntPtr _hookID = IntPtr.Zero;
private LowLevelKeyboardProc _proc;
public GlobalKeyboardHook()
{
_proc = HookCallback;
}
public void Hook()
{
_hookID = SetWindowsHookEx(WH_KEYBOARD_LL, _proc, IntPtr.Zero, 0);
}
public void Unhook()
{
UnhookWindowsHookEx(_hookID);
}
private int HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYUP)
{
int vkCode = Marshal.ReadInt32(lParam);
//MessageBox.Show($"Key released: {vkCode}");
if (vkCode == 9)
{
Global.Initiate_server?.SendMessage(Global.TrepCserver.Takescreenshot);
}
// Handle key release here
}
return (int)CallNextHookEx(_hookID, nCode, wParam, lParam);
}
}`
Подробнее здесь: https://stackoverflow.com/questions/793 ... ui-desktop