Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с SetWindowsHookEx / 14 сообщений из 14, страница 1 из 1
22.01.2018, 20:27
    #39588670
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
Не работает, сволочь!
Скармливаю корректные данные в вызов, но упорно возвращает 0!
Windows 7(10) x64, пробовал в VS 2013/2015
Поиск в интернете ничего не дал.
Кто сталкивался? Как вылечить?
...
Рейтинг: 0 / 0
22.01.2018, 21:25
    #39588695
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
SQL2008,
Права максимальные в манифесте?
...
Рейтинг: 0 / 0
23.01.2018, 03:42
    #39588799
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
букварьReturn value
Type:
Type: HHOOK
If the function succeeds, the return value is the handle to the hook procedure.
If the function fails, the return value is NULL. To get extended error information, call GetLastError .
( SetWindowsHookEx function (Windows) )
- и что показывает GetLastError? (в C# можно вызвать Marshal.GetLastWin32Error, указав в DllImport SetLastError=true).
...
Рейтинг: 0 / 0
23.01.2018, 09:27
    #39588856
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
Сон Веры ПавловныбукварьReturn value
Type:
Type: HHOOK
If the function succeeds, the return value is the handle to the hook procedure.
If the function fails, the return value is NULL. To get extended error information, call GetLastError .
( SetWindowsHookEx function (Windows) )
- и что показывает GetLastError? (в C# можно вызвать Marshal.GetLastWin32Error, указав в DllImport SetLastError=true).

Marshal.GetLastWin32Error -так и есть в коде. Текст ошибки - некорректный хендл окна.
...
Рейтинг: 0 / 0
23.01.2018, 09:51
    #39588882
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
SQL2008Как вылечить?
в топку c#

на winapi перепишите
...
Рейтинг: 0 / 0
23.01.2018, 10:29
    #39588904
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
SQL2008Marshal.GetLastWin32Error -так и есть в коде. Текст ошибки - некорректный хендл окна.
Ну, тогда ошибка в строке 83.
...
Рейтинг: 0 / 0
23.01.2018, 15:12
    #39589200
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
Сон Веры ПавловныSQL2008Marshal.GetLastWin32Error -так и есть в коде. Текст ошибки - некорректный хендл окна.
Ну, тогда ошибка в строке 83.
Понимаю вашу иронию...
Вот кусок кода
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
       private void InstallHook()
        {
            if (Handle != 0) throw new Exception("Hook is already installed");

            int htype = 0;

            switch (HookType)
            {
                case HookTypes.Mouse:
                    htype = WinApi.WH_MOUSE_LL;
                    break;
                case HookTypes.Keyboard:
                    htype = WinApi.WH_KEYBOARD_LL;
                    break;
                default:
                    throw new Exception("HookType is not supported");
            } 
            _HookProc = new HookProcCallBack(HookProc);

            _hHook = WinApi.SetWindowsHookEx(htype, _HookProc, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
            
            if (Handle == 0) throw new Win32Exception(Marshal.GetLastWin32Error());
        }
...
Рейтинг: 0 / 0
23.01.2018, 15:16
    #39589204
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
Ошибка такая
авторERROR_NO_TOKEN
1008 (0x3F0)
An attempt was made to reference a token that does not exist.
Похоже чего-то не хватает...
...
Рейтинг: 0 / 0
23.01.2018, 15:21
    #39589212
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
Среди передаваемых параметров нет пустых и нулевых.
Даже не знаю в какую сторону копать.
...
Рейтинг: 0 / 0
23.01.2018, 15:54
    #39589274
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
SQL2008,
Ну дак хэндл окна оттрассируйте.
Его видно и снаружи кода в утилитах.
...
Рейтинг: 0 / 0
23.01.2018, 16:36
    #39589321
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
ИзопропилSQL2008Как вылечить?
в топку c#
на winapi перепишите
А кто мешает ему писать на c# на winapi, что собственно он и делает.
Я ж пишу сколько лет на vb6/.Net на WinApi.

SQL2008,
я когда-то еще в vb6 пытался чего-то с этой ф-цией делать, но забил,
оно вроде работало, но показалось неудобным,
кажется в связи с необх. послать свое сообщение окну, не помню, в качестве альтернативы остановился на WM_CopyData. но могу чего-то путать.

Все API прекрасно работают из .Net при правильных навыках. Перечитывайте доки на API, пробуйте.
...
Рейтинг: 0 / 0
23.01.2018, 16:42
    #39589328
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
Дмитрий77но показалось неудобным,нулевое кольцо безопасности. И отписываться надо.
...
Рейтинг: 0 / 0
23.01.2018, 16:57
    #39589352
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
Дмитрий77 Все API прекрасно работают из .Net при правильных навыках. Перечитывайте доки на API, пробуйте.
Все верно, просмотрел уже кучу примеров.
Пишут, что нужно делать так, как делаю я.
Но не работает.
Думаю, что забью на это и поищу другой путь.
Такие косяки на этапе разработки... А что будет у клиента в промышленной эксплуатации?
...
Рейтинг: 0 / 0
23.01.2018, 17:08
    #39589362
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с SetWindowsHookEx
Ларчик открывался просто
Код: c#
1.
            _hHook = WinApi.SetWindowsHookEx(htype, _HookProc, System.Diagnostics.Process.GetCurrentProcess().MainModule.BaseAddress, 0);


и все заработало.
Всем спасибо!
Тема закрыта.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с SetWindowsHookEx / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]