Cómo habilitar las notificaciones del sistema del escritorio a través de AppUserModelID
En este tema se muestra cómo crear un acceso directo para la aplicación, asignarle un AppUserModelID e instalarlo en la pantalla Inicio. Te recomendamos encarecidamente que lo hagas en Windows Installer en lugar de en el código de la aplicación. Sin un acceso directo válido instalado en la pantalla Inicio o en Todos los programas, no se puede generar una notificación del sistema desde una aplicación de escritorio.
Nota
Los métodos de ejemplo usados en este tema se toman del ejemplo de notificación del sistema de escritorio.
Lo que necesita saber
Tecnologías
- COM
Requisitos previos
- Bibliotecas
- C++: Runtime.object.lib
- C#: Windows.Winmd
- C#: Paquete de código de la API de Windows para Microsoft .NET Framework
- Una versión de Microsoft Visual Studio que admita al menos Windows 8
Instrucciones
Paso 1: Preparar el acceso directo que se va a crear
En este ejemplo se determina primero la ruta de acceso de la carpeta de datos de la aplicación del usuario a través de la función GetEnvironmentVariable . A continuación, compone la ruta de acceso completa al acceso directo, determina que aún no existe un acceso directo de ese nombre en esa ubicación y pasa esa información a otro método que crea e instala el acceso directo.
Tenga en cuenta que el acceso directo se puede implementar por usuario o por aplicación.
HRESULT DesktopToastsApp::TryCreateShortcut()
{
wchar_t shortcutPath[MAX_PATH];
DWORD charWritten = GetEnvironmentVariable(L"APPDATA", shortcutPath, MAX_PATH);
HRESULT hr = charWritten > 0 ? S_OK : E_INVALIDARG;
if (SUCCEEDED(hr))
{
errno_t concatError = wcscat_s(shortcutPath, ARRAYSIZE(shortcutPath), L"\\Microsoft\\Windows\\Start Menu\\Programs\\Desktop Toasts App.lnk");
hr = concatError == 0 ? S_OK : E_INVALIDARG;
if (SUCCEEDED(hr))
{
DWORD attributes = GetFileAttributes(shortcutPath);
bool fileExists = attributes < 0xFFFFFFF;
if (!fileExists)
{
hr = InstallShortcut(shortcutPath); // See step 2.
}
else
{
hr = S_FALSE;
}
}
}
return hr;
}
Paso 2: Crear el acceso directo e instalarlo en la pantalla Inicio
En este ejemplo también se recupera el almacén de propiedades del acceso directo y se establece la propiedad System.AppUserModel.ID necesaria de una variable definida anteriormente, AppID
.
HRESULT DesktopToastsApp::InstallShortcut(_In_z_ wchar_t *shortcutPath)
{
wchar_t exePath[MAX_PATH];
DWORD charWritten = GetModuleFileNameEx(GetCurrentProcess(), nullptr, exePath, ARRAYSIZE(exePath));
HRESULT hr = charWritten > 0 ? S_OK : E_FAIL;
if (SUCCEEDED(hr))
{
ComPtr<IShellLink> shellLink;
hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink));
if (SUCCEEDED(hr))
{
hr = shellLink->SetPath(exePath);
if (SUCCEEDED(hr))
{
hr = shellLink->SetArguments(L"");
if (SUCCEEDED(hr))
{
ComPtr<IPropertyStore> propertyStore;
hr = shellLink.As(&propertyStore);
if (SUCCEEDED(hr))
{
PROPVARIANT appIdPropVar;
hr = InitPropVariantFromString(AppId, &appIdPropVar);
if (SUCCEEDED(hr))
{
hr = propertyStore->SetValue(PKEY_AppUserModel_ID, appIdPropVar);
if (SUCCEEDED(hr))
{
hr = propertyStore->Commit();
if (SUCCEEDED(hr))
{
ComPtr<IPersistFile> persistFile;
hr = shellLink.As(&persistFile);
if (SUCCEEDED(hr))
{
hr = persistFile->Save(shortcutPath, TRUE);
}
}
}
PropVariantClear(&appIdPropVar);
}
}
}
}
}
}
return hr;
}
Observaciones
Como alternativa al enfoque que se muestra en este tema, puedes usar un marco como el XML de Windows Installer (WiX) para generar el acceso directo e implementarlo como parte de Windows Installer. En ese caso, este código debe incluirse en msi en lugar de en el código de la aplicación. Para obtener más información, consulte el archivo de configuración de WiX de ejemplo incluido con el ejemplo Envío de notificaciones del sistema desde aplicaciones de escritorio .
Temas relacionados
-
Inicio rápido: Envío de una notificación del sistema desde el escritorio
-
Ejemplo sobre cómo enviar notificaciones del sistema de aplicaciones de escritorio
-
Identificadores de modelo de usuario de aplicación (AppUserModelID)
-
Cómo: Instalar las herramientas XML de Windows Installer (WiX)
-
Inicio rápido: Envío de una notificación de inserción del sistema
-
Directrices y lista de comprobación para las notificaciones del sistema
-
Comprobación de la configuración de notificaciones del sistema
-
Cómo controlar la activación desde una notificación del sistema