![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реогирование на кнопку "windows" [D6, XP]
2006_A © (2006-05-13 14:18:00)Подскажите, пожалуйста, как запретить проге реогировать на кнопки windows (что открывает меню пуск), и другие?
Virgo_Style (2006-05-14 21:27:00) [1]У меня три.
:o)
На родной клавиатуре одна и на выносной две %-)
TUser (2006-05-14 18:28:00) [2]> Ноутбуки
мастдай ))
2006_A (2006-05-14 15:57:00) [3]Да всё это не важно!
За помощь спосибо!
Шпиён (2006-05-14 11:59:00) [4]
> TUser © (14.05.06 07:52) [14]
Ноутбуки -)
TUser (2006-05-14 07:52:00) [5]> Кстати, на некоторых клавиатурах клавиша Win усть не только слева, но и справа....
Давно не видел клавиатур, у которых это не так.
Шпиён (2006-05-14 00:21:00) [6]Кстати, на некоторых клавиатурах клавиша Win усть не только слева, но и справа.... и код у нее другой
VK_LWIN = 91 - левая
VK_RWIN = 92 - правая
2006_A (2006-05-13 22:26:00) [7]спасибо и благодарность шпиёну!
шпиён- МАСТЕР!!!
MetalFan (2006-05-13 22:19:00) [8]данный код необходимо запихать в длл для того, чтобы хук был глобальным
Шпиён (2006-05-13 21:16:00) [9]Жаль, редактировать постинги нельзя.. -(
Еще одна недоработка ...
MSDN:
If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the rest of the hook chain or the target window procedure.
function LowLevelKeyboardProc(nCode:integer;wParam:longint;lParam:longint):longint;stdcal l;
begin
result:=1;
if (wParam=WM_KEYUP) or (wParam=WM_KEYDOWN) then
begin
p:=pKBDLLHOOKSTRUCT(lparam);
if p.scanCode=91 then exit;
end;
result:=CallNextHookEx(MyHook, nCode, wParam, lParam );
end;
ps Хуками никогда не занимался - если что не так, поправьте -)
Шпиён (2006-05-13 20:55:00) [10]упс.... стормозил -) Так вообще на клавиатуру реагировать не будет -))))
Попытаюсь исправиться.
function LowLevelKeyboardProc(nCode:integer;wParam:longint;lParam:longint):longint;stdcal l;
begin
if (wParam=WM_KEYUP) or (wParam=WM_KEYDOWN) then
begin
p:=pKBDLLHOOKSTRUCT(lparam);
if p.scanCode=91 then exit;
end;
result:=CallNextHookEx(MyHook, nCode, wParam, lParam );
end;
Шпиён (2006-05-13 20:42:00) [11]Примерно так:
implementation
{$R *.dfm}
const
WH_KEYBOARD_LL=13;
type
pKBDLLHOOKSTRUCT=^TKBDLLHOOKSTRUCT;
TKBDLLHOOKSTRUCT=record
vkCode:DWORD;
scanCode:DWORD;
flags:DWORD;
time:DWORD;
dwExtraInfo:pDWORD;
end;
var
MyHook:HHOOK;
p:pKBDLLHOOKSTRUCT;
function LowLevelKeyboardProc(nCode:integer;wParam:longint;lParam:longint):longint;stdcal l;
begin
if (wParam=WM_KEYUP) or (wParam=WM_KEYDOWN) then
begin
p:=pKBDLLHOOKSTRUCT(lparam);
if p.scanCode=91 then
begin
p.scanCode:=0;
wParam:=0;
end;
end;
CallNextHookEx(MyHook, nCode, wParam, lParam );
end;
//перевесить на OnCreate
procedure TForm1.Button1Click(Sender: TObject);
begin
MyHook:= SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardProc, hInstance, 0 );
end;
//перевесить на OnClose
procedure TForm1.Button2Click(Sender: TObject);
begin
UnhookWindowsHookEx(MyHook);
end;
vrem (2006-05-13 19:36:00) [12]Автор, вспомни как решил проблему на других прогах :)
Или это ребёнок другой?
2006_A (2006-05-13 16:25:00) [13]Да хотелось бы, что бы при работающей програме кнопки не работали, а при не работающей работали!
Перехватить сообщение, например, не дать ему идти дальше или изменить его, или ещё как-нибуть.
easy (2006-05-13 15:53:00) [14]http://www.winfaq.com.ru/winnt/363.htm
2006_A (2006-05-13 14:55:00) [15]ХА-ХА - даволен?
я не нажимаю, нажимает ребёнок!
DiamondShark (2006-05-13 14:45:00) [16]
> а мне этого не надо
не нажимай
2006_A (2006-05-13 14:37:00) [17]windы реагируют, открывается меню Пуск, а мне этого не надо.
Как это запретить?
palva (2006-05-13 14:27:00) [18]А разве ваша прога на эту кнопку реагирует? Если реагирует, то прописать в ней нулевую реакцию.