Перейти к содержанию
Fire Monkey от А до Я

neo

Пользователи
  • Постов

    64
  • Зарегистрирован

  • Посещение

Посетители профиля

2 814 просмотра профиля
  1. вот что нашёл... думаю там где-то есть ответ на этот вопрос http://qaru.site/questions/26562/determining-the-current-foreground-application-from-a-background-task-or-service но как применить это в дельфи не знаю =(
  2. Здравствуйте! Ребят подскажите а можно ли как-то в андройде определить в каком приложении я в данный момент нахожусь? знаю что через манифест можно получить список всех открытых приложений... а вот как именно активного? PS допустим если в этом приложении используется моя виртуальная клавиатура
  3. Всем привет! ? Приобрёл тут себе Apple Magic Mouse 2... чёрную!)) для ноутбука ? К сожалению в винде не работают жесты... по ней ведь можно водить пальчиками и например скроллить... Есть только одна программка для неё и то платная в год хотят 1500... я вот подумал сделать бесплатную маленькую утилитку... Как мне показалось прога работает без всяких драйверов... Хотел спросить у знатоков как вы думаете это всё через драйвер собственный нужно реализовывать? или может её стандартные компоненты увидят типа GestureManager итд? просто если так то делов то на 5 мин и людям будет приятно)
  4. Так окей тогда 2 вопроса назрело... 1) кто-нибудь знает с кем можно поговорить о браузерном API и об omnibox... может тут есть специалисты? 2) подскажите можно ли как то сразу узнать позицию курсора в чужом окне? или надо узнавать координаты окна и его позицию и далее уже высчитывать в зависимости от позиции курсора на десктопе?
  5. Всем привет! Народ такая вот задача... нужно как-то отличать 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 итд
  6. кстати нет) проверил на стареньком компе с 10ой там тоже всё шустро...
  7. Приехал домой мой код с MapVirtualKeyEx под Win10 отлично работает... до этого тестировал на Win7.. интересно это из за винды или комп мощней?
  8. ну давайте разберёмся... зачем воду лить... эти две строки тут для того чтобы сделать : ToUnicode(VK,SC,KS,@Ch,Sizeof(Ch),0); их обязательно нужно в MapVirtualKey сделать... без этого не сработает можете сами проверить: ToUnicode(PBDLLHOOKSTRUCT(lParam).vkCode,PBDLLHOOKSTRUCT( lParam).scanCode,KS,@Ch,Sizeof (Ch),0) ;
  9. это я для примера написал без первых двух никак не получится... можно только в 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 сек а с другими флагами не получается
  10. Всем привет! Перехватываю нажатия клавиш... но к сожалению не получается перехватить буквы с разной раскладкой =( если печатаю в своём же окне то всё ок! делаю это так: 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; но из чужих окон всё приходит на одном и том же языке и регистр не учитывается =( в чём может быть проблема?
  11. да уже пробовал в ехе делать но всё также...пост тоже пробовал но всё криво тогда работает... неправильно ответы приходят... там в любом случае должна быть небольшая синхронизации тк нужно дожидаться ответа от 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 тоже выявить ошибку не получается =( так бы я на таймер просто повесил: если слетел -подгрузи снова
  12. Ребята здарова! выручайте) весь уже измучился =( не получается =( Тема такая, работаю с хуком, использую 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; но не помогает =( Может это где-то в ЕХЕшнике нужно вставлять? я не понимаю как с ним работать =( Может кто на форуме знает? помогите пожалуйста ответом
  13. Спасибо за совет! но работаю к сож с внешними формами
  14. еслиделать вот так 2 раза то всё норм keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); Keybd_Event(VK_shift,MapVirtualKey(VK_shift,0),KEYEVENTF_KEYUP,0);
  15. Всем привет! товарищи специалисты помогите отжать клавишу шифт =( выделяю текст через 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); Чё делать? =(
×
×
  • Создать...