ОКНА

Тема в разделе "Delphi - Система", создана пользователем LAF, 13 окт 2007.

Статус темы:
Закрыта.
  1. LAF

    LAF Гость

    Существыет 2 программы включенных параллельно. Требуеться в определенный момент свернуть одну программу и развернуть другую. Название программ заведомо известны как это сделать?
     
  2. Silver Wind

    Silver Wind Гость

    Вот пример того как найти окно, зная его класс и заголовок, а затем сделать активным (используется для предотвращения запуска 2-х копий программы):
    Код (Text):
    var
    hwin:hwnd;

    ...

    hwin:=FindWindow('TfmMain','Мониторинг емкостей');
    if hwin<>0 then begin
    MessageBox(0,
    'Две копии программы будут конфликтовать между собой!'#10#13+
    'Воспользуйтесь запущенным экземпляром!',
    'Внимание!',0);
    SetForegroundWindow(hwin);
    exit;
    end;
    Также можно искать окно зная только заголовок или класс окна, тогда неизвестный параметр выставляем как NULL.

    Свернуть найденное окно можно с помощью функции:
    Код (Text):
    ShowWindow(
    HWND hWnd,      // handle of window
    int nCmdShow    // show state of window
    );
    со вторым параметром равным SW_MINIMIZE.

    Более подробно смотри справку по этим функциям в Win32 Programmer's Reference ("X:\Program Files\Common Files\Borland Shared\MSHelp\WIN32.HLP").
     
  3. LAF

    LAF Гость

    Справка у меня на английском не вариант :(
    А можешь описать функции свернуть окно, развернуть.
     
  4. LAF

    LAF Гость

    допустим у меня включенная активная программа называеться "CONTER" и есть написанная мной прога "МУМУ" временно неактивная. Как сделать чтоб через 20 сек после нажатии мыши сворачивалась "CONTER" становилась активной моя прога "МУМУ" ?
     
  5. Silver Wind

    Silver Wind Гость

    <!--QuoteBegin-LAF+13:10:2007, 16:05 -->
    <span class="vbquote">(LAF @ 13:10:2007, 16:05 )</span><!--QuoteEBegin-->Справка у меня на английском не вариант
    [snapback]81634" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    :( " Группа: Программист" ?

    Ладно, попробую разжевать.

    Первый шаг. Для того, чтобы управлять окном программы нам необходимо найти его дескриптор.
    <!--QuoteBegin-LAF+13:10:2007, 16:19 -->
    <span class="vbquote">(LAF @ 13:10:2007, 16:19 )</span><!--QuoteEBegin-->допустим у меня включенная активная программа называеться "CONTER" и есть написанная мной прога "МУМУ"
    [snapback]81635" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Я так понимаю,что программы эти написаны на Delphi и исходники у тебя есть. Тогда чтобы найти окно программы при помощи функции FindWindow тебе надо указать название класса главного окна программы и его заголовок.
    В Delphi название класса главного окна программы соответствует свойству Name главной формы, ну а заголовок - это Caption той-же формы. То есть получаем что-то типа:
    Код (Text):
    hwin:=FindWindow('TForm1','МУМУ');
    Если такого окна не найдено, то hwin=0.
    Второй шаг. При помощи определенного нами дескриптора окна делаем его активным:
    Код (Text):
    SetForegroundWindow(hwin);
    Или наоборот сворачиваем:
    Код (Text):
    ShowWindow(hwin,SW_MINIMIZE);
    А то и вовсе прячем с экрана:
    Код (Text):
    ShowWindow(hwin,SW_HIDE);
    (обратно показать ShowWindow(hwin,SW_SHOW);)
     
  6. LAF

    LAF Гость

    а если одна программа "МУМУ" написанна мной а вторая ну допустим Winamp.
    как будет проходить определение winamp`a из "МУМУ"?
     
  7. Silver Wind

    Silver Wind Гость

    Один из способов:

    WinSight32 входит в стандартную поставку Delphi (Пуск\Программы\Borland Delphi 7\WinSight32).

    Сначала запускаем ту программу, класс окна которой хотим узнать.

    Запускаем WinSight32 и видим огромное дерево (рекомендую сразу же нажать на пункт главного меню "Stop!" чтобы остановить перехват программой сообщений). Это все окна системы.
    Корень дерева - Desktop (рабочий стол). Искомое окно будет одним из его подузлов. Какое можно догадаться по заголовку, он будет в двойных кавычках, ну а класс окна будет указан в этой же строке в фигурных скобках.
    Если ты запутался в этом дереве в главном меню жмешь "Spy"->"Follow Focus" и кликаешь мышой по искомому окну - соответсвующий узел (или его подузел) автоматически выделится в дереве.
     
  8. LAF

    LAF Гость

    вроде понял.
    а как в делфи отслеживать щелчки мышой если твоя программа не активна?
     
  9. Silver Wind

    Silver Wind Гость

    Это уже другая тема.
    Надо писать т.н. глобальный хук, который будет перехватывать мышиные сообщения.
    Когда-то давно делал подобное для клавиатуры. Тема эта очень часто обсуждается на форумах юзай поиск, примеров с исходниками полно, да и в том же Win32 Programmer's Reference (см. выше и учи английский) "Hook Functions" описаны довольно подробно.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей