-
Постов
64 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные neo
-
-
Здравствуйте!
Ребят подскажите а можно ли как-то в андройде определить в каком приложении я в данный момент нахожусь?
знаю что через манифест можно получить список всех открытых приложений... а вот как именно активного?
PS
допустим если в этом приложении используется моя виртуальная клавиатура
-
Всем привет!
Приобрёл тут себе Apple Magic Mouse 2... чёрную!)) для ноутбука
К сожалению в винде не работают жесты... по ней ведь можно водить пальчиками и например скроллить...
Есть только одна программка для неё и то платная в год хотят 1500... я вот подумал сделать бесплатную маленькую утилитку...
Как мне показалось прога работает без всяких драйверов...
Хотел спросить у знатоков как вы думаете это всё через драйвер собственный нужно реализовывать?
или может её стандартные компоненты увидят типа GestureManager итд?
просто если так то делов то на 5 мин и людям будет приятно)
-
9 часов назад, Barbanel сказал:
Где-то когда-то я читал что хром рендерит окно аналогично 3Д играм.
Т.е. он сам занимается отрисовкой всего своего содержимого, и не использует окна-компоненты в VCL-ном понимании.
Аналогично и другие браузеры на основе хромиума.Костыльное решение - предполагать что окно ввода url (omnibox, если я не ошибаюсь) находится на ххх пикселей ниже верхнего края окна и на ууу пикселей правее левого края окна.
Кликаете программно в эту часть мышкой чтобы оно сфокусировалось, и шлете туда все что нужно.
Прочитать текст из него как мне кажется - не получится, по крайней мере мне не известны способы.
Возможно есть какойе-то АПИ от гугла, я не в теме, попробуйте поискать.Так окей тогда 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 итд -
В 13.03.2019 в 10:48, Barbanel сказал:
Второе.
Если запустить на 16ядерном компе - то даже под XP заработает)кстати нет) проверил на стареньком компе с 10ой там тоже всё шустро...
-
Приехал домой мой код с MapVirtualKeyEx под Win10 отлично работает... до этого тестировал на Win7..
интересно это из за винды или комп мощней?
-
37 минут назад, kami сказал:
Т.е. прочитать, что они делают - это излишне? Бессмысленные действия, результат выполнения которых уже известен изначально.
ну давайте разберёмся... зачем воду лить... эти две строки тут для того чтобы сделать :
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;
но из чужих окон всё приходит на одном и том же языке и регистр не учитывается =(
в чём может быть проблема? -
5 часов назад, kami сказал:
PeekMessage - бессмысленно и даже вредно с флагом PM_REMOVE. Убрать.
SendMessage - эта функция отправляет данные окну и дожидается, пока окно их обработает. А хук ждать не должен, его задача - максимально быстро отработать. Заменить на PostMessage.
длл здесь не нужна. LL-хуки работают из любого места. Просто перенести весь код в exe.
да уже пробовал в ехе делать но всё также...пост тоже пробовал но всё криво тогда работает... неправильно ответы приходят... там в любом случае должна быть небольшая синхронизации тк нужно дожидаться ответа от 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
beginSendMessage(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;но не помогает =(
Может это где-то в ЕХЕшнике нужно вставлять? я не понимаю как с ним работать =(
Может кто на форуме знает? помогите пожалуйста ответом -
5 часов назад, Евгений Корепов сказал:
А в каком компоненте вы выделяете текст? Если в стандартных компонентах редактирования текста, то может вот так проще?
Edit1.SelStart:=5; Edit1.SelLength:=10; Memo1.SelStart:=5; Memo1.SelLength:=5;
Спасибо за совет! но работаю к сож с внешними формами
-
еслиделать вот так 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
beginKeybd_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);
Чё делать? =(
-
Всем привет!
народ кто нибудь знает как сделать снимок сразу с двух камер?
имеется ввиду не Фронтальная и Тыльная
а Dual камера на тыльной стороне. Как получить снимок с какой-то одной из этих камер? а потом и со второй..
и вообще можно ли такое сделать?
-
Только что, mazayhin сказал:
"Окей, Гугл! Как выложить приложение в play market?" не помогло?
думал может на форуме есть какие-нибудь интересные темки =) через поиск их не нашёл) окей спасибо
-
Только что, mazayhin сказал:
Просто apk, без каких-либо папок. Ну или через Play Market.
спасибо а где можно почитать как добавлять приложение в Play Market?
у меня apk использует дополнительные внешние картинки и звуковые файлы я их в Deployment добавляю
так вот когда просто апк запускаю без всего он вылетает тк нету этих картинок и мп3 =(
-
Здравствуйте! подскажите пожалуйста а где можно почитать или посмотреть как компилировать приложения например для iPad?
выбрал iOS симулятор а он просит ввести ip адрес машины/порт/и какой-то пароль...???
и ещё вопрос... для Андройда всё хорошо компилируется.. через usb отладку...
Скажите а как это приложение кому-то другому дать? просто ведь скопировать файл .apk недостаточно? нужно всю директорию куда-то перенести?
-
спасибо сейчас попробую)
-
Всем привет! я тут сделал пасьянс на Андройд
но обнаружил баг =( когда мешаю карты приложение иногда зависает и вырубается
я так понял проблема с этим циклом
for pos:=1 to 20 do begin repeat empty:=True; r:=randomRange(1, 21); for n:=1 to pos do if (card[n]=r) then empty:=False; until empty=true; card[pos]:=r; Memo1.Lines.Add(inttostr(card[pos])); end;
тут генерируется числа от 1 до 20.. каждое число уникальное..
что неужели для современных гаджетов это очень мощная нагрузка на проц? сгенерировать таким образом 20 чисел?
кстати если я меняю строчку r:=randomRange(1, 21); на r:=random(19)+1; то вообще открывается только чёрный экран и ничего не видно... =(
Может быть кто нибудь знает как это ещё можно записать?
-
но цвет в popover окне не меняется... меняется только цвет у боковой панели =(
а как изменить цвет в popover окне?
-
2 часа назад, krapotkin сказал:
если честно ничего не понятно... как это можно применить =(
например на форме размещены 2 кнопки.. как на них можно нажать одновременно?
-
24 минуты назад, krapotkin сказал:
спасибо сейчас почитаю...
-
причём видел игры где это работает так что это точно как-то можно реализовать... =(
определить активное приложение
в Использование Android API
Опубликовано
вот что нашёл... думаю там где-то есть ответ на этот вопрос
http://qaru.site/questions/26562/determining-the-current-foreground-application-from-a-background-task-or-service
но как применить это в дельфи не знаю =(