Программное обновление значков на панели задачC#

Место общения программистов C#
Ответить
Anonymous
 Программное обновление значков на панели задач

Сообщение Anonymous »

У меня есть приложение, у которого есть значок на панели задач. При удалении я убиваю процесс, если он запущен. Итак, поскольку я не останавливаю приложение корректно, значок остается на панели задач и удаляется, только если мы наведем на него указатель мыши. Я написал код, который перемещал курсор по лотку и возвращал курсор в исходное положение. Вот что я сделал:

Код: Выделить всё

[DllImport("user32.dll")]
static extern IntPtr FindWindow(string className, string windowName);
[DllImport("user32.dll")]
static extern IntPtr FindWindowEx(IntPtr parent, IntPtr child, string className, string windowName);
[DllImport("user32.dll")]
static extern bool GetWindowRect(HandleRef handle, out RECT rct);

[StructLayout(LayoutKind.Sequential)]
struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}

void RefreshTray()
{
IntPtr taskbar_Handle = FindWindow("Shell_Traywnd", "");
IntPtr tray_Handle = FindWindowEx(taskbar_Handle, IntPtr.Zero, "TrayNotifyWnd", "");

RECT rct;

if (!(GetWindowRect(new HandleRef(null, tray_Handle), out rct)))
{
}

System.Drawing.Point init = Control.MousePosition;

for (int i = rct.Left; i < rct.Right-20; i++)
{
Cursor.Position = new System.Drawing.Point(i, (rct.Bottom + rct.Top) / 2);
}

Cursor.Position = init;
}
Это работает хорошо во всех случаях, за исключением случаев, когда включена опция «не показывать значки уведомлений». Есть ли способ обновить лоток в этом случае?
РЕДАКТИРОВАТЬ:
Как было предложено в комментариях, я изменил свой подход. Вместо того, чтобы убивать приложение в трее, я установил связь между моей службой приложений (да, забыл упомянуть, у меня тоже служба работает вместе с приложением) и приложением в трее. При удалении я останавливаю службу, из метода остановки службы я отправляю сообщение сокета определенного формата в приложение в трее и прошу его закрыться, а для видимости значка уведомления устанавливаю значение false. В результате приложение Tray будет работать в фоновом режиме, поэтому я использую Taskkill, чтобы удалить приложение. Он работал нормально в Win7 и Vista, но не работает должным образом в Win XP. Но я не писал никакого кода для конкретной среды. Есть какая-нибудь подсказка?

Подробнее здесь: https://stackoverflow.com/questions/834 ... mmatically
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»