-
Постов
64 -
Зарегистрирован
-
Посещение
Посетители профиля
2 814 просмотра профиля
Достижения neo
-
neo отреагировал на ответ на вопрос: Как убрать клаву по окончанию ввода в TEdit ?
-
neo отреагировал на ответ на вопрос: Как получить от виртуальной клавиатуры символ который был введен?
-
вот что нашёл... думаю там где-то есть ответ на этот вопрос http://qaru.site/questions/26562/determining-the-current-foreground-application-from-a-background-task-or-service но как применить это в дельфи не знаю =(
-
neo изменил фотографию своего профиля
-
Здравствуйте! Ребят подскажите а можно ли как-то в андройде определить в каком приложении я в данный момент нахожусь? знаю что через манифест можно получить список всех открытых приложений... а вот как именно активного? PS допустим если в этом приложении используется моя виртуальная клавиатура
-
Всем привет! ? Приобрёл тут себе Apple Magic Mouse 2... чёрную!)) для ноутбука ? К сожалению в винде не работают жесты... по ней ведь можно водить пальчиками и например скроллить... Есть только одна программка для неё и то платная в год хотят 1500... я вот подумал сделать бесплатную маленькую утилитку... Как мне показалось прога работает без всяких драйверов... Хотел спросить у знатоков как вы думаете это всё через драйвер собственный нужно реализовывать? или может её стандартные компоненты увидят типа GestureManager итд? просто если так то делов то на 5 мин и людям будет приятно)
-
Так окей тогда 2 вопроса назрело... 1) кто-нибудь знает с кем можно поговорить о браузерном API и об omnibox... может тут есть специалисты? 2) подскажите можно ли как то сразу узнать позицию курсора в чужом окне? или надо узнавать координаты окна и его позицию и далее уже высчитывать в зависимости от позиции курсора на десктопе?
-
Всем привет! Народ такая вот задача... нужно как-то отличать ClassName в браузерах... то есть надо отличать адресную строку от основного бокса браузера... проблема в том что ИмяКласса в них одинаковое... или я просто как-то неправильно его получаю... вот пример DelphiВыделить код 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function GetCN(Handle: THandle): String; var Buffer: array[0..MAX_PATH] of Char; begin GetClassName(Handle, @Buffer, MAX_PATH); Result := String(Buffer); end; procedure TForm1.Timer1Timer(Sender: TObject); var xFocus: HWND; begin AttachThreadInput(GetCurrentThreadID,GetWindowThreadProcessId(GetForegroundWindow,nil),True); xFocus:=GetFocus; AttachThreadInput(GetCurrentThreadID,GetWindowThreadProcessId(GetForeGroundWindow,nil),False); Edit1.Text:=GetCN(xfocus); end; Проблема в том что например в Хроме везде написано Chrome_WidgetWin_1 в фаерфоксе MozillaWindowClass итд
-
кстати нет) проверил на стареньком компе с 10ой там тоже всё шустро...
-
Приехал домой мой код с MapVirtualKeyEx под Win10 отлично работает... до этого тестировал на Win7.. интересно это из за винды или комп мощней?
-
ну давайте разберёмся... зачем воду лить... эти две строки тут для того чтобы сделать : ToUnicode(VK,SC,KS,@Ch,Sizeof(Ch),0); их обязательно нужно в MapVirtualKey сделать... без этого не сработает можете сами проверить: ToUnicode(PBDLLHOOKSTRUCT(lParam).vkCode,PBDLLHOOKSTRUCT( lParam).scanCode,KS,@Ch,Sizeof (Ch),0) ;
-
это я для примера написал без первых двух никак не получится... можно только в WH_KEYBOARD провозился весь день сделал так: function xToUnicode(key: word): char; var newHKL: PWideChar; KS: TKeyboardState; Ch: Char; VK, SC: cardinal; layout:integer; begin layout:= GetKeyboardLayout(GetWindowThreadProcessID(GetForegroundWindow,nil)) shr 16; newHKL:=PChar('0000'+IntToHex(layout,4)); SC := MapVirtualKeyEx(Key, MAPVK_VK_TO_VSC,LoadKeyboardLayout(newHKL, KLF_ACTIVATE )); VK := MapVirtualKeyEx(SC, MAPVK_VSC_TO_VK,LoadKeyboardLayout(newHKL,KLF_ACTIVATE)); GetKeyboardState(KS); ToUnicode(VK,SC,KS,@Ch,Sizeof(Ch),0); result:=ch; end; но LoadKeyboardLayout(newHKL, KLF_ACTIVATE ) с флагом KLF_ACTIVATE очень тормозит... 1 -3 сек а с другими флагами не получается
-
Всем привет! Перехватываю нажатия клавиш... но к сожалению не получается перехватить буквы с разной раскладкой =( если печатаю в своём же окне то всё ок! делаю это так: SC := MapVirtualKey(PBDLLHOOKSTRUCT(lParam).vkCode, MAPVK_VK_TO_VSC); VK := MapVirtualKey(PBDLLHOOKSTRUCT(lParam).scanCode, MAPVK_VSC_TO_VK); if code>=0 then begin if (wParam=WM_KEYDOWN) then begin GetKeyboardState(KS); ToUnicode(VK,SC,KS,@Ch,Sizeof(Ch),0); Form1.Edit1.Text:=Form1.Edit1.Text+ch; end; но из чужих окон всё приходит на одном и том же языке и регистр не учитывается =( в чём может быть проблема?
-
да уже пробовал в ехе делать но всё также...пост тоже пробовал но всё криво тогда работает... неправильно ответы приходят... там в любом случае должна быть небольшая синхронизации тк нужно дожидаться ответа от idHTTP пробовал даже через таймер и отдельный поток но всё не так качественно работает как через SendMEssage... вот вроде решение этой проблемы на Си но я его не понимаю =( #include "stdafx.h" #include <windows.h> LRESULT CALLBACK LLKeyProc(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode <= 0) { if(wParam == WM_KEYDOWN) keybd_event( 0x41, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); return 1; } return CallNextHookEx(NULL, nCode, wParam, lParam); } int main() { HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL, LLKeyProc, GetModuleHandle(NULL), 0); if(hook) { while(WaitMessage()) { MSG msg = {0}; while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if(msg.message == WM_QUIT) { UnhookWindowsHookEx(hook); return 0; } TranslateMessage(&msg); DispatchMessage(&msg); } } } return 0; } кстати Подскажите... а как узнать что KeyboardHandle:=SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardHook, HInstance, 0); - слетел? я думал что хендл должен стать 0 но он не меняется =( также я писал в основной функции lastError:=GetLastError; но после того как она слетает lastError так и остаётся 0 =( вот как получить код этой моей ошибки??? =( через try except тоже выявить ошибку не получается =( так бы я на таймер просто повесил: если слетел -подгрузи снова
-
Ребята здарова! выручайте) весь уже измучился =( не получается =( Тема такая, работаю с хуком, использую WH_KEYBOARD_LL тк нужно работать и с 32 битной и 64 битной разрядностью. и вообще мне нравится с ним работать всё очень просто и удобно но появилось одно НО =( WH_KEYBOARD_LL работает до добавления сообщения в очередь в контексте потока. и это действительно так =( дело в том что я через хук ловлю введённую информацию и потом обрабатываю это через idHTTP (ищу в интернете ответ)... если сигнал хороший то всё круть... а когда связь не очень.. и происходят небольшие задержки.. как я понимаю в WH_KEYBOARD_LL складируются результаты которые он не может передать и затем хук выбивается... тоесть чтобы всё вновь заработало нужно сделать так KeyboardHandle:=SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardHook, HInstance, 0); и хук по прежнему работает до тех пор пока не вылетит вновь. Чтобы решить эту проблему как я понял нужно использовать PeekMessage или GetMessage и удалять излишки... Но в сети очень мало информации о том как ими пользоваться я не понимаю куда и как их вставлять. Я делал вот так... писал в ДЛЛке function KeyboardHook(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var msg:TMsg; begin if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then exit; if code>=0 then begin if (wParam=WM_KEYDOWN) then begin SendMessage(FindWindow('TForm1', 'Form1'), KeyboardEvent, 0,PBDLLHOOKSTRUCT(lParam).vkCode); end; end; Result:=CallNextHookEx(KeyboardHandle, code, wParam, lParam) end; // if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then exit; // типа если есть излишки выходи так же вставлял там это: while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; но не помогает =( Может это где-то в ЕХЕшнике нужно вставлять? я не понимаю как с ним работать =( Может кто на форуме знает? помогите пожалуйста ответом
-
Спасибо за совет! но работаю к сож с внешними формами
-
еслиделать вот так 2 раза то всё норм keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); Keybd_Event(VK_shift,MapVirtualKey(VK_shift,0),KEYEVENTF_KEYUP,0);
-
Всем привет! товарищи специалисты помогите отжать клавишу шифт =( выделяю текст через Shift+Left (метод ctrl+a не подходит) в Win7 всё работало хорошо тк выделял вот так: Keybd_Event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0); for i:=0 to X do begin Keybd_Event(vk_left,MapVirtualKey(vk_left,0),0,0); Keybd_Event(vk_left,MapVirtualKey(vk_left,0),KEYEVENTF_KEYUP,0); Sleep(100); end; Keybd_Event(VK_shift,MapVirtualKey(VK_shift,0),KEYEVENTF_KEYUP,0); Но сейчас в Win10 так текст не выделяется =( приходится выделять вот так keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY, 0); так всё выделяет... но после этого, когда нажимаешь на другие клавиши видно что шифт запал тк вместо abc123 будет ABC!@# таким методом он не отжимается: keybd_event(VK_SHIFT, 0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); Чё делать? =(