Definition of _NOTIFYICONDATAW (PB use unicode note Ascii, so the structure is _NOTIFYICONDATAW instead of _NOTIFYICONDATAA)
(File shellapi.h)
Code: Select all
typedef struct _NOTIFYICONDATAW {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
#if (NTDDI_VERSION < NTDDI_WIN2K)
WCHAR szTip[64];
#endif
#if (NTDDI_VERSION >= NTDDI_WIN2K)
WCHAR szTip[128];
DWORD dwState;
DWORD dwStateMask;
WCHAR szInfo[256];
#ifndef _SHELL_EXPORTS_INTERNALAPI_H_
union {
UINT uTimeout;
UINT uVersion; // used with NIM_SETVERSION, values 0, 3 and 4
} DUMMYUNIONNAME;
#endif
WCHAR szInfoTitle[64];
DWORD dwInfoFlags;
#endif
#if (NTDDI_VERSION >= NTDDI_WINXP)
GUID guidItem;
#endif
#if (NTDDI_VERSION >= NTDDI_VISTA)
HICON hBalloonIcon;
#endif
} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
Code: Select all
/*
Code C/C++ Visual Studio 2022
*/
#include <iostream>
#include <windows.h>
#include <shellapi.h>
#define PRINTF_SIZEOF(type) printf(" SizeOf( " #type " ) = %zu\n", sizeof(type))
// #define PRINTF_OffsetOf(type,member) printf(" OffsetOf(" #type", "#member ") = %zu\n", offsetof(type,member))
#define PRINTF_OffsetOf(type,member) printf(" OffsetOf( " #member " ) = %zu\n", offsetof(type,member))
int main()
{
#ifdef UNICODE
#if defined(_WIN64)
printf("\n");
printf("\n");
printf(" Compilation Window 64 bit - mode unicode");
#else
printf("\n");
printf("\n");
printf(" Compilation Window 32 bit - mode unicode");
#endif
/*
typedef struct _NOTIFYICONDATAW {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
#if (NTDDI_VERSION < NTDDI_WIN2K)
WCHAR szTip[64];
#endif
#if (NTDDI_VERSION >= NTDDI_WIN2K)
WCHAR szTip[128];
DWORD dwState;
DWORD dwStateMask;
WCHAR szInfo[256];
#ifndef _SHELL_EXPORTS_INTERNALAPI_H_
union {
UINT uTimeout;
UINT uVersion; // used with NIM_SETVERSION, values 0, 3 and 4
} DUMMYUNIONNAME;
#endif
WCHAR szInfoTitle[64];
DWORD dwInfoFlags;
#endif
#if (NTDDI_VERSION >= NTDDI_WINXP)
GUID guidItem;
#endif
#if (NTDDI_VERSION >= NTDDI_VISTA)
HICON hBalloonIcon;
#endif
} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
*/
printf("\n");
printf(" Structure _NOTIFYICONDATAW\n");
printf(" -----------------\n");
PRINTF_SIZEOF(_NOTIFYICONDATAW);
printf("\n");
PRINTF_OffsetOf(_NOTIFYICONDATAW, cbSize);
PRINTF_OffsetOf(_NOTIFYICONDATAW, hWnd);
PRINTF_OffsetOf(_NOTIFYICONDATAW, uID) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, uFlags) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, uCallbackMessage) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, hIcon) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, szTip) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, dwState) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, dwStateMask) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, szInfo) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, uTimeout) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, uVersion) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, szInfoTitle) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, dwInfoFlags) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, guidItem) ;
PRINTF_OffsetOf(_NOTIFYICONDATAW, hBalloonIcon) ;
#else
printf("You must compile in unicode mode!\n");
#endif
return 0;
}
Code: Select all
; code PB, .c could be change by .s
Structure NOTIFYICONDATAW
cbSize.l
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
PB_Alignment1.b[4]
CompilerEndIf
hWnd.i
uID.l
uFlags.l
uCallbackMessage.l
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
PB_Alignment2.b[4]
CompilerEndIf
hIcon.i
If the os is < Win 2000 --> szTip must be egal To 64
szTip.c[128]
dwState.l
dwStateMask.l
szInfo.c[256]
StructureUnion
uTimeout.l
uVersion.l
EndStructureUnion
szInfoTitle.c[64]
dwInfoFlags.l
guidItem.guid
hBalloonIcon.i
EndStructure
Results
///////////////////////////// Compilation Window 32 bit - mode unicode //////////////////////////////////
Visual Studio 2022
Structure _NOTIFYICONDATAW
-----------------
SizeOf( _NOTIFYICONDATAW ) = 956
OffsetOf( cbSize ) = 0
OffsetOf( hWnd ) = 4
OffsetOf( uID ) = 8
OffsetOf( uFlags ) = 12
OffsetOf( uCallbackMessage ) = 16
OffsetOf( hIcon ) = 20
OffsetOf( szTip ) = 24
OffsetOf( dwState ) = 280
OffsetOf( dwStateMask ) = 284
OffsetOf( szInfo ) = 288
OffsetOf( uTimeout ) = 800
OffsetOf( uVersion ) = 800
OffsetOf( szInfoTitle ) = 804
OffsetOf( dwInfoFlags ) = 932
OffsetOf( guidItem ) = 936
OffsetOf( hBalloonIcon ) = 952
///////////////////////////////////////////////////////////////
PureBasic 6.03 LTS
Compilation Window 32 bit - mode Unicode
---------------------------
SizeOf(NOTIFYICONDATAW) = 956
OffsetOf( cbSize ) = 0
OffsetOf( hWnd ) = 4
OffsetOf( uID ) = 8
OffsetOf( uFlags ) = 12
OffsetOf( uCallbackMessage ) = 16
OffsetOf( hIcon ) = 20
OffsetOf( szTip ) = 24
OffsetOf( dwState ) = 280
OffsetOf( dwStateMask ) = 284
OffsetOf( szInfo ) = 288
OffsetOf( uTimeout ) = 800
OffsetOf( uVersion ) = 800
OffsetOf( szInfoTitle ) = 804
OffsetOf( dwInfoFlags ) = 932
OffsetOf( guidItem ) = 936
OffsetOf( hBalloonIcon ) = 952
///////////////////////////// Compilation Window 64 bit - mode unicode //////////////////////////////////
Visual Studio 2022
Structure _NOTIFYICONDATAW
-----------------
SizeOf( _NOTIFYICONDATAW ) = 976
OffsetOf( cbSize ) = 0
OffsetOf( hWnd ) = 8
OffsetOf( uID ) = 16
OffsetOf( uFlags ) = 20
OffsetOf( uCallbackMessage ) = 24
OffsetOf( hIcon ) = 32
OffsetOf( szTip ) = 40
OffsetOf( dwState ) = 296
OffsetOf( dwStateMask ) = 300
OffsetOf( szInfo ) = 304
OffsetOf( uTimeout ) = 816
OffsetOf( uVersion ) = 816
OffsetOf( szInfoTitle ) = 820
OffsetOf( dwInfoFlags ) = 948
OffsetOf( guidItem ) = 952
OffsetOf( hBalloonIcon ) = 968
PureBasic 6.03 LTS
Compilation Window 64 bit - mode Unicode
---------------------------
SizeOf(NOTIFYICONDATAW) = 976
OffsetOf( cbSize ) = 0
OffsetOf( hWnd ) = 8
OffsetOf( uID ) = 16
OffsetOf( uFlags ) = 20
OffsetOf( uCallbackMessage ) = 24
OffsetOf( hIcon ) = 32
OffsetOf( szTip ) = 40
OffsetOf( dwState ) = 296
OffsetOf( dwStateMask ) = 300
OffsetOf( szInfo ) = 304
OffsetOf( uTimeout ) = 816
OffsetOf( uVersion ) = 816
OffsetOf( szInfoTitle ) = 820
OffsetOf( dwInfoFlags ) = 948
OffsetOf( guidItem ) = 952
OffsetOf( hBalloonIcon ) = 968
///////////////////////////////////////////////////////////////
there are conditions with
szTip
dwState
dwStateMask
szInfo
guidItem
hBalloonIcon