Форум: "WinAPI";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];
ВнизОбновить tray Найти похожие ветки
← →
Shur_ap (2002-07-23 21:52) [0]Может кто подскажет как обновить tray, а то приложения закрываются, а иконы продолжают висеть в трее. Или обновлением тут не поможешь?
← →
Eugene Lachinov (2002-07-23 22:42) [1]Провести программно мышкой по нему.
← →
DiamondShark (2002-07-24 13:20) [2]Висеть они там продолжают если программа завершается некорректно или аварийно.
Перед выходом из программы удалять надо все что насовал в трей.
Принцип, знаете ли, есть такой: поел -- убери за собой.
← →
Эмиль (2002-07-24 16:06) [3]посмотри в хелпе NIM_DELETE
← →
Eugene Lachinov (2002-07-24 16:16) [4]Тут, наверно, речь шла о ненормальном завершении программ или я ошибся ?
← →
Proton (2002-07-24 16:28) [5]попробуй перед закрытием проги (termanateprocess) слать ей Wm_quiT
мо поводу обновления - то можно
найди окно findwindow+findwindowex
шли туда wm_mousemove
пример уже был на форуме - поищи
← →
Shur_ap (2002-07-24 17:31) [6]>Eugene Lachinov
А если я закрываю приложение через TerminateProcess(), то это нормальное завершение или нет?
← →
Eugene Lachinov (2002-07-24 17:35) [7]>Shur_ap
Я думаю нет, это все равно что из Task Manager "End Process"
← →
Shur_ap (2002-07-24 17:38) [8]>Eugene Lachinov
А как тогда нормально завершить?
← →
Eugene Lachinov (2002-07-24 17:44) [9]>Shur_ap
Приложение создает иконку в Tray или это аналог Task Manager ?
← →
Shur_ap (2002-07-24 17:47) [10]>Eugene Lachinov
Да, я запускаю и закрываю своей программой другие приложения
← →
Eugene Lachinov (2002-07-24 17:51) [11]Попробуй так
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;
← →
Eugene Lachinov (2002-07-24 17:54) [12]Обновление 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;
← →
Shur_ap (2002-07-24 17:54) [13]>Eugene Lachinov
Спасибо, пойду пробовать
← →
Shur_ap (2002-07-26 15:39) [14]Все работает. Только что показавает Result. При закрытии блокнота и т.п. Result = 1, а при закрытии Agnitum Outpost FireWall Result = 2. Это о чем-нибудь говорит?
← →
Shur_ap (2002-07-26 15:41) [15]При закрытии Agnitum Outpost FireWall иконка из трея пропадает
← →
Eugene Lachinov (2002-07-26 15:44) [16]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:48) [17]А есть что-нить катастрофическое в убийстве процесса не считая потери несохраненных данных?
← →
Eugene Lachinov (2002-07-26 16:05) [18]Думаю нет, хотя несохраненные данные бывают разные
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c