Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Перехват нажатия клавишь Добавлено: 30.04.04 17:53  

Автор вопроса:  .::EclipsE::. | ICQ: 208952501 

Ответить

  Ответы Всего ответов: 26  

Номер ответа: 16
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #16
Добавлено: 03.05.04 12:16

sne, намудрыл ты там. У тебя нет примеров с RegisterHotKey, а то очень-очень надо.

Ответить

Номер ответа: 17
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #17
Добавлено: 03.05.04 14:16

Есть и RegHotKeys, только он так же не доделан... Сейчас вот может для тя доделаю и те и на сайт отправлю...

PS
У меня в проекте небыло форм, а добавлять ее из-за каких-то гор. клавишь мне не хотелось... я поступил исключительно тупо ;) и создал модуль, который может создавать/дестроить и конечно сабклассить любое(в разумных пределах) кол-во форм... посмотришь, можэет прикольнет :)

Ответить

Номер ответа: 18
Автор ответа:
 Chill



ICQ: 554200 

Вопросов: 101
Ответов: 343
 Профиль | | #18 Добавлено: 04.05.04 01:03

2sne: "Есть и такие хуки, но кто-то на этом форуме говорил, что при вызове диспетчера задач, они автоматически снимаются, не ставя в известность, об этом, программу... Я сам конечно этого не видел, но говорят..."

А ты доверяй, но проверяй... да, при вызове диспетчера задач действительно зук снимается, при этом ПРОЦЕДУРА ОБРАБОТКИ ХУКА ПОЛУЧАЕТ СООБЩЕНИЕ WM_CANCELJOURNAL, вот так вот... т.ч. информирует =)

"А вот если писать глобальный хук за клавой/мышкой, то всю обработку событий, прижется делать в этой самой dll... Хотя... не знаю на сколько это правомерно, но я отлавливал события в dll, а потом с помощью SendMessage, отсылал данные на хэндл окошка, которое сам потом сабклассил из VB... Вроде бы работало, но не знаю, можно ли так делать..." весьма извращенный способ... можно конечно и так, но я просто сделал в dll функцию, которая сама все обрабатывала и возвращала в вызывающий модуль (мою прогу) уже готовые данные... хотя я писал на Си и сущ. еще много других способов =)

2gvozd: есть пример на Си, могу выслать... а если нада на VB, то подожди денек, только приехал с дачи... а там у меня компа нет =))) т.ч. еще не сделал =)

Ответить

Номер ответа: 19
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #19
Добавлено: 04.05.04 13:08

> весьма извращенный способ...

Была задача сделать универсальную фишку для именно для VB... Другого способа мне найти не удалось :)

Ответить

Номер ответа: 20
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #20
Добавлено: 04.05.04 19:49

to sne: С RegisterHotKey пмерчик хороший, но есть один вопрос - что значит lng. После долгих и изощрённых извращений над твоим примером нифига не получилось :(

Ответить

Номер ответа: 21
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #21
Добавлено: 04.05.04 19:59

to sne: Поясню, что значит "нифига не получилось": я не понял, куда припаять хендл моего окна. Понимаю, создавать из модуля своё окно это круто, но как присандалить это на готовое окно я не понял. После долгих опытов HotKey не регистрировался даже в твоём примере :)

Ответить

Номер ответа: 22
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #22
Добавлено: 05.05.04 00:19

If RegisterHotKey(GetHandle(AddressOf HotKeyWndProc), lng, Modifiers, VirtKey) = 0& Then Exit Function

Заместо GetHandle(AddressOf HotKeyWndProc) подставь свое окно, и сабклась его... все...

Ответить

Номер ответа: 23
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #23
Добавлено: 07.05.04 20:02

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

Ответить

Номер ответа: 24
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #24
Добавлено: 07.05.04 23:57

выписка из АПИ справочника:


Функция AddAtom

 

Описание:
function AddAtom(lpString: PChar): TAtom;

 

Добавляет

Str в таблицу атомов. Для каждого уникального строкового экземпляра ведется счетчик

ссылок.

 

Параметры:
lpString: Символьная строка,

заканчивающаяся пустым символом.

 

Возвращаемое значение:
В

случае успешного завершения - уникальный идентификатор атома; в противном случае,

-1.

 

См. также: GetAtomName

 

функция находится в файле

kernel32.dll

 

См. также: DeleteAtom, FindAtom, GetAtomName,

GlobalAddAtom, GlobalDeleteAtom, GlobalFindAtom, GlobalGetAtomName,

MAKEINTATOM

Ответить

Номер ответа: 25
Автор ответа:
 Chill



ICQ: 554200 

Вопросов: 101
Ответов: 343
 Профиль | | #25 Добавлено: 08.05.04 02:07

2Ra$cal: еще нужно? просто времени не было писть... на выходных напишу, если тебе еще нужно...

Ответить

Номер ответа: 26
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #26
Добавлено: 08.05.04 12:16

to Chill: да ладно, ужо не надо.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам