Глобальная горячая клавиша - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок
12.10.2012, 14:06
#1
Разведчик
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Глобальная горячая клавиша
решил написать не большую программу, вроде все сделал, но встал перед проблемой глобальной горячей клавиши, суть в том что бы выполнять запуск или приостановление действий в свернутом состояние.
использоваю Delphi 7
Последний раз редактировалось Dopstatus; 12.10.2012 в 14:08 .
12.10.2012, 14:56
#2
Пехотинец
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Re: Глобальная горячая клавиша
Как вариант RegisterHotKey. Нажатая горячая клавиша будет передаваться непосредственно приложению и обрабатываться там, но назначенная клавиша не будет передаваться другим приложениям/вовсе нигде работать кроме как в твоем приложении не будет. Можно регистрировать при фокусе пв. При потери фокуса анрегистр.
12.10.2012, 15:03
#3
Разведчик
Регистрация: 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
Пехотинец
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
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
Разведчик
Регистрация: 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
Пехотинец
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Re: Глобальная горячая клавиша
Dopstatus , Да, все правильно.
12.10.2012, 15:22
#7
Разведчик
Регистрация: 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
Пехотинец
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Re: Глобальная горячая клавиша
Dopstatus , Написал для тебя [Ссылки могут видеть только зарегистрированные пользователи. ], скачай, разберись, переделай под себя.
12.10.2012, 15:36
#9
Разведчик
Регистрация: 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
Пехотинец
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
Re: Глобальная горячая клавиша
Dopstatus ,
12.10.2012, 15:40
#11
Разведчик
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: Глобальная горячая клавиша
что?..
Добавлено через 2 минуты
кстати сделал грубый копи паст, твоего кода себе....запускается но не работает...что то я изначально перемудрил..
Последний раз редактировалось Dopstatus; 12.10.2012 в 15:42 .
Причина: Добавлено сообщение
12.10.2012, 15:45
#12
Разведчик
Регистрация: 08.04.2011
Сообщений: 13
Популярность: 188
Сказал(а) спасибо: 3
Поблагодарили 9 раз(а) в 2 сообщениях
Re: Глобальная горячая клавиша
циклы здесь нужны для таймеров
Добавлено через 3 минуты
плюс нафига столько таймеров если можно поставить всё один? это конечно если интервал у тебя один
Последний раз редактировалось darkivlad; 12.10.2012 в 15:48 .
Причина: Добавлено сообщение
12.10.2012, 15:56
#13
Разведчик
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: Глобальная горячая клавиша
интервалы настрайвается в полях эдит...
12.10.2012, 15:58
#14
Разведчик
Регистрация: 08.04.2011
Сообщений: 13
Популярность: 188
Сказал(а) спасибо: 3
Поблагодарили 9 раз(а) в 2 сообщениях
Re: Глобальная горячая клавиша
глупо столько таймеров делать
12.10.2012, 16:06
#15
Разведчик
Регистрация: 12.10.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Re: Глобальная горячая клавиша
а как ты по другому организуешь? кликание клавиш с разным интервалом и разными клавишами ?
Добавлено через 17 минут
ну так...что у кого могут быть какие идеи, почему не работают горячие клавиши ?
Последний раз редактировалось Dopstatus; 12.10.2012 в 16:24 .
Причина: Добавлено сообщение
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
Похожие темы
Тема
Автор
Раздел
Ответов
Последнее сообщение
[Прочее] Глобальная Раздача ключей CS:GO!
sdsadafgs
Халява для Читера
30
15.05.2012 16:33
[Помогите!] Wh клавиша
awanturist
Общение и обсуждение Counter-Strike
2
11.08.2011 15:01
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 10:45 .