Конференция "WinAPI" » Подскажите по WinApi
 
  • Дмитрий Белькевич (07.01.12 19:01) [20]

    > 2Дмитрий Белькевич, я вас понял, спасибо. Кнопка в фокусе
    > и она нажмется, но сперва надо найти Handle "текстового
    > окна", чтобы туда имя файла послать или оно тоже без handle
    > можно, если оно в фокусе стоит?


    Если фокус в edit'е, то можно просто keybd_event'ами в нем что-то набрать, без handl'ов, насколько я помню.
  • romsn111 © (08.01.12 18:12) [21]
    Программа стоит :) Сообщение к ней не доходит, пока не обработается хууком (функцией фильтром). Если использовать procret то хук стартует полсле закрытия диалогового окна и вводить уже некуда :)
  • QAZ (08.01.12 22:14) [22]
    чета какаято нездоровая тенденция пошла,писать программы для нажимания кнопок в других программах
  • romsn111 © (08.01.12 22:36) [23]
    Учиться то никто не запрещает :) Почему вы считаете что нажимание кнопок в чужих программах "нездорово". Вот с чего то надо начинать, вот начинаю с этого? Или другие сразу со "здоровыми" идеями рождаются? :)
  • Дмитрий Белькевич (08.01.12 23:47) [24]

    >
    > чета какаято нездоровая тенденция пошла,писать программы
    > для нажимания кнопок в других программах


    ну я, например, для автотестов пользую. благо, что софт свой же, то с ним немного проще договориться.
    еще как-то из сторонней либы (дллки на билдере) приходилось недостающие данные прямо из формы из TEdit забирать. в саппорт стучали, программисты отказались нужные данные передавать, то сам забрал :)
  • Дмитрий Белькевич (08.01.12 23:50) [25]

    > Сообщение к ней не доходит, пока не обработается хууком
    > (функцией фильтром).


    зачем хук? синхронизация?
  • romsn111 © (09.01.12 12:13) [26]
    Это примерно как?? не умею :)
  • Омлет © (09.01.12 14:25) [27]
    Зачем тут хук? Всё проще:

    var
     hW, hEdit, hBtn: HWND;
     path: AnsiString;
     idBtn: integer;
    begin
     hW := FindWindow(nil, 'Открыть);
     if hW <> 0 then
     begin
       hEdit := FindWindowEx(hW, 0, '
    ComboBoxEx32', '');
       if hEdit <> 0 then
       begin
         path := '
    C:\base\MyUserDataBase.udb';
         SendMessage(hEdit, WM_SETTEXT, 0, integer(path));

         hBtn := FindWindowEx(hW, 0, '
    Button', '&Открыть');
         if hBtn <> 0 then
         begin
           IdBtn:=GetDlgCtrlID(hBtn);
           SendMessage(hW, WM_COMMAND, MakeWParam(IdBtn, BN_CLICKED), hBtn);
         end;
       end;
     end;
    end;

  • Дмитрий Белькевич (09.01.12 17:36) [28]

    > Это примерно как?? не умею :)


    В смысле - зачем тебе вообще тут хук?

    Пробуй [27]...
  • romsn111 © (15.01.12 17:11) [29]
    Подскажите что за прикол:
    функция обработки EnumWindow
    function FindDialog(Wd: HWnd; Param: LongInt): Boolean; stdcall;
    var
     ClassName: array [0..254] of Char;
    begin
     FindDialog:=True;
     GetClassName(Wd, ClassName, SizeOf(ClassName));
     if ClassName='#32770' then
       if GetWindowThreadProcessId(Wd,nil) = idFrm then
         begin
           //hDialog:=Wd;
           FindDialog:=False;
           showmessage('íàøåë');
         end;
    end;


    функция вызова
    EnumWindows(@FindDialog,0);



    Прикол в том, что через некоторое время (около секунды) переменная hDialog становится равной нулю. hDialog в глобальных переменных. Больше её никто не использует и не меняет
  • romsn111 © (15.01.12 17:12) [30]
    блин, hDialog:=Wd; конечно же не закомментирована, просто скопировал так :)
  • romsn111 © (15.01.12 17:15) [31]
    ммм.... действительно я туплю, нашел ошибку в другом месте.
    Вопрос снят :)
 
Конференция "WinAPI" » Подскажите по WinApi
Есть новые Нет новых   [134430   +4][b:0][p:0.002]