On 18/07/2026 20:17, Simon Nash wrote:
The following code should be OK for all versions from Windows XP onwards,
including Windows 7.
! switch (shellVersion) { ! case 6: // WIN_XP, WIN_VISTA, WIN_7 ! m_nid.cbSize = (BYTE *)(&m_nid.hBalloonIcon) - (BYTE *)(&m_nid.cbSize); ! break; ! default:
// WIN_8 and later ! m_nid.cbSize = sizeof(m_nid); ! break; ! }
Apologies for garbled code formatting. I'm not sure how this happened. Trying
again below:
switch (shellVersion) {
case 6: // WIN_XP, WIN_VISTA, WIN_7
m_nid.cbSize = (BYTE *)(&m_nid.hBalloonIcon) - (BYTE *)(&m_nid.cbSize);
break;
default: // WIN_8 and later
m_nid.cbSize = sizeof(m_nid);
break;
}
Or (much simpler), just use if/else:
if (shellVersion == 6) { // WIN_XP, WIN_VISTA, WIN_7
m_nid.cbSize = (BYTE *)(&m_nid.hBalloonIcon) - (BYTE *)(&m_nid.cbSize);
} else { // WIN_8 and later
m_nid.cbSize = sizeof(m_nid);
}