Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

перехват клавиш?   Найти похожие ветки 

 
shelest   (2004-06-04 10:52) [0]

как перехватить одновременное нажатие Ctrl+Shift+S?

Если учесть, что программа обработки перехвата будет неактивна.

Посмотрел несколько примеров, там все идет только для нажатия одной клавиши.


 
stany ©   (2004-06-04 10:59) [1]

Глобальный хук в dll. Инфы по этому море.


 
Игорь Шевченко ©   (2004-06-04 11:04) [2]

RegisterHotkey


 
shelest   (2004-06-04 11:09) [3]

С этим проблем нет.

У меня вот только вопрос.

Как реализовать механизм отловки всех трех клавиш?

Chr(Message.wParam) показывает только на нажатие одной клавиши.
ТО есть я так понял, что мне надопоочередно в интервале времени отслеживать нажатие каждой клавиши по отдельности?


 
shelest   (2004-06-04 11:10) [4]

RegisterHotkey не прокатит. Мне отслеживать надо во всех приложениях. И особенно в тех которые выдавили из себя ошибку.


 
stany ©   (2004-06-04 11:49) [5]

перехват CTRL+ALT+SHIFT


library hook_dll;

uses
Hook in "hook.pas",

exports
{global hook}
SetKeyboardHook, RemoveKeyboardHook,
begin
end.

unit Hook;

interface

uses Windows, Messages;

function SetKeyboardHook: Boolean; stdcall;
function RemoveKeyboardHook: Boolean; stdcall;
var
KeyboardHook: HHOOK;

implementation

function KeyboardProc(hCode: Integer; wParam: Longint; lParam: Longint): LRESULT; stdcall;
begin
if hCode = HC_ACTION then
if (Word(GetKeyState(VK_MENU)) and (Word(GetKeyState(VK_SHIFT)) and Word(GetKeyState(VK_CONTROL))) and $8000)<>0 then
windows.Beep(70,30);
Result := CallNextHookEx(KeyboardHook, hCode, wParam, lParam);
end;

function SetKeyboardHook: Boolean; stdcall; export;
begin
KeyboardHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0);
Result := KeyboardHook <> 0;
end;

function RemoveKeyboardHook: Boolean; stdcall; export;
begin
Result := UnhookWindowsHookEx(KeyboardHook);
end;

end.


 
iat   (2004-06-04 11:51) [6]

вставляешь в класс
 protected
   procedure hotykey(var msg:TMessage); message WM_HOTKEY;
 ...

var
 id:Integer;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  id:=GlobalAddAtom("hotkey");
// для fsModifiers и т.д. смотри help для RegisterHotKey
  RegisterHotKey(handle, id, fsModifiers, vk);
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(handle,id);
end;

procedure TfrmMain.hotykey(var msg:TMessage);
begin
  if (msg.LParamLo=fsModifiers) and (msg.LParamHi=vk) then
  begin
    {do something}
  end;
end;


 
Игорь Шевченко ©   (2004-06-04 11:51) [7]

shelest   (04.06.04 11:10)


> RegisterHotkey не прокатит


Куды ж он нафиг денется ?

Для примера - ловится нажатие Alt+F1:

unit main;

interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
 TfMain = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure FormDestroy(Sender: TObject);
 private
   FKeyAtom: ATOM;
   procedure WMHotkey (var Message: TMessage); message WM_HOTKEY;
 end;

var
 fMain: TfMain;

implementation

{$R *.DFM}

procedure TfMain.FormCreate(Sender: TObject);
begin
 FKeyAtom := GlobalAddAtom("MyHotkey");
 Win32Check(RegisterHotKey(Handle, FKeyAtom, MOD_ALT, VK_F1));
end;

procedure TfMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 UnregisterHotkey(Handle, FKeyAtom);
end;

procedure TfMain.WMHotkey(var Message: TMessage);
begin
 Windows.MessageBox(HWND_DESKTOP, "Gotcha", "HOTKEY", MB_OK);
end;

procedure TfMain.FormDestroy(Sender: TObject);
begin
 GlobalDeleteAtom(FKeyAtom);
end;

end.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
4-1085999749
GuAV
2004-05-31 14:35
2004.07.18
Вставить в dialogtemplate форму.


1-1088682016
goliath
2004-07-01 15:40
2004.07.18
Проблема c Windows Metafile


1-1088775006
killer
2004-07-02 17:30
2004.07.18
Transparent в GroupBox


1-1088752686
Mc'SIMM
2004-07-02 11:18
2004.07.18
Моргание в панели задач


11-1077180577
DAngel
2004-02-19 11:49
2004.07.18
Минимизация формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский