Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизРеогирование на кнопку "windows" Найти похожие ветки
← →
2006_A (2006-05-13 14:18) [0]Подскажите, пожалуйста, как запретить проге реогировать на кнопки windows (что открывает меню пуск), и другие?
← →
palva © (2006-05-13 14:27) [1]А разве ваша прога на эту кнопку реагирует? Если реагирует, то прописать в ней нулевую реакцию.
← →
2006_A (2006-05-13 14:37) [2]windы реагируют, открывается меню Пуск, а мне этого не надо.
Как это запретить?
← →
DiamondShark © (2006-05-13 14:45) [3]
> а мне этого не надо
не нажимай
← →
2006_A (2006-05-13 14:55) [4]ХА-ХА - даволен?
я не нажимаю, нажимает ребёнок!
← →
easy © (2006-05-13 15:53) [5]http://www.winfaq.com.ru/winnt/363.htm
← →
2006_A (2006-05-13 16:25) [6]Да хотелось бы, что бы при работающей програме кнопки не работали, а при не работающей работали!
Перехватить сообщение, например, не дать ему идти дальше или изменить его, или ещё как-нибуть.
← →
vrem (2006-05-13 19:36) [7]Автор, вспомни как решил проблему на других прогах :)
Или это ребёнок другой?
← →
Шпиён (2006-05-13 20:42) [8]Примерно так:
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;
← →
Шпиён (2006-05-13 20:55) [9]упс.... стормозил -) Так вообще на клавиатуру реагировать не будет -))))
Попытаюсь исправиться.
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 21:16) [10]Жаль, редактировать постинги нельзя.. -(
Еще одна недоработка ...
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 Хуками никогда не занимался - если что не так, поправьте -)
← →
MetalFan © (2006-05-13 22:19) [11]данный код необходимо запихать в длл для того, чтобы хук был глобальным
← →
2006_A (2006-05-13 22:26) [12]спасибо и благодарность шпиёну!
шпиён - МАСТЕР!!!
← →
Шпиён (2006-05-14 00:21) [13]Кстати, на некоторых клавиатурах клавиша Win усть не только слева, но и справа.... и код у нее другой
VK_LWIN = 91 - левая
VK_RWIN = 92 - правая
← →
TUser © (2006-05-14 07:52) [14]> Кстати, на некоторых клавиатурах клавиша Win усть не только слева, но и справа....
Давно не видел клавиатур, у которых это не так.
← →
Шпиён (2006-05-14 11:59) [15]
> TUser © (14.05.06 07:52) [14]
Ноутбуки -)
← →
2006_A (2006-05-14 15:57) [16]Да всё это не важно!
За помощь спосибо!
← →
TUser © (2006-05-14 18:28) [17]> Ноутбуки
мастдай ))
← →
Virgo_Style © (2006-05-14 21:27) [18]У меня три.
:o)
На родной клавиатуре одна и на выносной две %-)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c