Страница: 1 | 2 |
sne, намудрыл ты там. У тебя нет примеров с RegisterHotKey, а то очень-очень надо. Есть и RegHotKeys, только он так же не доделан... Сейчас вот может для тя доделаю и те и на сайт отправлю... 2sne: "Есть и такие хуки, но кто-то на этом форуме говорил, что при вызове диспетчера задач, они автоматически снимаются, не ставя в известность, об этом, программу... Я сам конечно этого не видел, но говорят..." А ты доверяй, но проверяй... да, при вызове диспетчера задач действительно зук снимается, при этом ПРОЦЕДУРА ОБРАБОТКИ ХУКА ПОЛУЧАЕТ СООБЩЕНИЕ WM_CANCELJOURNAL, вот так вот... т.ч. информирует "А вот если писать глобальный хук за клавой/мышкой, то всю обработку событий, прижется делать в этой самой dll... Хотя... не знаю на сколько это правомерно, но я отлавливал события в dll, а потом с помощью SendMessage, отсылал данные на хэндл окошка, которое сам потом сабклассил из VB... Вроде бы работало, но не знаю, можно ли так делать..." весьма извращенный способ... можно конечно и так, но я просто сделал в dll функцию, которая сама все обрабатывала и возвращала в вызывающий модуль (мою прогу) уже готовые данные... хотя я писал на Си и сущ. еще много других способов 2gvozd: есть пример на Си, могу выслать... а если нада на VB, то подожди денек, только приехал с дачи... а там у меня компа нет )) т.ч. еще не сделал > весьма извращенный способ... Была задача сделать универсальную фишку для именно для VB... Другого способа мне найти не удалось to sne: С RegisterHotKey пмерчик хороший, но есть один вопрос - что значит lng. После долгих и изощрённых извращений над твоим примером нифига не получилось to sne: Поясню, что значит "нифига не получилось": я не понял, куда припаять хендл моего окна. Понимаю, создавать из модуля своё окно это круто, но как присандалить это на готовое окно я не понял. После долгих опытов HotKey не регистрировался даже в твоём примере If RegisterHotKey(GetHandle(AddressOf HotKeyWndProc), lng, Modifiers, VirtKey) = 0& Then Exit Function to sne: что делает addatom to all: вот Вам рабочий код. Долго разбирался, но всё же сделал 'В форму Option Explicit Private Sub Form_Load() glbPrevWndProc = GetWindowLong(hwnd, GWL_WNDPROC) SetWindowLong hwnd, GWL_WNDPROC, AddressOf MyWindowProc RegisterHotKey hwnd, 1, 0, 100 RegisterHotKey hwnd, 2, MOD_SHIFT, Asc("M") End Sub Private Sub Form_Unload(Cancel As Integer) UnregisterHotKey hwnd, 1 UnregisterHotKey hwnd, 2 SetWindowLong hwnd, GWL_WNDPROC, glbPrevWndProc End Sub 'В модуль Option Explicit Public Const WM_HOTKEY = &H312 Public Declare Function CallWindowProc Lib "user32" _ Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _ ByVal hwnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long Public Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long) As Long Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long Public glbPrevWndProc As Long Public Const MOD_SHIFT = &H4 Public Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Const GWL_WNDPROC = (-4) Public Function MyWindowProc(ByVal hwnd As Long, _ ByVal Msg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long If Msg = WM_HOTKEY Then If wParam = 1 Then MsgBox "1" ElseIf wParam = 2 Then MsgBox "2" End If MyWindowProc = 0 Exit Function End If MyWindowProc = CallWindowProc(glbPrevWndProc, hwnd, Msg, wParam, lParam) End Function выписка из АПИ справочника: Описание: Str в таблицу атомов. Для каждого уникального строкового экземпляра ведется счетчик ссылок. заканчивающаяся пустым символом. случае успешного завершения - уникальный идентификатор атома; в противном случае, -1. kernel32.dll GlobalAddAtom, GlobalDeleteAtom, GlobalFindAtom, GlobalGetAtomName, MAKEINTATOM 2Ra$cal: еще нужно? просто времени не было писть... на выходных напишу, если тебе еще нужно... to Chill: да ладно, ужо не надо.
Вопрос: Перехват нажатия клавишь
Добавлено: 30.04.04 17:53
Автор вопроса: .::EclipsE::. | ICQ: 208952501
Ответы
Всего ответов: 26
Номер ответа: 16
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #16
Добавлено: 03.05.04 12:16
Номер ответа: 17
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #17
Добавлено: 03.05.04 14:16
PS
У меня в проекте небыло форм, а добавлять ее из-за каких-то гор. клавишь мне не хотелось... я поступил исключительно тупо и создал модуль, который может создавать/дестроить и конечно сабклассить любое(в разумных пределах) кол-во форм... посмотришь, можэет прикольнет
Номер ответа: 18
Автор ответа:
Chill
ICQ: 554200
Вопросов: 101
Ответов: 343
Профиль | | #18
Добавлено: 04.05.04 01:03
Номер ответа: 19
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #19
Добавлено: 04.05.04 13:08
Номер ответа: 20
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #20
Добавлено: 04.05.04 19:49
Номер ответа: 21
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #21
Добавлено: 04.05.04 19:59
Номер ответа: 22
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #22
Добавлено: 05.05.04 00:19
Заместо GetHandle(AddressOf HotKeyWndProc) подставь свое окно, и сабклась его... все...
Номер ответа: 23
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #23
Добавлено: 07.05.04 20:02
Номер ответа: 24
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #24
Добавлено: 07.05.04 23:57
Функция AddAtom
function AddAtom(lpString: PChar): TAtom;
lpString: Символьная строка,
В
Номер ответа: 25
Автор ответа:
Chill
ICQ: 554200
Вопросов: 101
Ответов: 343
Профиль | | #25
Добавлено: 08.05.04 02:07
Номер ответа: 26
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #26
Добавлено: 08.05.04 12:16