Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2018, 18:07   #1
VISK
 
Регистрация: 04.11.2018
Сообщений: 3
По умолчанию Глобальный хук перестает работать

Всем привет, проблема: есть глобальный хук, он отслеживает какую кнопку я нажал, и если я нажал определенную клавишу то выполняется метод который нажимает кучу кнопок последовательно

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Threading;

private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;

[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)]
[return: MarshalAs(UnmanagedType.Bool)]
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);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);

private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
[STAThread]

private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleNam e), 0);
}
}

static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRender ingDefault(false);

_hookID = SetHook(_proc);

Application.Run();
UnhookWindowsHookEx(_hookID);


}


private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
//выход F10!
if ((Keys)vkCode == Keys.F10)
{
Environment.Exit(0);
}

//Вот тут если я нажму + то выполняются мои методы с нажатием клавиш!
if ((Keys)vkCode == Keys.Add)
{
Thread.Sleep(100);
Tab_Copy_Paste();
Zabor();
}


//Отображение в консоли
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}


И все работает, единственное работает ровно 6 раз! После этого хук перестает отлавливать клавиши
В чем может быть дело?
VISK вне форума Ответить с цитированием
Старый 04.11.2018, 18:19   #2
ZnZ
Пользователь
 
Регистрация: 14.06.2017
Сообщений: 45
По умолчанию

Зачем ты после установки хука убиваешь его сразу?
Код:
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
ZnZ вне форума Ответить с цитированием
Старый 04.11.2018, 18:32   #3
VISK
 
Регистрация: 04.11.2018
Сообщений: 3
По умолчанию

Пробовал убирать эту строку, не помогло, все тоже самое
VISK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длл и глобальный хук Azizas Общие вопросы Delphi 0 27.03.2013 17:33
Перестает работать глобальный хук wanes101 Win Api 2 22.02.2013 15:00
Глобальный хук AlienNation C# (си шарп) 2 29.07.2012 19:00
Глобальный хук Умед Общие вопросы Delphi 1 02.08.2010 11:04
Глобальный хук на мышь не глобальный О_о JTG Общие вопросы Delphi 3 05.06.2008 17:41