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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вызвать событие "сохранить как" в чужом приложени 
V
    Опции темы
Magik
Дата 17.12.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Много знаю примеров как найти и нажать кнопку в окнах, но ни разу не встречал примеров о том как работать с меню. Допустим, надо в чужом окне найти меню "файл", и вызвать действие "сохранить как". Может посоветуете?
PM MAIL   Вверх
SlaUr
Дата 18.12.2007, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если есть MainMenu то можно так 

Пример вызывания конфигурации Total Commander
Код

procedure ClickKey(Key: Word);
begin
// имитация щелчка на клавише Key
  keybd_event(Key,0,0,0);
  keybd_event(Key,0,KEYEVENTF_KEYUP,0);
end;


procedure TForm1.FormCreate(Sender: TObject);
var wnd:hwnd;St1:string;       buff: ARRAY [0..127] OF Char;
begin
 // Получаем hWnd первого окна
  Wnd := GetWindow(Handle, gw_HWndFirst);
  // Цикл поиска окон
  WHILE Wnd <> 0 DO BEGIN
    IF (Wnd <> Application.Handle) AND // -Собственное окно
       (IsWindowVisible(Wnd)) AND             // -Невидимые окна
       (GetWindow(Wnd, gw_Owner) = 0) AND   // -Дочернии окна
       (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) // -Окна без заголовков
    THEN BEGIN
      GetWindowText(Wnd, buff, sizeof(buff));
      St1:=StrPas(buff);
     if Pos('Total',St1)>0 then
      begin
       SetForegroundWindow(WND);
        ClickKey(VK_MENU);
        ClickKey(VK_RIGHT);
        ClickKey(VK_RIGHT);
        ClickKey(VK_RIGHT);
        ClickKey(VK_RIGHT);
        ClickKey(VK_RIGHT);
        ClickKey(VK_RETURN);
        ClickKey(VK_RETURN);
       Halt;
      end;
    END;
    // Ищем новое окно
    Wnd := GetWindow(Wnd, gw_hWndNext);
  END;





Halt;

end;

end.


Это сообщение отредактировал(а) SlaUr - 18.12.2007, 08:31
PM MAIL   Вверх
Magik
Дата 19.12.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо! Код работает и для моего случая! Т.е. для MainMenu. Небольшое дополнение.-
...............
  SetForegroundWindow(WND);
        ClickKey(VK_MENU);//выделить первый уровень главного меню.(у меня - Файл)
        ClickKey(VK_DOWN);//переместиться на один уровень вниз (у меня - Сохронить как)
        ClickKey(VK_RETURN);//нажатие вирт. клавиши ENTER
.... далее по тексту.
PM MAIL   Вверх
Magik
Дата 20.12.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Но, есть один недостаток, который мне нужно устранить -
 процедура ClickKey не выполняется на свёрнутом окне. :(.
Как считаешь, - это в принципе не выполнимо, или надо подправить код?
PM MAIL   Вверх
Snowy
Дата 20.12.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Вообще-то обычно делают хоткей на пункты меню.
Например Ctrl+Shift+S
Можно послать хоткей для того же результата...
PM MAIL   Вверх
Magik
Дата 20.12.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Думаю так просто не получится. Вот сейчас в Word-е проэкспериментировал.
Через Ctrl + S в активном окне изменения сохраняются, а в свёрнутом - нет. Жаль, что подменю не имеют хэндла. Хотя, хэндлы свёрнутого окна вполне обнаруживаются.
То есть всегда, для того, чтобы сохранить (загрузить конфигурацию), нужно чтобы 
это окно было восстановлено(ИМХО). И для выполнения кода не важно первое оно или последнее.

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


Опытный
**


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

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



Что мешает прежде чем выполнять с MainMenu действия послать команду окну развернуться?
К сожалению сейчас нет под рукой исходного кода но я находил этот код в форуме 
Вернее не развернуться(тогда будет макс.размер) а восстановится.
Если не найдете в понедельник посмотрю что нужно послать окну.
PM MAIL   Вверх
Magik
Дата 21.12.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Договорились!
Я вот тоже подумал, что хотя мне нужно все операции выполнять в фоновом режиме, то даже если я для этого буду на время выполнения восстанавливить,а потом снова сворачивать, это будет практически незаметно для пользователя. 
PM MAIL   Вверх
SlaUr
Дата 22.12.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я делал так
Код

ShowWindow(Myhendl,SW_SHOWNORMAL);
SetForegroundWindow(Myhendl);
SetActiveWindow(Myhendl);

PM MAIL   Вверх
Magik
Дата 24.12.2007, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо.Я понял! Вопросов нет.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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