![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обновить tray [D5, Win2k]
Shur_ap © (2002-07-23 21:52:00)Может кто подскажет как обновить tray, а то приложения закрываются, а иконы продолжают висеть в трее. Или обновлением тут не поможешь?
Eugene Lachinov (2002-07-26 16:05:00) [1]Думаю нет, хотя несохраненные данные бывают разные
Shur_ap (2002-07-26 15:48:00) [2]А есть что-нить катастрофическое в убийстве процесса не считая потери несохраненных данных?
Eugene Lachinov (2002-07-26 15:44:00) [3]1 - процесс закрыт нормально по WM_CLOSE, а 2 был убит по TerminateProcess
TA_FAILED = 0;
TA_SUCCESS_CLEAN = 1;
TA_SUCCESS_KILL = 2;
TA_SUCCESS_16 = 3;
Shur_ap (2002-07-26 15:41:00) [4]При закрытии Agnitum Outpost FireWall иконка из трея пропадает
Shur_ap (2002-07-26 15:39:00) [5]Все работает. Только что показавает Result. При закрытии блокнота и т.п. Result = 1, а при закрытии Agnitum Outpost FireWall Result = 2. Это о чем-нибудь говорит?
Shur_ap (2002-07-24 17:54:00) [6]>Eugene Lachinov
Спасибо, пойду пробовать
Eugene Lachinov (2002-07-24 17:54:00) [7]Обновление Tray мышкой, если все-таки TA_SUCCESS_KILL
function FindTrayWnd : HWnd;
var
szClassName : array[0..255] of Char;
begin
Result := FindWindow("Shell_TrayWnd", "");
if Result <> 0 then begin
Result := GetWindow(Result, GW_CHILD);
while Result <> 0 do begin
GetClassName(Result, szClassName, 255);
if StrIComp(szClassName, "TrayNotifyWnd") = 0 then
Exit
else
Result := GetWindow(Result, GW_HWNDNEXT)
end
end
end;
procedure RefreshTrayWnd;
var
i, j : Integer;
Rect : TRect;
SavePos : TPoint;
TrayWnd : HWnd;
begin
TrayWnd := FindTrayWnd;
if TrayWnd <> 0 then begin
GetCursorPos(SavePos);
ShowCursor(False);
GetWindowRect(TrayWnd, Rect);
i := Rect.Left + 5;
while i < Rect.Right do begin
j := Rect.Top + 5;
while j < Rect.Bottom do begin
SetCursorPos(i, j); Sleep(0);
Inc(j, 15)
end;
Inc(i, 15)
end;
SetCursorPos(SavePos.X, SavePos.Y);
ShowCursor(True)
end
end;
Eugene Lachinov (2002-07-24 17:51:00) [8]Попробуй так
const
TA_FAILED = 0;
TA_SUCCESS_CLEAN = 1;
TA_SUCCESS_KILL = 2;
TA_SUCCESS_16 = 3;
function TerminateProgramEnum(Window : HWND; lParam : LPARAM) : Bool; stdcall;
var
dwID : DWORD;
begin
GetWindowThreadProcessId(Window, @dwID);
if dwID = DWORD(lParam) then
PostMessage(Window, WM_CLOSE, 0, 0);
Result := True;
end;
function TerminateProgram(dwPID : DWORD; dwTimeout : DWORD) : DWORD;
var
hProc : THandle;
begin
hProc := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, FALSE, dwPID);
if (hProc <> 0) then try
EnumWindows(@TerminateProgramEnum, dwPID);
if WaitForSingleObject(hProc, dwTimeout) <> WAIT_OBJECT_0 then begin
if TerminateProcess(hProc, 0) then
Result := TA_SUCCESS_KILL
else
Result := TA_FAILED
end else
Result := TA_SUCCESS_CLEAN
finally
CloseHandle(hProc)
end else
Result := TA_FAILED
end;
Shur_ap (2002-07-24 17:47:00) [9]>Eugene Lachinov
Да, я запускаю и закрываю своей программой другие приложения
Eugene Lachinov (2002-07-24 17:44:00) [10]>Shur_ap
Приложение создает иконку в Tray или это аналог Task Manager ?
Shur_ap (2002-07-24 17:38:00) [11]>Eugene Lachinov
А как тогда нормально завершить?
Eugene Lachinov (2002-07-24 17:35:00) [12]>Shur_ap
Я думаю нет, это все равно что из Task Manager "End Process"
Shur_ap (2002-07-24 17:31:00) [13]>Eugene Lachinov
А если я закрываю приложение через TerminateProcess(), то это нормальное завершение или нет?
Proton (2002-07-24 16:28:00) [14]попробуй перед закрытием проги (termanateprocess) слать ей Wm_quiT
мо поводу обновления - то можно
найди окно findwindow+findwindowex
шли туда wm_mousemove
пример уже был на форуме - поищи
Eugene Lachinov (2002-07-24 16:16:00) [15]Тут, наверно, речь шла о ненормальном завершении программ или я ошибся ?
Эмиль (2002-07-24 16:06:00) [16]посмотри в хелпе NIM_DELETE
DiamondShark (2002-07-24 13:20:00) [17]Висеть они там продолжают если программа завершается некорректно или аварийно.
Перед выходом из программы удалять надо все что насовал в трей.
Принцип, знаете ли, есть такой: поел -- убери за собой.
Eugene Lachinov (2002-07-23 22:42:00) [18]Провести программно мышкой по нему.