Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: CL | DM;

Вниз

Как развернуть приложение из трея?   Найти похожие ветки 

 
IceBeerg ©   (2006-06-30 16:18) [0]

Собственно сабж.
Никак не получается. Для отображения в трее используется TRxTrayIcon, ShowWindow не проходить SendMessage(...,WM_ACTIVATEAPP не проходит, а так же WM_SHOWWINDOW.
Уже и WinSight"ом смотрел, делаю wm_user+... неполучается

Программа - Intercom - для обмена сообщениями по сети
КАК РАЗВЕРНУТЬ ЭТУ ПРОГУ ИЗ ТРЕЯ???

Вот лог WinSight"а при ручной "активации":
* WinSight message trace Fri Jun 30 2006 12:20:23 *
000028:00010168 "intercom"  WM_WINDOWPOSCHANGING (4604X) Sent   wp=00000000  lp=0012FC2C  (0,0)-(0,0)    Z-Order Top
000029:00010168 "intercom"  WM_WINDOWPOSCHANGED (4704X) Sent   wp=00000000  lp=0012FC2C  (-32000,-32000)-(-31840,-31969)    NoSize,  NoMove,  NoRedraw  Z-Order After hwnd 000102DEh
000030:00010168 "intercom"  WM_ACTIVATEAPP (1c04X) Sent   wp=00000001  lp=00000000  Activate from  task 00000000
000031:00010168 "intercom"  WM_NCACTIVATE (8604X) Sent   wp=00200000  lp=00000000  Deactivate  Minimize to hwnd 00000000
000032:00010168 "intercom"  WM_ACTIVATE (604X) Sent   wp=00200001  lp=00000000  Activate  Minimize from hwnd 00000000
000033:00010168 "intercom"  WM_QUERYOPEN (1304X) Sent   wp=00000000  lp=00000000
000034:00010168 "intercom"  WM_WINDOWPOSCHANGING (4604X) Sent   wp=00000000  lp=0012FC18  (0,0)-(0,0)    Z-Order Top
000035:00010168 "intercom"  WM_NCCALCSIZE (8304X) Sent   wp=00000001  lp=0012FBEC Validate (512,384)-(512,384)  Old (-32000,-32000)-(-31840,-31969)  OldClient (-32000,-32000)-(-32000,-32000)
000036:00010168 "intercom"  WM_NCPAINT (8504X) Sent   wp=00000001  lp=00000000  wp=00000001!
000037:00010168 "intercom"  WM_WINDOWPOSCHANGED (4704X) Sent   wp=00000000  lp=0012FC18  (512,384)-(512,384)    NoZOrder,  FrameChanged,  ShowWindow,  NoCopybits  Z-Order Unchanged
000038:00010168 "intercom"  WM_MOVE (304X) Sent   wp=00000000  lp=019D0203  (515,413)
000039:00010168 "intercom"  WM_SIZE (504X) Sent   wp=00000000  lp=00000000  Restored  (0,0)
000040:00010168 "intercom"  WM_SETFOCUS (704X) Sent   wp=00000000  lp=00000000  Focus from hwnd 00000000
000041:00010168 "intercom"  WM_ACTIVATE (604X) Sent   wp=00000001  lp=00000000  Activate from hwnd 00000000
000042:00010168 "intercom"  WM_WINDOWPOSCHANGING (4604X) Sent   wp=00000000  lp=0012FC14  (0,0)-(0,0)    Z-Order Top
000043:00010168 "intercom"  WM_NCACTIVATE (8604X) Sent   wp=00000000  lp=00010170  Deactivate to hwnd 00010170
000044:00010168 "intercom"  WM_ACTIVATE (604X) Sent   wp=00000000  lp=00010170  Deactivate to hwnd 00010170
000045:00010168 "intercom"  WM_WINDOWPOSCHANGING (4604X) Sent   wp=00000000  lp=0012FC2C  (0,0)-(0,0)    Z-Order Top
000046:00010168 "intercom"  WM_KILLFOCUS (804X) Sent   wp=00010178  lp=00000000  Focus to hwnd 00010178
000047:00010168 "intercom"  WM_WINDOWPOSCHANGING (4604X) Sent   wp=00000000  lp=0012F888  (0,0)-(0,0)    Z-Order Top
000048:00010168 "intercom"  WM_WINDOWPOSCHANGING (4604X) Sent   wp=00000000  lp=0012FC0C  (0,0)-(0,0)    Z-Order Top
000049:00010168 "intercom"  WM_USER+0xAC00 (b00004X) Dispatched   wp=00000000  lp=00000000
000050:00010168 "intercom"  WM_USER+0xAC1A (b01a04X) Dispatched   wp=00000000  lp=00000000
000051:00010168 "intercom"  WM_GETICON (7f04X) Sent   wp=00000002  lp=00000000
000052:00010168 "intercom"  WM_GETICON (7f04X) Sent   wp=00000000  lp=00000000
000053:00010168 "intercom"  WM_GETICON (7f04X) Sent   wp=00000001  lp=00000000
000054:00010168 "intercom"  WM_USER+0xAC3F (b03f04X) Sent   wp=00000000  lp=00B21670
000055:00010168 "intercom"  WM_USER+0xAC40 (b04004X) Sent   wp=00000000  lp=00B21670
000056:00010168 "intercom"  WM_USER+0xAC3F (b03f04X) Sent   wp=00000000  lp=00B21670
000057:00010168 "intercom"  WM_USER+0xAC40 (b04004X) Sent   wp=00000000  lp=00B21670
000058:00010168 "intercom"  WM_ACTIVATEAPP (1c04X) Sent   wp=00000000  lp=000007F0  Deactivate to  task 000007F0
000059:00010168 "intercom"  WM_USER+0xAC01 (b00104X) Dispatched   wp=00000000  lp=00000000

Вот как прогу видит FAR:
Модуль:                intercom.exe
Полный путь:           C:\Program Files\Intercom\intercom.exe
Версия файла:          8.0.6.67
Описание:              Intercom 8.0
PID:                   1556
Parent PID:            1372  (Explorer.EXE)
Приоритет:             8
Нитей:                 14
...
Окно:                  intercom <- Текст окна
HWND:                  000F041A
...

Вот код:
wnd:=FindWindow(PChar("TApplication"),PChar("intercom"));
If wnd=0 Then Application.MessageBox("Intercom НЕ запущен!","test",0);
ShowWindow(wnd,sw_Normal);
SendMessage(wnd,WM_ACTIVATEAPP,0,0);
SendMessage(wnd,WM_SHOWWINDOW,0,SW_PARENTOPENING);
SendMessage(wnd,WM_USER+$AC3F,0,$00B21670);
SendMessage(wnd,WM_USER+$AC40,0,$00B21670);
SendMessage(wnd,WM_USER+$AC01,0,0);


Класс TApplication подсмотрен через WinSight


 
Palladin ©   (2006-06-30 16:42) [1]

попробуй

ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
Application.BringToFront;


 
IceBeerg ©   (2006-06-30 16:48) [2]

2 Palladin ©   (30.06.06 16:42) [1]

Нет, это для своей программы, а мне нужно вытащить из из трея чужую

Сейчас залю и дам линк на эту программу


 
IceBeerg ©   (2006-06-30 16:53) [3]

Вот линк на программу www.icebeerg.newmail.ru/intercom.zip


 
Шпиён   (2006-06-30 19:43) [4]

У меня (для своей программы, следовательно, известны WM_USER+XXX и то, что нужен двойной щелчок левой кнопкой мышки) получилось -
достаточно было послать главному окну программы WM_USER+XXX c WM_LBUTTONDBLCLK в lParam.

SendMessage(hWnd,WM_USER+100,0,$203);

Попробуй:
1) выяснить, как "вручную" развернуть программу из трея (правая кнопка? левая кнопка? двойной щелчок? еще что-то???)
2) подсмотреть сообщения WM_USER+XXX  во время ручной активации (тут поможет содержимое lParam - ищи соответствующее твоему действию)
3) найти в логе нужное сообщение WM_USER и определить этот самый "ХХХ"

ps Cам попробовать на твоей программе не могу - на работе.


 
Шпиён   (2006-06-30 20:03) [5]

Для твоего приложения совет может и не помочь, если в RxLib нотификация организована по другому.
Сам RxLib не использую.


 
Шпиён   (2006-06-30 20:34) [6]

Нашел у себя приложение, использующее RxTrayIcon (чужое), разворачивается из трея по WM_LBUTTONDBLCLK.
Отследил SPY++.
сообщение WM_USER+44116 ($AC54), wParam=0, lParam=$203.
Чтобы это увидеть, пришлось ставить в SPY++ "галку" All Windows of same thread - сообщение отсылается "окну" с классом TPUtilWindow (!) - следствие - возможны проблемы с его поиском - такого рода "окон" может быть несколько.


 
Virgo_Style ©   (2006-07-01 09:03) [7]

IceBeerg ©   (30.06.06 16:48) [2]

Не совсем понял, надо вытащить из трея совсем чужую или другую свою программу?


 
Пусик ©   (2006-07-01 18:05) [8]

procedure RestoreIntercom;
var
 hWnd: THandle;
szClassName: array[0..MAX_PATH] of Char;
 szFilePath: array[0..MAX_PATH] of Char;
 hProcess,dwID: THandle;
begin
hWnd := GetWindow(GetDesktopWindow, GW_CHILD);
repeat
   GetWindowThreadProcessId(hWnd,dwId);
   hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwID);
   GetModuleFileNameEx(hProcess,0, szFilePath, MAX_PATH);
   CloseHandle (hProcess);
 GetClassName(hWnd, szClassName, MAX_PATH);
 if (ExtractFileName(szFilePath)="intercom.exe") and (szClassName="TPUtilWindow")
     then SendMessage(hWnd,WM_USER+44116,0,$203);
 hWnd := GetNextWindow(hWnd,GW_HWNDNEXT);
until hWnd=0;
end;


 
IceBeerg ©   (2006-07-03 10:09) [9]


> Не совсем понял, надо вытащить из трея совсем чужую или
> другую свою программу?

Совсем чужую.


> 2 Virgo_Style ©   (01.07.06 09:03) [7]
> Пусик ©   (01.07.06 18:05) [8]

Спасибо выручили!



Страницы: 1 вся ветка

Текущий архив: 2006.08.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.071 c
2-1153996435
Crazy monkey
2006-07-27 14:33
2006.08.13
Вопрос по фильтру


4-1145464471
Интересующийся
2006-04-19 20:34
2006.08.13
Открытие Word-овского файла


1-1151329908
Alexey V.
2006-06-26 17:51
2006.08.13
Взаимное влияние D5 и D7


15-1153375938
Лысов
2006-07-20 10:12
2006.08.13
Вызов методов из dll


2-1153554912
malyar
2006-07-22 11:55
2006.08.13
воспроизведение звукового файла