On-line: tnsr2, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
администратор




Пост N: 4230
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.10.14 16:56. Заголовок: Нажатия клавиш ALT , SHIFT , CTRL


В своей программе на ряд этих клавиш повесил свои функции.
Имею в виду нажатие правого(левого) SHIFT и тд (в теме указал)
Все четко работает , но есть косяк от которого ни как не могу избавиться.
Допустим программа загружена , переключаюсь скажем в EXCEL и там жму
одну из этих кнопок и моя прога на это реагирует хотя и не в фокусе.
Хорошо если на этих педалях висят безобидные функции типа поиска а если нет.
В журнале заявок у себя в проге я делал скрытое удаление заявки минуя журнал
корректировок , это удаление у меня срабатывало так: жмем правый SHIFT и держим не
менее 2 секунд, отпускаем и жмем левый SHIFT и заявка тю тю.
Находясь в EXCEL и набирая текст такая комбинация может легко сработать в проге.
Как бороться с этим не пойму. Юзал разные функции для поимки нажатий этих
клавиш , результат одинаков.

PS
Harbour ,GTWVT

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 13 [только новые]







Пост N: 422
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 15.10.14 19:33. Заголовок: Нужно поймать событи..


Нужно поймать событие HB_K_LOSTFOCUS и до тех пока не будет HB_K_GOTFOCUS - игнорировать все эти нажатия.

Для GTWVT подойдет, для GTWVG - нет.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3662
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.10.14 20:33. Заголовок: Dima пишет: Harbour..


Dima пишет:

 цитата:
Harbour ,GTWVT



У меня в проге на хХарборе даже мышка по меню выбирает, хотя поверх окна программы ВОРД наложен.
Благо меню печати последнее...
Побороть это не смог.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4231
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.10.14 13:58. Заголовок: Sergy Не совсем пон..


Sergy
Не совсем понял.
Вот самодостаточный пример. При нажатии ALT или SHIFT или CTRL если программа не в фокусе
выход из нее не должен происходить а он происходит.

 
Proc main
local nkey:=0
local lnkey:=0
local aret:={1001,1000,1005,1004,1003,1002}
do while .t.
nKey:=ft_sinkey(0.01)
if nKey==27
exit
else
? nkey
endif



lnkey:=iskey() // вот тут нужно что бы не срабатывало если окно не в фокусе
if lnkey#0
nkey:=lnkey
exit
endif

if ascan(nKey,aret)>0
exit
endif




enddo
return
**************************
Func Iskey()
local iStatus:={GetLShiftState(),GetRShiftState(),GetLAltState(),GetRAltState(),GetLCtrlState(),GetRCtrlState()}
local aret:={1001,1000,1005,1004,1003,1002}
local ret:=0
local nret
for each nret in iStatus
if nret<0
ret:=aret[Hb_enumindex()]
exit
endif
next
return ret
***********************
#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"

HB_FUNC( GETLCTRLSTATE )
{
hb_retni( GetKeyState(VK_LCONTROL) );
}

HB_FUNC( GETRCTRLSTATE )
{
hb_retni( GetKeyState(VK_RCONTROL) );
}

HB_FUNC( GETLSHIFTSTATE )
{
hb_retni( GetKeyState(VK_LSHIFT) );
}

HB_FUNC( GETRSHIFTSTATE )
{
hb_retni( GetKeyState(VK_RSHIFT) );
}

HB_FUNC( GETLALTSTATE )
{
hb_retni( GetKeyState(VK_LMENU) );
}

HB_FUNC( GETRALTSTATE )
{
hb_retni( GetKeyState(VK_RMENU) );
}

#pragma ENDDUMP



PS
Сборка
hbmk2 test -gtwvt -lxhb -lhbnf

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 424
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 17.10.14 23:08. Заголовок: Dima пишет: Не совс..


Dima пишет:

 цитата:
Не совсем понял.
Вот самодостаточный пример. При нажатии ALT или SHIFT или CTRL если программа не в фокусе
выход из нее не должен происходить а он происходит.



Вот что имелось в виду:

 
#include "inkey.ch"

Proc main

local nkey:=0
local lnkey:=0
local aret:={1001,1000,1005,1004,1003,1002}
local lFocused := .T.

do while .t.
nKey:=inkey(0.01,INKEY_ALL + HB_INKEY_GTEVENT)
if nKey==27
exit
elseif nKey == HB_K_LOSTFOCUS
lFocused := .F.
elseif nKey == HB_K_GOTFOCUS
lFocused := .T.
else
? nkey
endif

IF lFocused
lnkey:=iskey() // вот тут нужно что бы не срабатывало если окно не в фокусе
if lnkey # 0
nkey:=lnkey
exit
endif
ENDIF

if ascan(nKey,aret)>0
exit
endif
enddo
return


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4232
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.10.14 09:22. Заголовок: Sergy Спасибо !..


Sergy
Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 425
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 18.10.14 17:15. Заголовок: Dima - не за что. :..


Dima - не за что.

Ты мне лучше скажи, как "правильно" читать в приложении статусы Shift, Ctrl, Alt ?

Если опрашивать XX раз в секунду состояние клавиатуры - так это рудимент из эпохи MS-DOS получается, а как по другому - не пойму...


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4233
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.10.14 17:23. Заголовок: Sergy пишет: Ты мне..


Sergy пишет:

 цитата:
Ты мне лучше скажи, как "правильно" читать в приложении статусы Shift, Ctrl, Alt ?

Если опрашивать XX раз в секунду состояние клавиатуры - так это рудимент из эпохи MS-DOS получается, а как по другому - не пойму...


Примерчик то есть выше. Да "рудимент" но работает , использую исключительно при работе с бровсом.
Привык народ юзать ALT для поиска по названию и CTRL для поиска кода. Предлагал им другие педали , не хотят.
По ходу если опрашивать так INKEY(0.01) то и "задержки" нет да и проц не грузит.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4471
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.02.15 18:12. Заголовок: Можно ли как то полу..


Можно ли как то получить хендл текущего активного окна ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4472
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.02.15 18:33. Заголовок: Проехали. Видимо так..


Проехали. Видимо так
 
#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>
HB_FUNC (GETFOREGROUNDWINDOW)
{
HWND hWnd = GetForegroundWindow();
hb_retnl ((LONG) hWnd);
}


#pragma ENDDUMP



Плотно чеканул , работает норм !
В самом начале функции считал хэндл активного окна и затем перед считыванием (Alt Ctrl Shift) ниже сверяю
с хэндлом активного окна , не совпало.......досвидос.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 433
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 11.02.15 14:02. Заголовок: При запуске программ..


При запуске программы её окно может быть неактивным...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4475
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.15 14:08. Заголовок: Sergy пишет: При за..


Sergy пишет:

 цитата:
При запуске программы её окно может быть неактивным...


Это я не верно написал. На самом деле хэндл считываю находясь в бровсе , именно там
идет обработка этих педалей.
Примерно так
 
Func My_browse(...)
Local hwnd:=GETFOREGROUNDWINDOW()
.........
...........
if GETFOREGROUNDWINDOW()==hwnd
* тут обработка нажатий Alt , Ctrl , Shift


endif
...............
................
return


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 121
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 11.02.15 16:25. Заголовок: Как бороться с этим не пойму...


Поставить требование подтверждения оператора на вопрос {Нет, Да} - по дефолту - в {Нет}
Оператор должен выбрать {стрелка вправо, Enter} или мышкой.
Чужие из буфера keyboard вряд ли пройдут.
Так устроено - включение/выключение мобильника - две клавиши по очереди.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4476
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.15 23:34. Заголовок: Sergy пишет: При з..


Sergy пишет:

 цитата:

При запуске программы её окно может быть неактивным...


Натолкнул ты меня на одну мыслю.....проверил. Ты прав.
Слегка изменил код. Сенкс !

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 661
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет