ОКНА

  • Автор темы LAF
  • Дата начала
Статус
Закрыто для дальнейших ответов.
L

LAF

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

Silver Wind

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

...

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

Свернуть найденное окно можно с помощью функции:
Код:
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").
 
L

LAF

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

LAF

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

Silver Wind

Гость
#5
<!--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 той-же формы. То есть получаем что-то типа:
Код:
hwin:=FindWindow('TForm1','МУМУ');
Если такого окна не найдено, то hwin=0.
Второй шаг. При помощи определенного нами дескриптора окна делаем его активным:
Код:
SetForegroundWindow(hwin);
Или наоборот сворачиваем:
Код:
ShowWindow(hwin,SW_MINIMIZE);
А то и вовсе прячем с экрана:
Код:
ShowWindow(hwin,SW_HIDE);
(обратно показать ShowWindow(hwin,SW_SHOW);)
 
L

LAF

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

Silver Wind

Гость
#7
Один из способов:

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

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

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

LAF

Гость
#8
вроде понял.
а как в делфи отслеживать щелчки мышой если твоя программа не активна?
 
S

Silver Wind

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