Red de conocimiento informático - Conocimiento de la instalación - ¿Busca el código del icono de la bandeja del sistema escrito en C?

¿Busca el código del icono de la bandeja del sistema escrito en C?

//Código para VC2008 a 2019

#include?

#define?IDR_PAUSE?12

#define?IDR_START?13

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;

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>

}

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( )

{

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);

}

¿regresar?;

}

¿Regresar?