Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.47 MB
Время: 0.008 c
1-50823
NAU
2002-09-04 05:48
2002.09.16
Как определить кем создан файл?


4-51033
Didi
2002-07-26 12:23
2002.09.16
Наличные форматы дату


1-50762
B-Ars
2002-08-29 14:00
2002.09.16
Передача данных в закладку Word`а


14-50965
Ренат
2002-08-19 10:45
2002.09.16
А какие автомобили предпочитают программеры?


3-50580
Dimkin
2002-08-23 17:29
2002.09.16
Вызов хранимой процедуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский