Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2014, 23:13   #1
webersol
Заблокирован
 
Регистрация: 09.10.2014
Сообщений: 20
По умолчанию Горячие клавиши делфи

Всем привет! Проблема заключается в следующем: создаю приложение с реакцией на нажатие кнопки F10. НО! Не могу создать чтоб параллельно работала кнопка F11. Как это реализовать?
Код:
 procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;
const
  MyHotKey = ord(VK_F10);
  MyHotKey1 = ord(VK_F11);

RegisterHotKey(Form1.Handle, MyHotKey, 0, MyHotKey);
RegisterHotKey(Form1.Handle, MyHotKey1, 0, MyHotKey1);


procedure TForm1.WMHotKey(var Msg: TWMHotKey);
var wind:HWND;
begin
wind:= GetForegroundWindow ;
SendMessage(wind,WM_SYSCOMMAND,SC_MINIMIZE,0);
if getasynckeystate($20)<>0 then Show;
end;

это мои отрывки кода. работает только F10.

Последний раз редактировалось Stilet; 11.10.2014 в 12:40.
webersol вне форума Ответить с цитированием
Старый 09.10.2014, 23:18   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Тебе нужно именно глобально зарезервировать клавиши? Именно, чтобы до проги доходило нажатие, даже когда её окно неактивно/свёрнуто/невидимо?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.10.2014, 02:20   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
Сообщение от webersol Посмотреть сообщение
Всем привет! Проблема заключается в следующем: создаю приложение с реакцией на нажатие кнопки F10. НО! Не могу создать чтоб параллельно работала кнопка F11. Как это реализовать?

procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
public
{ Public declarations }
end;
const
MyHotKey = ord(VK_F10);
MyHotKey1 = ord(VK_F11);

RegisterHotKey(Form1.Handle, MyHotKey, 0, MyHotKey);
RegisterHotKey(Form1.Handle, MyHotKey1, 0, MyHotKey1);


procedure TForm1.WMHotKey(var Msg: TWMHotKey);
var wind:HWND;
begin
wind:= GetForegroundWindow ;
SendMessage(wind,WM_SYSCOMMAND,SC_M INIMIZE,0);
if getasynckeystate($20)<>0 then Show;
end;


это мои отрывки кода. работает только F10.
Я могу тебе дать отрыжки моего кода, где много чего не работает. Тебе это поможет?
northener вне форума Ответить с цитированием
Старый 10.10.2014, 10:44   #4
webersol
Заблокирован
 
Регистрация: 09.10.2014
Сообщений: 20
По умолчанию

ДА! Обьявить кнопки нужно глобально, чтоб реакция была при отсутствии окна, и в зависимости от нажатой кнопки происходило то или иное
webersol вне форума Ответить с цитированием
Старый 10.10.2014, 11:36   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

В таком случае могу дать исходники к своей старой дебильной программе, которую писал от нефиг делать на работе ещё под windows xp (под win8.1x64 работает). Прога регает на себя некоторые комбинации клавиш:
Код:
for HotKeyID:= 0 to 9 do
    RegisterHotKey(Application.Handle, HotKeyID, MOD_WIN, $30 + HotKeyID); // Win + 0...9 - звуки юзера
  RegisterHotKey(Application.Handle, 253, MOD_CONTROL or MOD_WIN, VK_F12); // Ctrl + Win + F11 - сказать время
  RegisterHotKey(Application.Handle, 254, MOD_CONTROL or MOD_WIN, VK_F11); // Ctrl + Win + F12 - развернуть из трея
  RegisterHotKey(Application.Handle, 255, MOD_WIN, $20); // Win + Space - прекратить воспроизведение
Сtrl+Win+Fxx работают, щас проверил.
Изображения
Тип файла: jpg 29.jpg (25.6 Кб, 119 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.10.2014, 11:41   #6
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Вот так например (быстренько набросал):
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    procedure WMHotkey( var msg: TWMHotkey ); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Handle, 10, 0, VK_F10);
  RegisterHotKey(Handle, 11, 0, VK_F11);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnregisterHotKey(Handle, 10);
  UnregisterHotKey(Handle, 11);
end;

procedure TForm1.WMHotkey(var msg: TWMHotkey);
begin
  if msg.HotKey = 10 then
    ShowMessage ('Нажата клавиша F10');
  if msg.HotKey = 11 then
    ShowMessage ('Нажата клавиша F11');
end;

end.
FaTaL вне форума Ответить с цитированием
Старый 10.10.2014, 22:55   #7
webersol
Заблокирован
 
Регистрация: 09.10.2014
Сообщений: 20
По умолчанию

Спасибо Вам большое! Очень помогли Все присутсвующие, Вы решили ряд проблем. Спасибо.

P.S. Есть ли функция, которая отлавливает самое спереди-стоящее окно, находит его процесс и убивает? Цель стоит убивать повисшее окно игры, к примеру GTA SA. Эта игра виснет, мелькает диспетчер, видно курсор, но из-за того что ничего не видно приходится перезагружать комп. Я уже давно мечтаю "убивать" такие повисшие окна в нажатие одной кнопки.
webersol вне форума Ответить с цитированием
Старый 11.10.2014, 06:31   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Есть ли функция, которая отлавливает самое спереди-стоящее окно, находит его процесс и убивает? Цель стоит убивать повисшее окно игры, к примеру GTA SA. Эта игра виснет, мелькает диспетчер, видно курсор, но из-за того что ничего не видно приходится перезагружать комп. Я уже давно мечтаю "убивать" такие повисшие окна в нажатие одной кнопки.
а ты пробовал в таких случаях нажимать alt+tab, win+d, win+tab и другие интересные комбинации кнопок?
а ты пробовал юзать хороший годный диспетчер задач вместо стандартного УГ?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 18:37   #9
webersol
Заблокирован
 
Регистрация: 09.10.2014
Сообщений: 20
По умолчанию

Комбинации клавиш не помогают, альтернативным диспетчером пользуюсь. Но смысл? Мне нужно убивать именно процесс, а не задачу. Даже если процесс повисший, я его могу уничтожить. Мне нужно отловить спереди-стояшее окно, узнать его процесс, и убить.
webersol вне форума Ответить с цитированием
Старый 11.10.2014, 18:52   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Комбинации клавиш не помогают
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Горячие клавиши Mihail-pillot Общие вопросы Delphi 6 07.11.2013 14:48
Горячие клавиши Mr_JJ Общие вопросы Delphi 0 07.09.2012 18:40
Горячие клавиши. Lazio Помощь студентам 2 08.09.2010 02:20
Горячие клавиши Altera Общие вопросы Delphi 5 13.09.2008 21:27