Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод данных в чужое окно. 
:(
    Опции темы
HAS
Дата 26.7.2006, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Следующим кодом, если запущен блокнот, то он вызывает окно редактора шрифта
Код

procedure SendKey(Key: Word);
begin
  keybd_event(Key,0,0,0);
  keybd_event(Key,0,KEYEVENTF_KEYUP,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    font:HWND;
    cols:array[1..3] of HWND;
    H:hWnd;
    i:integer;
begin
 H := FindWindow( nil, 'Безымянный - Блокнот');
 SetForegroundWindow(H);

 sleep(10);
 SetForegroundWindow(H);
 sleep(10);
 SendKey(VK_MENU);

   for i:=1 to 2 do
   SendKey(VK_RIGHT);
   sendkey(VK_RETURN);
   sendkey(vk_down);
   sendkey(VK_RETURN);
end;

А как можно при помощи апи послать сообщение об измене шрифта или размера шрифта ?!
спасибо. 
PM MAIL   Вверх
Yanis
Дата 26.7.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



HAS
Посмотри пример Rennigth'а.
http://forum.vingrad.ru/index.php?showtopic=58277 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
HAS
Дата 26.7.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



мне необходимо при помощи API в одно из окошек что-нибудь вписать smile  

Это сообщение отредактировал(а) HAS - 26.7.2006, 11:42
PM MAIL   Вверх
Romikgy
Дата 26.7.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(HAS @  26.7.2006,  10:41 Найти цитируемый пост)
 одно из окошек

в каком окошке? в разных окошках по разному пишется 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
HAS
Дата 26.7.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Romikgy, вот я для примера и использую notepad.
Код сверху вызывает окно редактора шрифта.
ВОт я хочу узнать, как можно послать сообщение с изменением названия шрифта или размера шрифта ?! 
PM MAIL   Вверх
Yanis
Дата 26.7.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111





--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 26.7.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



причем здесь 
Цитата(HAS @  26.7.2006,  10:41 Найти цитируемый пост)
мне необходимо при помощи API в одно из окошек что-нибудь вписать

к
Цитата(HAS @  26.7.2006,  11:29 Найти цитируемый пост)
как можно послать сообщение с изменением названия шрифта или размера шрифта ?!

???????????????777 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
HAS
Дата 26.7.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Вы меня непоняли.
Я говорю, что это я использую для того, что бы разобраться в winapi.
Это я использую просто для практики. Т.е. я хочу научиться работать с winapi.
Мне необходимо вызвать окно редактора шрифта - вызвал.
теперь, где поле шрифт, мне необходимо, при помощи winapi вписать произвольный текст, например test.

Я спрашиваю это именно для того, что бы научиться вписывать даныые в поля чужих окон !!!
т.е. вместо блокнота могло оказаться совсем другое приложение, блокнот я использую для наглядности !!!

Добавлено @ 14:06 
надеюсь Вы меня поняли ! 

Это сообщение отредактировал(а) HAS - 26.7.2006, 14:05
PM MAIL   Вверх
Romikgy
Дата 26.7.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



в диалоге редактора шрифта используется , как бы , копонент Tedit , 
ему можно послать соосбщение на изменение текста
WM_SETTEXT

Добавлено @ 14:45 
в диалоге редактора шрифта используется , как бы , копонент Tedit , 
ему можно послать соосбщение на изменение текста
WM_SETTEXT 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
HAS
Дата 26.7.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Romikgy, вот какраз меня это и интересует, как послать сообщение на изменение текста и куда ее посылать. smile  
PM MAIL   Вверх
Romikgy
Дата 26.7.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



HAS, ищешь окно кому слать , его хендл
FindWindow
далее юзаешь функцию апи
SendMessage 
с параметром 
Цитата(Romikgy @  26.7.2006,  13:44 Найти цитируемый пост)
WM_SETTEXT 

и оно отсылается smile
PS читаем хелп по вин апи 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
HAS
Дата 26.7.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Romikgy, ты же сам знаешь, что все не так просто smile smile 
А если там несколько edit'ов ?! и вообще, как узнать "адрес" каждого эдита ?! smile  
PM MAIL   Вверх
Romikgy
Дата 26.7.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



по очереди перебирай если несколько 
и не адрес , а хендл , он ищется файндвиндомом 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
HAS
Дата 26.7.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Romikgy, как ?! smile  
PM MAIL   Вверх
Yanis
Дата 26.7.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



HAS
А сразу написать так как в HAS Дата 26.7.2006, 15:04 нельзя было??? Неужели нельзя сразу вопрос сформулировать прежде чем на форум лезть....
Код
const
  SLEEP_TIME = 100;

var
  x: Byte;
  s: string;
  hNotepad, hFontDlg, hFontDlgCb: DWORD;
begin
  // ищем первый запущеный блокнот
  hNotepad := FindWindow('Notepad', nil);
  if hNotepad <> 0 then
    begin
      // пункт "Шрифт..." в главном меню Блокнота имеет ID = 33
      // "нажимаем" пункт меню:
      PostMessage(hNotepad, WM_COMMAND, MakeWParam(33, 1), 0);

      // требуется небольшая задержка, что бы
      // диалог выбора шрифта успел отобразиться
      Sleep(SLEEP_TIME);

      // находим диалог смены шрифта
      // для большей универсальности
      // заголовок я не указываю
      hFontDlg := FindWindow('#32770', nil);
      if hFontDlg <> 0 then
        begin
          // на форме hFondDlg 3 ComboBox'а
          // по идее при первом выове должен находиться самый первый
          // он то нам и нужен
          hFontDlgCb := FindWindowEx(hFontDlg, 0, 'ComboBox', nil);

          // название шрифта - текст который будет присвоен найденому ComboBox
          s := 'Courier New';
          SendMessage(hFontDlgCb, WM_SETTEXT, 0, Integer(@s[1]));
        end;
    end;
end;


PS. Код нажатия кнопки OK думаю писать не нужно? 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
HAS
Дата 26.7.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Yanis, зачем же так иронично ?!
ОГРОМНОЕ ТЕБЕ СПАСИБО ! ! ! smile  
PM MAIL   Вверх
Yanis
Дата 26.7.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



HAS,
Пожалуйста.

Добавлено @ 18:49 
Добавлю немного...
Не обязательно нажимать кнопку OK достаточно тому же hFontDlgCb послать нажатие VK_ENTER


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 26.7.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Yanis @  26.7.2006,  17:21 Найти цитируемый пост)
// на форме hFondDlg 3 ComboBox'а
          // по идее при первом выове должен находиться самый первый
          // он то нам и нужен

странно а у меня небыло комбобоксов одни едиты smile
Цитата(Yanis @  26.7.2006,  17:21 Найти цитируемый пост)

можно еще так искать
hFontDlg := FindWindow(nil, 'Font'); 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Yanis
Дата 27.7.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Romikgy
Это странно так как должны быть 3 ComboBox'а со стилем csSimple.
Скачай программу iws. Через неё посмотри что у тебя там на форме: edit или combobox.  

Это сообщение отредактировал(а) Yanis - 27.7.2006, 09:03


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 27.7.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Yanis @  27.7.2006,  08:03 Найти цитируемый пост)
Скачай программу iws. Через неё посмотри что у тебя там на форме: edit или combobox.  

дык с помощью ее и смотрел
кса у меня вин 2000 мож изза этого ? 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Yanis
Дата 27.7.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(Romikgy @  27.7.2006,  11:03 Найти цитируемый пост)
кса у меня вин 2000 мож изза этого ?

Может быть. Негде проверить. А парент у этого edit'а кто? 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 27.7.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Yanis @  27.7.2006,  09:14 Найти цитируемый пост)
 А парент у этого edit'а кто? 

ComboBox 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Yanis
Дата 27.7.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(Romikgy @  27.7.2006,  11:44 Найти цитируемый пост)
ComboBox

smile Что и требовалось доказать smile 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
_sten_
Дата 13.12.2006, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 29.9.2006

Репутация: нет
Всего: 3



Мона SetWindowText использовать smile
--------------------
WARNING: Condition 'to_be || !to_be' is always 'true' !
PM MAIL ICQ   Вверх
Kenni
Дата 22.5.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



У меня есть чюжое окно, там 2 Edit'a, как обратиться к этому окну и выснить кто есть кто, и во второй нужно вписать необходимую инфу...
Заранее спасибо!
PM MAIL   Вверх
Yanis
Дата 23.5.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(Kenni @  22.5.2007,  21:15 Найти цитируемый пост)
У меня есть чюжое окно, там 2 Edit'a, как обратиться к этому окну и выснить кто есть кто, и во второй нужно вписать необходимую инфу...

Искать их в чужом окне (Поиск кстати обсуждался в этом топике. Поиск по форуму тоже поможет).
Находить нужный Edit, различая его по IDID содержится в информации о окне. Т.е.:
Код
LONG GetWindowLong(          HWND hWnd,
    int nIndex
);

+
Цитата(MSDN)
GWL_ID
Retrieves the identifier of the window.



--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
darkmamba
Дата 13.3.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 16.10.2008

Репутация: нет
Всего: 1



А как перебирать то ? как получить другой дескриптор компонента под одним названием если их напрмер там 5 ? 

Код

LONG GetWindowLong(          HWND hWnd,
    int nIndex
);


неподходит ибо ID у парочки = 0.
Проще перебрать дескрипторы на наичие чилдовых но как это сделать ?)
PM MAIL   Вверх
darkmamba
Дата 13.3.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 16.10.2008

Репутация: нет
Всего: 1



Код

begin
  h1 := FindWindow('Afx:00400000:0', nil);
  h2 := FindWindowEx(h1, 0, 'Afx:00400000:8:00010011:00000000:00000000', 0);
  repeat
    h3 := FindWindowEx(h2, 0, 'Static', 0);
    if h3 <> 0 then begin
      showmessage('Static');
      h4 := FindWindowEx(h3, 0, 'AfxWnd70su', 0);
        if h4 <> 0 then begin
          showmessage('AfxWnd70su');
          h5 := FindWindowEx(h4, 0, 'RichEdit20W', 0);
            if h5 <> 0 then begin
            showmessage('RichEdit20W');

        end;
    end;
    h2 := GetNextWindow(h2, GW_HWNDNEXT);
  until h2 = 0;
end;


PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1216 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.