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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2016, 14:18   #1
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
Вопрос отключение залипания клавиш и фильтрации ввода

Здравствуйте.
В программе в FormKeyDown обрабатывается нажатие клавиш стрелок, в том числе и с клавишей Shift. При этом если долго держать правый Shift (больше 8 сек), вылезает окно с вопросом про фильтрацию ввода. Аналогично фишка с шифтом для залипания клавиш. Как программно отключить появление этого окна? А по завершении программы включить? Или может просто это как-то игнорировать?
fanlis вне форума Ответить с цитированием
Старый 15.12.2016, 15:19   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Копайте тут:
SystemParametersInfo
SPI_GETSTICKYKEYS
SPI_SETSTICKYKEYS
kropotkina-alice вне форума Ответить с цитированием
Старый 16.12.2016, 09:39   #3
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Покопал. На всех форумах написан примерно такой же ответ, но как этим пользоваться, никто не знает. Обычно отвечают: "не знаю, нашел в инете SystemParametersInfo, SPI_GETSTICKYKEYS, SPI_SETSTICKYKEYS" и все.
Может кто знает, как этим пользоваться?

В конце концов в играх часто используют шифт, чтобы, например, ускорить движение персонажа.
fanlis вне форума Ответить с цитированием
Старый 19.12.2016, 10:04   #4
fanlis
Пользователь
 
Регистрация: 13.05.2007
Сообщений: 60
По умолчанию

Долго я мучился, но все же получилось! Ура!

Вот код
Код:
//глобальные переменные
var
  stikykeys,filterkeys: byte;
  Stike: TstickyKeys;
  Filt: TFilterKeys;


procedure TForm1.FormCreate(Sender: TObject);
begin
//запомним и отключим залипание клавиш (если оно было)
  stikykeys:=0;
  stike.cbSize:=SizeOf(TStickyKeys);
  stike.dwFlags:=0;
  if SystemParametersInfo( SPI_GETSTICKYKEYS, SizeOf(TStickyKeys), @stike, 0 ) then
  begin
    if stike.dwFlags and ( SKF_STICKYKEYSON or SKF_HOTKEYACTIVE ) > 0 then
    begin
      if ( stike.dwFlags and SKF_STICKYKEYSON ) > 0 then stikykeys:= 1;
      if ( stike.dwFlags and SKF_HOTKEYACTIVE ) > 0 then stikykeys:= stikykeys or 2;
      stike.dwFlags:= stike.dwFlags and not(SKF_STICKYKEYSON or SKF_HOTKEYACTIVE);
      SystemParametersInfo( SPI_SETSTICKYKEYS, SizeOf(TStickyKeys), @stike, 0 );
    end;
  end;

//запомним и отключим фильтрацию ввода (если она была)
  filterkeys:=0;
  Filt.cbSize:=SizeOf(TFilterKeys);
  Filt.dwFlags:=0;
  if SystemParametersInfo(SPI_GETFILTERKEYS, SizeOf(TFilterKeys), @Filt, 0) then
  begin
    if Filt.dwFlags and (FKF_FILTERKEYSON or FKF_HOTKEYACTIVE)>0 then
    begin
      if (Filt.dwFlags and FKF_FILTERKEYSON)>0 then filterkeys:=1;
      if (Filt.dwFlags and FKF_HOTKEYACTIVE)>0 then filterkeys:=filterkeys or 2;
      Filt.dwFlags:=Filt.dwFlags and not(FKF_FILTERKEYSON or FKF_HOTKEYACTIVE);
      SystemParametersInfo(SPI_SETFILTERKEYS, SizeOf(TFilterKeys), @Filt, 0);
    end;
  end;
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//восстановим залипание клавиш
  if stikykeys>0 then
  begin
    if (stikykeys and 1)>0 then stike.dwFlags:=stike.dwFlags or SKF_STICKYKEYSON;
    if (stikykeys and 2)>0 then stike.dwFlags:=stike.dwFlags or SKF_HOTKEYACTIVE;
    SystemParametersInfo(SPI_SETSTICKYKEYS, SizeOf(TStickyKeys), @stike, 0);
  end;

//восстановим фильтрацию ввода
  if filterkeys>0 then
  begin
    if (filterkeys and 1)>0 then Filt.dwFlags:=Filt.dwFlags or FKF_FILTERKEYSON;
    if (filterkeys and 2)>0 then Filt.dwFlags:=Filt.dwFlags or FKF_HOTKEYACTIVE;
    SystemParametersInfo(SPI_SETFILTERKEYS, SizeOf(TFilterKeys), @Filt, 0);
  end;
end;
fanlis вне форума Ответить с цитированием
Старый 19.12.2016, 10:50   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Поздравляю с победой!
kropotkina-alice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Произвольное включение\отключение клавиш на ноутбуке w2heles Компьютерное железо 1 28.01.2014 06:33
Отключение сочетания клавиш <Ctrl>+<Alt>+<Del> misher Win Api 11 23.05.2012 18:11
Отключение горячих клавиш Windows FaTaL Win Api 8 11.10.2011 17:37
отключение ошибок ввода вывода nikolas0 Общие вопросы Delphi 5 06.02.2011 00:15
отключение клавиш fuv Общие вопросы Delphi 8 20.05.2007 18:02