Форум: "Основная";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
ВнизКак развернуть приложение из трея? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c