PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Prozess bei WinXP wieder in den Tray bekommen


Codeq
23.02.2002, 12:34
Hi

Wie zum Teufel bekomme ich, wenn ich ein Programm habe und es in den Tray geschoben habe und somit nurnoch als Prozess anstatt als Anwendung laufen lasse, nach verschwinden des Tray Icons wieder als Anwenung zu gesicht?

mein Prob ist das ich ein Pogramm in den Tray geschoben habe, mir dann der Explorer abgeschmiert ist und ich ihn neu gestartet habe. Die meisten Prozesse erscheinen wieder im Tray, aber nicht alle. und eines davon möchte ich wieder so herstellen das das Icon wieder sichtbar ist, so das ich es wieder bedienen kann.
Es nervt das programm jedesmal zu killen und neu zu starten, da es sehr lange braucht zum starten und mein ganzes system etwas lahm legt...
gibts keinen consolen befehl oder so? die PID hab ich ja... nur mit "fg" wie bei linux komm ich hier ned weiter...


nj0y
26.02.2002, 08:21
Hier ein paar Auszüge:


var
WM_TASKBARCREATED: Cardinal;



// Use the TaskbarCreated message available from Win98/IE4+
WM_TASKBARCREATED := RegisterWindowMessage(´TaskbarCreated´);


Aufgerufen in Create bzw. Destroy:


procedure TCoolTrayIcon.HookApp;
begin
// Hook the application
OldAppProc := Pointer(GetWindowLong(Application.Handle, GWL_WNDPROC));
NewAppProc := MakeObjectInstance(HookAppProc);
SetWindowLong(Application.Handle, GWL_WNDPROC, LongInt(NewAppProc));
end;

procedure TCoolTrayIcon.UnhookApp;
begin
if Assigned(OldAppProc) then
SetWindowLong(Application.Handle, GWL_WNDPROC, LongInt(OldAppProc));
if Assigned(NewAppProc) then
FreeObjectInstance(NewAppProc);
NewAppProc := nil;
OldAppProc := nil;
end;



procedure TCoolTrayIcon.HookAppProc(var Msg: TMessage);
begin
{ Show the tray icon if the taskbar has been re-created after an
Explorer crash. }
if Msg.Msg = WM_TASKBARCREATED then
if FIconVisible then
ShowIcon;

// Pass the message on
Msg.Result := CallWindowProc(OldAppProc, Application.Handle,
Msg.Msg, Msg.wParam, Msg.lParam);
end;



function TCoolTrayIcon.ShowIcon: Boolean;
// Add/show the icon on the tray
begin
Result := False;
if not SettingPreview then
FIconVisible := True;
begin
if (csDesigning in ComponentState) then
begin
if SettingPreview then
if InitIcon then
Result := Shell_NotifyIcon(NIM_ADD, @IconData);
end
else
if InitIcon then
Result := Shell_NotifyIcon(NIM_ADD, @IconData);
end;
end;


Die komplette Komponente TCoolTrayIcon, falls ich irgendwas vergessen habe, gibt´s bei Torry.