Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Глобальная горячая клавиша

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 12.10.2012, 14:06   #1
 Разведчик
Аватар для Dopstatus
 
Dopstatus никому не известный тип
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Глобальная горячая клавиша

решил написать не большую программу, вроде все сделал, но встал перед проблемой глобальной горячей клавиши, суть в том что бы выполнять запуск или приостановление действий в свернутом состояние.
использоваю Delphi 7

Последний раз редактировалось Dopstatus; 12.10.2012 в 14:08.
  Ответить с цитированием
Старый 12.10.2012, 14:56   #2
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Глобальная горячая клавиша

Как вариант RegisterHotKey. Нажатая горячая клавиша будет передаваться непосредственно приложению и обрабатываться там, но назначенная клавиша не будет передаваться другим приложениям/вовсе нигде работать кроме как в твоем приложении не будет. Можно регистрировать при фокусе пв. При потери фокуса анрегистр.
  Ответить с цитированием
Старый 12.10.2012, 15:03   #3
 Разведчик
Аватар для Dopstatus
 
Dopstatus никому не известный тип
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Глобальная горячая клавиша

я только начал писать на делфи и изучать его, я многое не знаю,можно по точрее про RegisterHotKey

Добавлено через 3 минуты
допустим при нажатие комбинации ctrl+alt+p
begin
timer1.Enabled:=false;
timer2.Enabled:=false;
timer3.Enabled:=false;
timer4.Enabled:=false;
timer5.Enabled:=false;
timer6.Enabled:=false;
timer7.Enabled:=false;
timer8.Enabled:=false;
timer9.Enabled:=false;
timer10.Enabled:=false;
end;

Последний раз редактировалось Dopstatus; 12.10.2012 в 15:06. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 12.10.2012, 15:13   #4
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Глобальная горячая клавиша

Под private объявляешь процедуру обработки
Код:
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
На событие FormCreate регистрируешь нужную клавишу, для примера Alt+F1:
Код:
RegisterHotKey(Handle, 1, MOD_ALT, VK_F1);
На событие FormClose анрегистр этой клавиши:
Код:
UnRegisterHotKey(Handle, 1);
Ну и сама функция обработки:
Код:
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
 if Msg.HotKey = 1 // если индекс нажатой зарегистрированной клавиши = 1
 // смотреть RegisterHotKey(Handle, 1, MOD_ALT, VK_F1);
 then
   ShowMessage('Alt+F1 нажата'); // тогда выводим сообщение
end;
Надеюсь поймешь, если нет, то стоит подучить язык.

Последний раз редактировалось Zo_Om4eG; 12.10.2012 в 15:18.
  Ответить с цитированием
Старый 12.10.2012, 15:17   #5
 Разведчик
Аватар для Dopstatus
 
Dopstatus никому не известный тип
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Глобальная горячая клавиша

нужно ли обявлять процедуры procedure FormCreate(Sender: TObject), procedure FormClose(Sender: TObject)
и выходит..
procedure tform1.formcreate (Sender: TObject)
begin
RegisterHotKey(Handle, 1, MOD_ALT, VK_F1);
end;
...
я правильно понял ?
  Ответить с цитированием
Старый 12.10.2012, 15:20   #6
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Глобальная горячая клавиша

Dopstatus, Да, все правильно.
  Ответить с цитированием
Старый 12.10.2012, 15:22   #7
 Разведчик
Аватар для Dopstatus
 
Dopstatus никому не известный тип
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Глобальная горячая клавиша

щяс попробоваю... надеюсь получится.

Добавлено через 5 минут
на UnRegisterHotKey(Handle, 1); выводит 208 ошибку, деректив

Добавлено через 7 минут
все исправил ошибку, все запускается, но не хочет работать...

Последний раз редактировалось Dopstatus; 12.10.2012 в 15:29. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 12.10.2012, 15:35   #8
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Глобальная горячая клавиша

Dopstatus, Написал для тебя [Ссылки могут видеть только зарегистрированные пользователи. ], скачай, разберись, переделай под себя.
  Ответить с цитированием
Старый 12.10.2012, 15:36   #9
 Разведчик
Аватар для Dopstatus
 
Dopstatus никому не известный тип
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Глобальная горячая клавиша

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Timer1: TTimer;
    Button2: TButton;
    Timer2: TTimer;
    Edit2: TEdit;
    Button3: TButton;
    Timer3: TTimer;
    Edit3: TEdit;
    Timer4: TTimer;
    Timer5: TTimer;
    Timer6: TTimer;
    Timer7: TTimer;
    Timer8: TTimer;
    Timer9: TTimer;
    Timer10: TTimer;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label8: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Button4: TButton;
    HotKey1: THotKey;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Timer5Timer(Sender: TObject);
    procedure Timer6Timer(Sender: TObject);
    procedure Timer7Timer(Sender: TObject);
    procedure Timer8Timer(Sender: TObject);
    procedure Timer9Timer(Sender: TObject);
    procedure Timer10Timer(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure formcreate(Sender: TObject);
    procedure formclose(Sender: TObject);



  private
    { Private declarations }
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;


  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:integer;
  b:integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
keybd_event(ord('1'), MapVirtualKey(ord('1'), 0), 0, 0);
keybd_event(ord('1'), 0, KEYEVENTF_KEYUP, 0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Interval:=StrToInt (edit1.Text);
timer1.Enabled:=true;
timer2.Interval:=StrToInt (edit2.Text);
timer2.Enabled:=true;
timer3.Interval:=StrToInt (edit3.Text);
timer3.Enabled:=true;
timer4.Interval:=StrToInt (edit4.Text);
timer4.Enabled:=true;
timer5.Interval:=StrToInt (edit5.Text);
timer5.Enabled:=true;
timer6.Interval:=StrToInt (edit6.Text);
timer6.Enabled:=true;
timer7.Interval:=StrToInt (edit7.Text);
timer7.Enabled:=true;
timer8.Interval:=StrToInt (edit8.Text);
timer8.Enabled:=true;
timer9.Interval:=StrToInt (edit9.Text);
timer9.Enabled:=true;
timer10.Interval:=StrToInt (edit10.Text);
timer10.Enabled:=true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
keybd_event(ord('2'), MapVirtualKey(ord('2'), 0), 0, 0);
keybd_event(ord('2'), 0, KEYEVENTF_KEYUP, 0)
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
timer1.Enabled:=false;
timer2.Enabled:=false;
timer3.Enabled:=false;
timer4.Enabled:=false;
timer5.Enabled:=false;
timer6.Enabled:=false;
timer7.Enabled:=false;
timer8.Enabled:=false;
timer9.Enabled:=false;
timer10.Enabled:=false;
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
keybd_event(VK_F1, 0, 0, 0);
keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0);
end;


procedure TForm1.Timer4Timer(Sender: TObject);
begin
keybd_event(ord('3'), MapVirtualKey(ord('3'), 0), 0, 0);
keybd_event(ord('3'), 0, KEYEVENTF_KEYUP, 0)
end;

procedure TForm1.Timer5Timer(Sender: TObject);
begin
keybd_event(ord('4'), MapVirtualKey(ord('4'), 0), 0, 0);
keybd_event(ord('4'), 0, KEYEVENTF_KEYUP, 0)
end;

procedure TForm1.Timer6Timer(Sender: TObject);
begin
keybd_event(ord('5'), MapVirtualKey(ord('5'), 0), 0, 0);
keybd_event(ord('5'), 0, KEYEVENTF_KEYUP, 0)
end;

procedure TForm1.Timer7Timer(Sender: TObject);
begin
keybd_event(ord('6'), MapVirtualKey(ord('6'), 0), 0, 0);
keybd_event(ord('6'), 0, KEYEVENTF_KEYUP, 0)
end;

procedure TForm1.Timer8Timer(Sender: TObject);
begin
keybd_event(ord('7'), MapVirtualKey(ord('7'), 0), 0, 0);
keybd_event(ord('7'), 0, KEYEVENTF_KEYUP, 0)
end;

procedure TForm1.Timer9Timer(Sender: TObject);
begin
keybd_event(ord('8'), MapVirtualKey(ord('8'), 0), 0, 0);
keybd_event(ord('8'), 0, KEYEVENTF_KEYUP, 0)
end;

procedure TForm1.Timer10Timer(Sender: TObject);
begin
keybd_event(ord('9'), MapVirtualKey(ord('9'), 0), 0, 0);
keybd_event(ord('9'), 0, KEYEVENTF_KEYUP, 0)
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
ShowMessage ('âðåìÿ âûñòîâëÿåòñÿ â ì.ñ' +#13#10+ 'òîåñòü'+#13#10+ '1000-1ñåê'
 +#13#10+ '30000-30ñåê'
  +#13#10+ '60000-1ìèí'
  +#13#10+ '900000-15 ìèíóò'
 +#13#10+ '1800000-30ìèíóò');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, 1, MOD_ALT, VK_F1);
end;
procedure TForm1.FormClose(Sender: TObject);
begin
UnRegisterHotKey(Handle, 1);
end;
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
 if Msg.HotKey = 1 // åñëè èíäåêñ íàæàòîé çàðåãèñòðèðîâàííîé êëàâèøè = 1
 // ñìîòðåòü RegisterHotKey(Handle, 1, MOD_ALT, VK_F1);
 then
   ShowMessage('Alt+F1 íàæàòà'); // òîãäà âûâîäèì ñîîáùåíèå
end;
end.

Последний раз редактировалось krukovis; 16.10.2012 в 19:58.
  Ответить с цитированием
Старый 12.10.2012, 15:38   #10
 Пехотинец
Аватар для Zo_Om4eG
 
Zo_Om4eG на правильном пути
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Отправить сообщение для Zo_Om4eG с помощью Skype™
 
По умолчанию Re: Глобальная горячая клавиша

Dopstatus,
  Ответить с цитированием
Старый 12.10.2012, 15:40   #11
 Разведчик
Аватар для Dopstatus
 
Dopstatus никому не известный тип
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Глобальная горячая клавиша

что?..

Добавлено через 2 минуты
кстати сделал грубый копи паст, твоего кода себе....запускается но не работает...что то я изначально перемудрил..

Последний раз редактировалось Dopstatus; 12.10.2012 в 15:42. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 12.10.2012, 15:45   #12
 Разведчик
Аватар для darkivlad
 
darkivlad на правильном путиdarkivlad на правильном пути
Регистрация: 08.04.2011
Сообщений: 13
Популярность: 188
Сказал(а) спасибо: 3
Поблагодарили 9 раз(а) в 2 сообщениях
Отправить сообщение для darkivlad с помощью Skype™
 
По умолчанию Re: Глобальная горячая клавиша

циклы здесь нужны для таймеров

Добавлено через 3 минуты
плюс нафига столько таймеров если можно поставить всё один? это конечно если интервал у тебя один

Последний раз редактировалось darkivlad; 12.10.2012 в 15:48. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 12.10.2012, 15:56   #13
 Разведчик
Аватар для Dopstatus
 
Dopstatus никому не известный тип
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Глобальная горячая клавиша

интервалы настрайвается в полях эдит...
  Ответить с цитированием
Старый 12.10.2012, 15:58   #14
 Разведчик
Аватар для darkivlad
 
darkivlad на правильном путиdarkivlad на правильном пути
Регистрация: 08.04.2011
Сообщений: 13
Популярность: 188
Сказал(а) спасибо: 3
Поблагодарили 9 раз(а) в 2 сообщениях
Отправить сообщение для darkivlad с помощью Skype™
 
По умолчанию Re: Глобальная горячая клавиша

глупо столько таймеров делать
  Ответить с цитированием
Старый 12.10.2012, 16:06   #15
 Разведчик
Аватар для Dopstatus
 
Dopstatus никому не известный тип
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Глобальная горячая клавиша

а как ты по другому организуешь? кликание клавиш с разным интервалом и разными клавишами ?

Добавлено через 17 минут
ну так...что у кого могут быть какие идеи, почему не работают горячие клавиши ?

Последний раз редактировалось Dopstatus; 12.10.2012 в 16:24. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Прочее] Глобальная Раздача ключей CS:GO! sdsadafgs Халява для Читера 30 15.05.2012 16:33
[Помогите!] Wh клавиша awanturist Общение и обсуждение Counter-Strike 2 11.08.2011 15:01

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 10:45.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net