Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 110

"CallbackOnCollectedDelegate was detected" при использовании хуков

03.03.2017, 15:22. Показов 1470. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет, Помогите пожалуйста с двумя задачами, хочу отключить клавиши winkey, Alt+tab и так далее. всё работает но переодически вылетает вот с такой ошибкой CallbackOnCollectedDelegate was detected : This may cause application crashes, corruption and data loss. When passing delegates to unmanaged code, they must be kept alive by the managed application until it is guaranteed that they will never be called. Что мне необходимо исправить? и сразу второй вопрос чтобы не создавать тему отдельную, пытаюсь поменять значения ключа в реестре выдаёт ошибку "System.Security.SecurityException: Requested registry access is not allowed". Как мне разрешить запись?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
[DllImport("user32", EntryPoint = "SetWindowsHookExA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
            public static extern int SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, int hMod, int dwThreadId);
            [DllImport("user32", EntryPoint = "UnhookWindowsHookEx", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
            public static extern int UnhookWindowsHookEx(int hHook);
            public delegate int LowLevelKeyboardProcDelegate(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);
            [DllImport("user32", EntryPoint = "CallNextHookEx", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
            public static extern int CallNextHookEx(int hHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);
            public const int WH_KEYBOARD_LL = 13;
            [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)]
            public static extern IntPtr LoadLibrary(string lpFileName);
            [DllImport("user32.dll")]
            private static extern int FindWindow(string className, string windowText);
            [DllImport("user32.dll")]
            private static extern int ShowWindow(int hwnd, int command);
 
            private const int SW_HIDE = 0;
            private const int SW_SHOW = 1;
            public struct KBDLLHOOKSTRUCT
            {
                public int vkCode;
                public int scanCode;
                public int flags;
                public int time;
                public int dwExtraInfo;
            }
            public static int intLLKey;
 
            public int LowLevelKeyboardProc(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam)
            {
                bool blnEat = false;
 
                switch (wParam)
                {
                    case 256:
                    case 257:
                    case 260:
                    case 261:
                        //Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key,
                        blnEat = ((lParam.vkCode == 9) && (lParam.flags == 32)) | ((lParam.vkCode == 27) && (lParam.flags == 32)) | ((lParam.vkCode == 27) && (lParam.flags == 0)) | ((lParam.vkCode == 91) && (lParam.flags == 1)) | ((lParam.vkCode == 92) && (lParam.flags == 1)) | ((lParam.vkCode == 73) && (lParam.flags == 0));
                        break;
                }
 
                if (blnEat == true)
                {
                    return 1;
                }
                else
                {
                    return CallNextHookEx(0, nCode, wParam, ref lParam);
                }
            }
            public void KillStartMenu()
            {
                int hwnd = FindWindow("Shell_TrayWnd", "");
                ShowWindow(hwnd, SW_HIDE);
            }
 
            public void HookWindowsMethod()
            {
                var inst = LoadLibrary("user32.dll").ToInt32();
                intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, inst, 0);
            }
 
            public void KillCtrlAltDelete()
            {
                RegistryKey regkey;
                string keyValueInt = "1";
                string subKey = @"Software\Microsoft\Windows\CurrentVersion\Policies\System";
 
                try
                {
                    regkey = Registry.LocalMachine.OpenSubKey(subKey,true);
                    regkey.SetValue("DisableTaskMgr", keyValueInt);
                    regkey.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
 
            public void ShowStartMenu()
            {
                int hwnd = FindWindow("Shell_TrayWnd", "");
                ShowWindow(hwnd, SW_SHOW);
            }
            public void EnableCTRLALTDEL()
            {
                try
                {
                    string subKey = @"Software\Microsoft\Windows\CurrentVersion\Policies\System";
                    RegistryKey rk = Registry.LocalMachine;
                    RegistryKey sk1 = rk.OpenSubKey(subKey,true);
                    if (sk1 != null)
                        rk.DeleteSubKeyTree(subKey);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2017, 15:22
Ответы с готовыми решениями:

CallbackOnCollectedDelegate was detected
Помогите решить проблему Есть PCI плата и библиотека для упраления PCI-Dask.dll Есть пневмосистема, которая состоит из 24...

No hard is detected при загрузке windows 7
В общем такая вот проблема , выпадет эта ошибка Мат. плата Asus p8p67 Le хард новый был. винда погружается но через раз как...

Ambiguous name detected при объявлении массива
Здравствуйте В строке Private Закладка_добавляемого_документа(642) As String Выделяет Закладка_добавляемого_документа(642) As String ...

1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18268 / 14191 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
03.03.2017, 22:57
pluprod, по идее нужно исправить HookWindowsMethod
C#
1
2
3
4
5
6
7
8
            static LowLevelKeyboardProcDelegate hookCallback;
 
            public void HookWindowsMethod()
            {
                var inst = LoadLibrary("user32.dll").ToInt32();
                hookCallback = new LowLevelKeyboardProcDelegate(LowLevelKeyboardProc);
                intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, hookCallback, inst, 0);
            }
Добавлено через 8 минут
Цитата Сообщение от pluprod Посмотреть сообщение
сразу второй вопрос чтобы не создавать тему отдельную
В будущем не делайте так. Одна тема - один вопрос.

Цитата Сообщение от pluprod Посмотреть сообщение
пытаюсь поменять значения ключа в реестре выдаёт ошибку "System.Security.SecurityException: Requested registry access is not allowed". Как мне разрешить запись?
Учитывая что ключи открываются на запись можно заключить что проблема в нехватке прав. Нужно запускать программу от имени администратора.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2017, 22:57
Помогаю со студенческими работами здесь

Unreachable code detected при создании метода
Здравствуйте. При создании метода вижу unreachable code detected. Подсвечиваются места с result = false. В чем причина? public static...

Crt detected that the application wrote to memory при delete[]
Всем здравствуйте. Возникла небольшая проблема, при работе с динамической матрицей, а именно добавлением столбца, при очищении памяти...

Ошибка при освобождении памяти. HEAP CURRUPTION DETECTED
Подскажите, почему возникает ошибка? Программа должна заменять цифры на слова и переводить предложение на новую строку #include...

При загрузке возникает ошибка no ide master H.D.D. detected
Доброго времени суток. Установила новую видеокарту. При этом чтобы она поместилась пришлось винчестер из SATA1 переставить в SATA4. После...

Ошибка при компиляции Qt: Untested Windows version 6.2 detected!
Делал проект но один раз когда попытался сново скомпилировать пишет ошибку. На QT и QT SDK всё одинаково, запускал и от админа и с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru