|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.11.2018, 18:07 | #1 |
Регистрация: 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 раз! После этого хук перестает отлавливать клавиши В чем может быть дело? |
04.11.2018, 18:19 | #2 |
Пользователь
Регистрация: 14.06.2017
Сообщений: 45
|
Зачем ты после установки хука убиваешь его сразу?
Код:
|
04.11.2018, 18:32 | #3 |
Регистрация: 04.11.2018
Сообщений: 3
|
Пробовал убирать эту строку, не помогло, все тоже самое
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Длл и глобальный хук | 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 |