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

neo

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

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

  • Посещение

Сообщения, опубликованные neo

  1. Здравствуйте!

    Ребят подскажите а можно ли как-то в андройде определить в каком приложении я в данный момент нахожусь?

    знаю что через манифест можно получить список всех открытых приложений... а вот как именно активного?

    PS

    допустим если в этом приложении используется моя виртуальная клавиатура

  2. Всем привет! ?

    Приобрёл тут себе Apple Magic Mouse 2... чёрную!)) для ноутбука ?

    К сожалению в винде не работают жесты... по ней ведь можно водить пальчиками и например скроллить...

    Есть только одна программка для неё и то платная в год хотят 1500... я вот подумал сделать бесплатную маленькую утилитку...

    Как мне показалось прога работает без всяких драйверов...

     

    Хотел спросить у знатоков как вы думаете это всё через драйвер собственный нужно реализовывать?

    или может её стандартные компоненты увидят типа GestureManager итд?

    просто если так то делов то на 5 мин и людям будет приятно)

     

  3. 9 часов назад, Barbanel сказал:

    Где-то когда-то я читал что хром рендерит окно аналогично 3Д играм.
    Т.е. он сам занимается отрисовкой всего своего содержимого, и не использует окна-компоненты в VCL-ном понимании.
    Аналогично и другие браузеры на основе хромиума.

    Костыльное решение - предполагать что окно ввода url (omnibox, если я не ошибаюсь) находится на ххх пикселей ниже верхнего края окна и на ууу пикселей правее левого края окна.
    Кликаете программно в эту часть мышкой чтобы оно сфокусировалось, и шлете туда все что нужно.
    Прочитать текст из него как мне кажется - не получится, по крайней мере мне не известны способы.
    Возможно есть какойе-то АПИ от гугла, я не в теме, попробуйте поискать.

    Так окей тогда 2 вопроса назрело...

    1) кто-нибудь знает с кем можно поговорить о браузерном API и об omnibox... может тут есть специалисты?

    2) подскажите можно ли как то сразу узнать позицию курсора в чужом окне? или надо узнавать координаты окна и его позицию и далее уже высчитывать в зависимости от позиции курсора на десктопе?

  4. Всем привет!

    Народ такая вот задача... нужно как-то отличать 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 итд

  5. 37 минут назад, kami сказал:

    Т.е. прочитать, что они делают - это излишне? Бессмысленные действия, результат выполнения которых уже известен изначально.

    ну давайте разберёмся... зачем воду лить... эти две строки тут для того чтобы сделать :

    ToUnicode(VK,SC,KS,@Ch,Sizeof(Ch),0);

    их обязательно нужно в MapVirtualKey сделать... без этого не сработает

    можете сами проверить:

    ToUnicode(PBDLLHOOKSTRUCT(lParam).vkCode,PBDLLHOOKSTRUCT( lParam).scanCode,KS,@Ch,Sizeof (Ch),0) ;

  6. это я для примера написал

    без первых двух никак не получится... можно только в 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 сек

    а с другими флагами не получается

  7. Всем привет!
    Перехватываю нажатия клавиш... но к сожалению не получается перехватить буквы с разной раскладкой =(

    если печатаю в своём же окне то всё ок!
    делаю это так:

     

      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;

    но из чужих окон всё приходит на одном и том же языке и регистр не учитывается =(

    в чём может быть проблема?

  8. 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 тоже выявить ошибку не получается =(

    так бы я на таймер просто повесил: если слетел -подгрузи снова

     

  9. Ребята здарова!
    выручайте) весь уже измучился =( не получается =(

    Тема такая, работаю с хуком, использую 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;

    но не помогает =(

    Может это где-то в ЕХЕшнике нужно вставлять? я не понимаю как с ним работать =(
    Может кто на форуме знает? помогите пожалуйста ответом

  10. 5 часов назад, Евгений Корепов сказал:

    А в каком компоненте вы выделяете текст? Если в стандартных компонентах редактирования текста, то может вот так проще?

    
      Edit1.SelStart:=5;
      Edit1.SelLength:=10;
    
      Memo1.SelStart:=5;
      Memo1.SelLength:=5;

     

    Спасибо за совет! но работаю к сож с внешними формами

  11. Всем привет! товарищи специалисты помогите отжать клавишу шифт =(

    выделяю текст через 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);

    Чё делать? =(

     

  12. Всем привет!

    народ кто нибудь знает как сделать снимок сразу с двух камер?

    имеется ввиду не Фронтальная и Тыльная

    а Dual камера на тыльной стороне. Как получить снимок с какой-то одной из этих камер? а потом и со второй..

    и вообще можно ли такое сделать?

  13. Только что, mazayhin сказал:

    Просто apk, без каких-либо папок. Ну или через Play Market.

    спасибо а где можно почитать как добавлять приложение в Play Market?

    у меня apk использует дополнительные внешние картинки и звуковые файлы я их в Deployment добавляю

    так вот когда просто апк запускаю без всего он вылетает тк нету этих картинок и мп3 =(

  14. Здравствуйте! подскажите пожалуйста а где можно почитать или посмотреть как компилировать приложения например для iPad?

    выбрал iOS симулятор а он просит ввести ip адрес машины/порт/и какой-то пароль...???

    и ещё вопрос... для Андройда всё хорошо компилируется.. через usb отладку...

    Скажите а как это приложение кому-то другому дать? просто ведь скопировать файл .apk недостаточно? нужно всю директорию куда-то перенести?

    ipad.png

  15. Всем привет! я тут сделал пасьянс на Андройд

    но обнаружил баг =( когда мешаю карты приложение иногда зависает и вырубается

    я так понял проблема с этим циклом

      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; то вообще открывается только чёрный экран и ничего не видно... =(

    Может быть кто нибудь знает как это ещё можно записать?

  16. 2 часа назад, krapotkin сказал:

    если честно ничего не понятно... как это можно применить =(

    например на форме размещены 2 кнопки.. как на них можно нажать одновременно?

×
×
  • Создать...