Forum: PC-Programmierung NotifyIcon verschwindet beim drüberfahren mit der Maus


von Adam P. (adamap)


Lesenswert?

Hallo zusammen,


ich würde gerne ein NotifIcon (Tray Icon) nutzen, um zu sehen ob mein 
Programm im hintergrund aktiv ist.

Bin kein Win-API spezialist und habe mir die Infos zusammengesucht.

Ich verwende Visual Studio 2015 und es ist eine Win32 Konsolenanwendung 
C++.

Habe schon Google befragt und auch hier im Forum gesucht, jedoch noch 
keine Lösung gefunden.

Ich bekomme das Icon zwar angezeigt, doch sobald ich mit der Maus über 
dieses fahre, verschwindet es.
1
#include "stdafx.h"
2
3
#include <iostream>
4
#include <windows.h>
5
#include <shellapi.h>
6
7
HICON ico;
8
NOTIFYICONDATA nid;
9
HWND hWnd;
10
11
int main()
12
{
13
  hWnd = FindWindow((LPCWSTR)"ConsoleWindowClass", NULL);
14
15
  ico = static_cast<HICON>(LoadImage(NULL,
16
    TEXT("main_1.ico"),
17
    IMAGE_ICON,
18
    0, 0,
19
    LR_DEFAULTCOLOR | LR_SHARED | LR_DEFAULTSIZE | LR_LOADFROMFILE));
20
21
  nid.cbSize = sizeof(nid);
22
  nid.hIcon = ico;
23
  nid.hWnd = hWnd;
24
  //wcscpy_s(Tray.szTip, (wchar_t *)"My Application");
25
  //Tray.uCallbackMessage = WM_LBUTTONDOWN;
26
  nid.uFlags = NIF_ICON;
27
  nid.uID = 100;
28
29
  //set the icon in tasbar tray
30
  Shell_NotifyIcon(NIM_ADD, &nid);
31
32
  system("pause");
33
34
  Shell_NotifyIcon(NIM_DELETE, &nid);
35
36
    return 0;
37
}

von Adam P. (adamap)


Lesenswert?

Hab das Problem gefunden.
1
hWnd = FindWindow((LPCWSTR)"ConsoleWindowClass", NULL);
Ist für diesen Zweck nicht das richtige, da es wohl beim 
Konsolenprogramm nicht so richtig funktioniert.

Mit
1
hWnd = GetConsoleWindow();
funktionierts nun.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.