ozzet писал(а):вот мне надо сообщению WM_KEYDOWN прописать lParam,
Хакер писал(а):Фраза «прописать lParam сообщению WM_KEYDOWN» не имеет смысла.
ozzet писал(а):сообщению WM_KEYDOWN нужно прописать параметр LPARAM, как это можно сделать?
Qwertiy писал(а):И в чём вообще вопрос?
Qwertiy писал(а):Параметр "прописывается", а точнее передаётся, не сообщению, а функции SendMessage или PostMessage, которой так же передаётся и сообщение.
Взять и поставить нужное число в аргумент - в чём проблема? И в чём вообще вопрос?
Public Function LowLevelKeyboardProc(ByVal uCode As Long, ByVal wParam As Long, lParam As KBDLLHOOKSTRUCT) As Long
If uCode >= 0 Then
Select Case uCode
Case HC_ACTION
If wParam = WM_KEYDOWN Then
If lParam.vkCode = VK_N Then
LowLevelKeyboardProc = 1
Call keybd_event(VK_B, 0, 0, 0)
Call keybd_event(VK_B, 0, KEYEVENTF_KEYUP, 0)
ozzet писал(а):вот как здесь WM_KEYDOWN прописать параметр lParam.
только не спрашивайте зачем, это просто пример)
Public Function LowLevelKeyboardProc(ByVal uCode As Long, ByVal wParam As Long, lParam As KBDLLHOOKSTRUCT) As Long
If uCode >= 0 Then
Select Case uCode
Case HC_ACTION
If wParam = WM_KEYDOWN Then
If lParam.vkCode = VK_N Then
LowLevelKeyboardProc = 1
Call keybd_event(VK_B, 0, 0, 0)
Call keybd_event(VK_B, 0, KEYEVENTF_KEYUP, 0)
Qwertiy писал(а):Есть сообщение, например, посланное так: SendMessage(hwnd, WM_KEYDOWN, key, lparam)
Ты хочешь из хука добраться до значения lparam и подменить его.
Я правильно понимаю?
ozzet писал(а):повторюсь у данного вопроса только познавательная цель я хочу понять как это(работает) выглядит в коде
ark писал(а):Подменить сообщение в хуке нельзя (ByVal wparam).
То исть? If lParam.vkCode = VK_N Then lParam.vkCode=VK_A: Exit Function - сработает, а wParam = 30 - нет. Да и зачем подменять?Qwertiy писал(а):50%, что ты не прав
SendMessage(hwnd_Куда,WM_Что, wprm,lprm)
HookProc=CallNextHookEx(hhok,code,wparam,lparam)
ark писал(а):WM_KEYDOWN это КОНСТАНТА. Твоя цитата MSDN из первого сообщения относится к спецификации Send(Post)Message API
SendMessage(hwnd,msg,wparam,lparam) где msg - сообщение (в данном случае WM_KEYDOWN), wparam/lparam - для каждого сообщения - разные, для конкретного (WM_KEYDOWN) - см. свой первый пост. В CallBack'ах субклассинга параметры те же, у хуков - отличаются. В твоём примере wparam ВСЕГДА 1 из 4-х WM_KEYDOWN/WM_KEYUP/WM_SYSKEYDOWN/WM_SYSKEYUP. Подменить сообщение в хуке нельзя (ByVal wparam). Кстати, 30=0х1Е=WM_TIMECHANGE - ты это хочешь поменять?
Подменить lParam - легко:
If lParam.vkCode = VK_N Then lParam.vkCode=VK_Aozzet писал(а):повторюсь у данного вопроса только познавательная цель я хочу понять как это(работает) выглядит в коде
Я бы начал с SetWindowTextA...
А ещё лучше - Bruce MkKiney "Hardcore VB"->Dan Appleman "Win32 API Guide". Может, из современного тож что-то есть, но это - классика. Жаль VBPJ прикрыли
Qwertiy писал(а):ozzet, почему ты так уверен, что ответ ark'а правильный?
ozzet писал(а):"WM_KEYDOWN это КОНСТАНТА " он как это написал я сразу понял что я думал про это а спрашивал про другое)
Qwertiy писал(а):Параметр "прописывается", а точнее передаётся, не сообщению, а функции SendMessage или PostMessage, которой так же передаётся и сообщение.
Взять и поставить нужное число в аргумент - в чём проблема? И в чём вообще вопрос?
ark писал(а):Подменить lParam - легко:
If lParam.vkCode = VK_N Then lParam.vkCode=VK_A
Qwertiy писал(а):ozzet писал(а):"WM_KEYDOWN это КОНСТАНТА " он как это написал я сразу понял что я думал про это а спрашивал про другое)
Хм.. Ну это-то да
Мне казалось, я тоже что-то такое говорил... Похоже, что не так очевидно, только:Qwertiy писал(а):Параметр "прописывается", а точнее передаётся, не сообщению, а функции SendMessage или PostMessage, которой так же передаётся и сообщение.
Взять и поставить нужное число в аргумент - в чём проблема? И в чём вообще вопрос?
А вот по поводу подмены - совсем не уверен, что он прав.
Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 84