¿Busca el código del icono de la bandeja del sistema escrito en C?
#include?
#define?IDR_PAUSE?12
#define?IDR_START?13 p>
LPCTSTR?szAppClassName?=?TEXT("Programa de servicio");
LPCTSTR?szAppWindowName?=?TEXT("Programa de servicio");
HMENU?hmenu ;// Identificador de menú
LRESULT?CALLBACK?WndProc(HWND?hwnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
{
NOTIFYICONDATA?nid;
UINT?WM_TASKBARCREATED;
POINT?
POINT?pt;//Se utiliza para recibir las coordenadas del mouse
int?xx;//Se utiliza para recibir el valor de retorno de las opciones del menú
/?No modificar TaskbarCreated, este es un mensaje personalizado para la barra de tareas del sistema
WM_TASKBARCREATED?=? RegisterWindowMessage(TEXT ("TaskbarCreated"));
cambiar?(mensaje)
{
caso?WM_CREATE://Mensaje cuando se crea la ventana.
nid.cbSize?=?sizeof(nid);
nid.hWnd?=?hwnd;
nid.uID?=?0; p>
nid.hWnd?=?hwnd;
nid.uID?=?0;
p>
nid.uFlags?=?NIF_ICON?|? NIF_MESSAGE?|?NIF_TIP;
nid.uCallbackMessage?=?WM_USER;
nid.hIcon?=?LoadIcon (NULL,?IDI_APPLICATION);
lstrcpy (nid.szTip,?szAppClassName);
Shell_NotifyIcon(NIM_ADD,?&nid);
hmenu=CreatePopupMenu( );//generar el menú
AppendMenu ( hmenu,MF_STRING,IDR_PAUSE,L "Pausar servicio");//agregar dos opciones al menú
AppendMenu( hmenu,MF_STRING, IDR_START,L "Acerca de");
break;
case?WM_USER: //Mensaje al utilizar el programa de forma continua.
if(lParam?==?WM_LBUTTONDOWN)
MessageBox(hwnd,?TEXT("Win32?API?Implemente el programa de la bandeja del sistema, haga doble clic en la bandeja para salir!" ),?szAppClassName, ?MB_OK);
if?(lParam?==?WM_LBUTTONDBLCLK)// Haga doble clic en el mensaje en la bandeja para salir.
SendMessage(hwnd,?WM_CLOSE,?wParam,?lParam);
if?WM_RBUTTONDOWN)
{
GetCursorPos(&pt );//Obtener coordenadas del mouse
::SetForegroundWindow(hwnd);//Resuelve el problema de que el menú no desaparece cuando haces clic izquierdo fuera del menú
EnableMenuItem( hmenu,IDR_PAUSE,MF_GRAYED);//Hacer gris uno de los elementos del menú
xx= TrackPopupMenu(hmenu,TPM_RETURNCMD,pt.x,pt.y,NULL,hwnd,NULL);// Muestre el menú y obtenga la opción ID
if(xx==IDR_PAUSE)?MessageBox(hwnd,?TEXT("111"),?szAppClassName,?MB_OK);
if (xx==IDR_START)?MessageBox(hwnd,?TEXT("222"),?szAppClassName,?MB_OK);
if(xx==IDR_START)?MB_OK);
if(xx==0)?PostMessage( hwnd,WM_LBUTTONDOWN,NULL,NULL);
/MessageBox(hwnd,?TEXT("Clic derecho"),?szAppName,?MB_OK); p> p>
}
break;
case?WM_DESTROY :// Mensaje cuando se destruye la ventana.
Shell_NotifyIcon(NIM_DELETE,? &nid);
PostQuitMessage(0);
romper;
predeterminado:
/*
*?Evitar que el icono del programa en la bandeja del sistema desaparezca cuando Explorer.exe falla
*
*?Principio: Explorer.exe reiniciará Cargar y reconstruir la bandeja del sistema.
Cuando se reconstruye la bandeja del sistema, se envía a todas las ventanas de nivel superior que están registradas para recibir el mensaje TaskbarCreated, simplemente capturamos el mensaje y reconstruimos el sistema en la bandeja del sistema
*?
*/
if(message ==?WM_TASKBARCREATED)
SendMessage(hwnd,?WM_CREATE,?wParam,?lParam);
break;
}
return?DefWindowProc(hwnd,?message,?wParam,?lParam);
}
int?main( ) p>
{
HWND?hwnd;
MSG?msg;
WNDCLASS?wndclass;
HWND ?handle? =?FindWindow(NULL,?szAppWindowName);
if?(handle!=?NULL)
{
MessageBox(NULL,?TEXT) ("Aplicación El programa ya se está ejecutando"),?szAppClassName,?MB_ICONERROR);
return?;
}
wndclass.style?=?CS_HREDRAW?|?CS_VREDRAW ;
wndclass.lpfnWndProc?=?WndProc;
wndclass.cbClsExtra?=?0;
wndclass.cbWndExtra?=?0;
wndclass .hInstance?=?NULL;
wndclass.hIcon?=?LoadIcon(NULL,?IDI_APPLICATION);
wndclass.hCursor?=?LoadCursor(NULL,? IDC_ARROW);
wndclass.hbrBackground?=?(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName?=?NULL;
wndclass.lpszClassName? =?szAppClassName;
if?(( !RegisterClass(&wndclass))
{
MessageBox(NULL,?TEXT("¿Este?programa?requiere? Windows?NT! "),?szAppClassName,?MB_ICONERROR);
return?
}
/?El atributo WS_EX_TOOLWINDOW se utiliza aquí para ocultar la ventana. que se muestra en el botón de programa de la barra de tareas
hwnd?=?CreateWindowEx(WS_EX_TOOLWINDOW,
szAppClassName,?szAppWindowName,
WS_POPUP,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,?NULL,?NULL,?NULL
p>ShowWindow(hwnd,?0);
UpdateWindow(hwnd);
//Mensaje en bucle
p>
mientras?NULL,?0,?0))
{
TranslateMessage(&msg);
DispatchMessage(&msg); p>
}
¿regresar?;
}
¿Regresar?