#include "FiveWin.ch"
#define Show 7
#define CreateToastNotification 7
#define CreateToastNotifierWithId 8
#define Item 8
#define GetTemplateContent 9
#define CreateTextNode 12
#define GetElementsByTagName 17
#define AppendChild 23
function Main()
Toast( "FiveWin", "support for Windows 10", "standard toast notifications" )
return nil
function Toast( cFirstLine, cSecondLine, cThirdLine )
local pString, cIID, pToastFactory
local pXml, pNodeList, pXmlNode, pXmlText, pXmlNodeChild
local pNotification, pNotificationFactory, pNotifier
RoInitialize( 1 )
pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )
// "50AC103F-D235-4598-BBEF-98FE4D1A3AD4"
cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )
RoGetActivationFactory( pString, cIID, @pToastFactory )
WindowsDeleteString( pString );
WinRTMethod( pToastFactory, GetTemplateContent, 7, @pXml )
pString = WinRTString( "image" )
WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
WindowsDeleteString( pString )
pString = WinRTString( "text" )
WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
WindowsDeleteString( pString )
WinRTMethod( pNodeList, Item, 0, @pXmlNode )
pString = WinRTString( cFirstLine )
WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
WindowsDeleteString( pString )
WinRTMethod( pXmlNode, AppendChild, pXmlText, @pXmlNodeChild )
WinRTMethod( pNodeList, Item, 1, @pXmlNode )
pString = WinRTString( cSecondLine )
WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
WindowsDeleteString( pString )
WinRTMethod( pXmlNode, AppendChild, pXmlText, @pXmlNodeChild )
WinRTMethod( pNodeList, Item, 2, @pXmlNode )
pString = WinRTString( cThirdLine )
WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
WindowsDeleteString( pString )
WinRTMethod( pXmlNode, AppendChild, pXmlText, @pXmlNodeChild )
// 04124B20-82C6-4229-B109-FD9ED4662B53
cIID = Chr( 0x20 ) + Chr( 0x4B ) + Chr( 0x12 ) + Chr( 0x04 ) + ;
Chr( 0xC6 ) + Chr( 0x82 ) + Chr( 0x29 ) + Chr( 0x42 ) + ;
Chr( 0xB1 ) + Chr( 0x09 ) + Chr( 0xFD ) + Chr( 0x9E ) + ;
Chr( 0xD4 ) + Chr( 0x66 ) + Chr( 0x2B ) + Chr( 0x53 )
pString = WinRTString( "Windows.UI.Notifications.ToastNotification" )
RoGetActivationFactory( pString, cIID, @pNotificationFactory )
WindowsDeleteString( pString )
WinRTMethod( pNotificationFactory, CreateToastNotification, pXML, @pNotification )
pString = WinRTString( cFirstLine )
WinRTMethod( pToastFactory, CreateToastNotifierWithId, pString, @pNotifier )
WindowsDeleteString( pString )
WinRTMethod( pNotifier, Show, pNotification )
RoUninitialize()
return nil
function WinRTString( cText )
local pString
WindowsCreateString( AnsiToWide( cText ), Len( cText ), @pString )
return pString
DLL FUNCTION RoInitialize( nType AS LONG ) AS LONG PASCAL LIB "combase.dll"
DLL FUNCTION RoUninitialize() AS VOID PASCAL LIB "combase.dll"
DLL FUNCTION WindowsCreateString( cWideText AS LPSTR, nLength AS LONG, @pString AS PTR ) ;
AS LONG PASCAL LIB "combase.dll"
DLL FUNCTION WindowsDeleteString( pString AS PTR ) AS LONG PASCAL LIB "combase.dll"
DLL FUNCTION RoGetActivationFactory( pString AS PTR, REFIID AS LPSTR, @pFactory AS PTR ) ;
AS LONG PASCAL LIB "combase.dll"
#pragma BEGINDUMP
#include <Windows.h>
#include <hbapi.h>
#ifndef HB_LONGLONG
#define HB_LONGLONG long
#define hb_storvnll hb_stornl
#endif
typedef void * ( __stdcall * PMETHOD0 )( void * );
typedef void * ( __stdcall * PMETHOD1 )( void *, void * );
typedef void * ( __stdcall * PMETHOD2 )( void *, void *, void * );
HB_FUNC( WINRTMETHOD ) // pInspectable, nMethod, params...
{
IUnknown * unknown = ( IUnknown * ) hb_parnll( 1 );
void * pMethod = ( ( void ** ) unknown->lpVtbl )[ hb_parnl( 2 ) - 1 ];
IUnknown * pReturn;
switch( hb_pcount() )
{
case 3:
if( HB_ISBYREF( 3 ) )
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD1 ) pMethod )( unknown, &pReturn ) );
else
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD1 ) pMethod )( unknown, ( IUnknown * ) hb_parnll( 3 ) ) );
break;
case 4:
if( HB_ISBYREF( 4 ) )
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD2 ) pMethod )( unknown, ( void * ) hb_parnll( 3 ), &pReturn ) );
else
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD2 ) pMethod )( unknown, ( void * ) hb_parnll( 3 ), ( IUnknown * ) hb_parnll( 4 ) ) );
break;
}
if( HB_ISBYREF( 3 ) )
hb_storvnll( ( HB_LONGLONG ) pReturn, 3 );
if( HB_ISBYREF( 4 ) )
hb_storvnll( ( HB_LONGLONG ) pReturn, 4 );
}
#pragma ENDDUMP
function Main()
local oWnd
DEFINE WINDOW oWnd
ACTIVATE WINDOW oWnd ;
ON INIT Toast( "FiveWin", "support for Windows 10", "standard toast notifications" )
return nil
#define IdShow 7
#define CreateToastNotification 7
#define CreateToastNotifierWithId 8
#define Item 8
#define GetTemplateContent 9
#define CreateTextNode 12
#define GetElementsByTagName 17
#define AppendChild 23
#define TemplateToastImageAndText01 0 // A large image and a single string wrapped across three lines of text.
#define TemplateToastImageAndText02 1 // A large image,
// one string of bold text on the first line,
// one string of regular text wrapped across the second and third lines.
#define TemplateToastImageAndText03 2 // A large image, one string of bold text wrapped across the first two lines,
// one string of regular text on the third line.
#define TemplateToastImageAndText04 3 // A large image, one string of bold text on the first line,
// one string of regular text on the second line,
// one string of regular text on the third line.
#define TemplateToastText01 4 // A single string wrapped across three lines of text.
#define TemplateToastText02 5 // One string of bold text on the first line,
// one string of regular text wrapped across the second and third lines.
#define TemplateToastText03 6 // One string of bold text wrapped across the first and second lines,
// one string of regular text on the third line.
#define TemplateToastText04 7 // One string of bold text on the first line,
// one string of regular text on the second line,
// one string of regular text on the third line.
function Main()
Toast( "FiveWin", "support for Windows 10", "standard toast notifications", " Hello word" )
return nil
function Toast( cFirstLine, cSecondLine, cThirdLine , cTextNotifier )
local pXmlItem
local oToast:= TToast():new()
// oToast:CreateTemplate( TemplateToastImageAndText04 )
oToast:CreateTemplate( TemplateToastText04 )
oToast:CreateNodeList( "image" )
oToast:CreateNodeList( "text" )
oToast:AppendNode(1)
oToast:CreateNodeText( @pXmlItem, cFirstLine )
oToast:AppendItemNode( pXmlItem )
oToast:AppendNode(2)
oToast:CreateNodeText( @pXmlItem, cSecondLine )
oToast:AppendItemNode( pXmlItem )
oToast:AppendNode(3)
oToast:CreateNodeText( @pXmlItem, cThirdLine )
oToast:AppendItemNode( pXmlItem )
oToast:CreateNotification()
oToast:CreateNotifier( cTextNotifier )
oToast:Show()
oToast:End()
return nil
CLASS TToast
DATA pTFactory
DATA pXml
DATA pNodeList
DATA pXmlNode
DATA pXmlNodeChild
DATA pNotification
DATA pNotifier
METHOD New( )
METHOD CreateTemplate( nTemplateToast ) INLINE WinRTMethod( @::pTFactory, GetTemplateContent, nTemplateToast, @::pXml )
METHOD CreateNodeList( cType )
METHOD CreateNodeText( pXmlText, cTexto )
METHOD AppendNode(nItem) INLINE WinRTMethod( ::pNodeList, Item, nItem-1 , @::pXmlNode )
METHOD AppendItemNode( pXmlItem )
METHOD CreateNotification()
METHOD CreateNotifier( cText )
METHOD Show() INLINE WinRTMethod( ::pNotifier, IdShow, ::pNotification )
METHOD End()
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New() CLASS TToast
local pString
local cIID
RoInitialize( 1 )
pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )
// "50AC103F-D235-4598-BBEF-98FE4D1A3AD4"
cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )
RoGetActivationFactory( pString, cIID, @::pTFactory )
WindowsDeleteString( pString )
return Self
//----------------------------------------------------------------------------//
METHOD CreateNodeList( cType ) CLASS TToast // cType -> "image","text"
local pString := WinRTString( cType )
WinRTMethod( ::pXml, GetElementsByTagName, pString, @::pNodeList )
WindowsDeleteString( pString )
Return nil
//----------------------------------------------------------------------------//
METHOD CreateNodeText( pXmlText, cTexto ) CLASS TToast
local pString
pString = WinRTString( cTexto )
WinRTMethod( ::pXml, CreateTextNode, pString, @pXmlText )
WindowsDeleteString( pString )
Return nil
//---------------------------------------------------------------------
METHOD AppendItemNode( pXmlItem ) CLASS TToast
WinRTMethod( ::pXmlNode, AppendChild, pXmlItem, @::pXmlNodeChild )
Return nil
//---------------------------------------------------------------------
METHOD CreateNotification() CLASS TToast
local cIID
local pString
local pNotificationFactory
// 04124B20-82C6-4229-B109-FD9ED4662B53
cIID = Chr( 0x20 ) + Chr( 0x4B ) + Chr( 0x12 ) + Chr( 0x04 ) + ;
Chr( 0xC6 ) + Chr( 0x82 ) + Chr( 0x29 ) + Chr( 0x42 ) + ;
Chr( 0xB1 ) + Chr( 0x09 ) + Chr( 0xFD ) + Chr( 0x9E ) + ;
Chr( 0xD4 ) + Chr( 0x66 ) + Chr( 0x2B ) + Chr( 0x53 )
pString = WinRTString( "Windows.UI.Notifications.ToastNotification" )
RoGetActivationFactory( pString, cIID, @pNotificationFactory )
WindowsDeleteString( pString )
WinRTMethod( pNotificationFactory, CreateToastNotification, ::pXML, @::pNotification )
Return nil
//---------------------------------------------------------------------
METHOD CreateNotifier( cText ) CLASS TToast
local pString := WinRTString( cText )
WinRTMethod( ::pTFactory, CreateToastNotifierWithId, pString, @::pNotifier )
WindowsDeleteString( pString )
Return nil
//---------------------------------------------------------------------
METHOD End() CLASS TToast
RoUninitialize()
Return nil
//---------------------------------------------------------------------
function WinRTString( cText )
local pString
WindowsCreateString( AnsiToWide( cText ), Len( cText ), @pString )
return pString
//---------------------------------------------------------------------
DLL FUNCTION RoInitialize( nType AS LONG ) AS LONG PASCAL LIB "combase.dll"
DLL FUNCTION RoUninitialize() AS VOID PASCAL LIB "combase.dll"
DLL FUNCTION WindowsCreateString( cWideText AS LPSTR, nLength AS LONG, @pString AS PTR ) ;
AS LONG PASCAL LIB "combase.dll"
DLL FUNCTION WindowsDeleteString( pString AS PTR ) AS LONG PASCAL LIB "combase.dll"
DLL FUNCTION RoGetActivationFactory( pString AS PTR, REFIID AS LPSTR, @pFactory AS PTR ) ;
AS LONG PASCAL LIB "combase.dll"
//---------------------------------------------------------------------
#pragma BEGINDUMP
#include <Windows.h>
#include <hbapi.h>
#ifndef HB_LONGLONG
#define HB_LONGLONG long
#define hb_storvnll hb_stornl
#endif
typedef void * ( __stdcall * PMETHOD0 )( void * );
typedef void * ( __stdcall * PMETHOD1 )( void *, void * );
typedef void * ( __stdcall * PMETHOD2 )( void *, void *, void * );
HB_FUNC( WINRTMETHOD ) // pInspectable, nMethod, params...
{
IUnknown * unknown = ( IUnknown * ) hb_parnll( 1 );
void * pMethod = ( ( void ** ) unknown->lpVtbl )[ hb_parnl( 2 ) - 1 ];
IUnknown * pReturn;
switch( hb_pcount() )
{
case 3:
if( HB_ISBYREF( 3 ) )
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD1 ) pMethod )( unknown, &pReturn ) );
else
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD1 ) pMethod )( unknown, ( IUnknown * ) hb_parnll( 3 ) ) );
break;
case 4:
if( HB_ISBYREF( 4 ) )
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD2 ) pMethod )( unknown, ( void * ) hb_parnll( 3 ), &pReturn ) );
else
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD2 ) pMethod )( unknown, ( void * ) hb_parnll( 3 ), ( IUnknown * ) hb_parnll( 4 ) ) );
break;
}
if( HB_ISBYREF( 3 ) )
hb_storvnll( ( HB_LONGLONG ) pReturn, 3 );
if( HB_ISBYREF( 4 ) )
hb_storvnll( ( HB_LONGLONG ) pReturn, 4 );
}
#pragma ENDDUMP
#include "FiveWin.ch"
#define Show 7
#define CreateToastNotification 7
#define CreateToastNotifierWithId 8
#define Item 8
#define GetTemplateContent 9
#define CreateTextNode 12
#define GetElementsByTagName 17
#define AppendChild 23
function Main()
local oWnd
DEFINE WINDOW oWnd
ACTIVATE WINDOW oWnd ;
ON INIT Toast( "FiveWin", "support for Windows 10", "standard toast notifications" )
return nil
function Toast( cFirstLine, cSecondLine, cThirdLine )
local pString, cIID, pToastFactory
local pXml, pNodeList, pXmlNode, pXmlText, pXmlNodeChild
local pNotification, pNotificationFactory, pNotifier
RoInitialize( 1 )
pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )
// "50AC103F-D235-4598-BBEF-98FE4D1A3AD4"
cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )
RoGetActivationFactory( pString, cIID, @pToastFactory )
WindowsDeleteString( pString );
WinRTMethod( pToastFactory, GetTemplateContent, 7, @pXml )
pString = WinRTString( "image" )
WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
WindowsDeleteString( pString )
pString = WinRTString( "text" )
WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
WindowsDeleteString( pString )
WinRTMethod( pNodeList, Item, 0, @pXmlNode )
pString = WinRTString( cFirstLine )
WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
WindowsDeleteString( pString )
WinRTMethod( pXmlNode, AppendChild, pXmlText, @pXmlNodeChild )
WinRTMethod( pNodeList, Item, 1, @pXmlNode )
pString = WinRTString( cSecondLine )
WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
WindowsDeleteString( pString )
WinRTMethod( pXmlNode, AppendChild, pXmlText, @pXmlNodeChild )
WinRTMethod( pNodeList, Item, 2, @pXmlNode )
pString = WinRTString( cThirdLine )
WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
WindowsDeleteString( pString )
WinRTMethod( pXmlNode, AppendChild, pXmlText, @pXmlNodeChild )
// 04124B20-82C6-4229-B109-FD9ED4662B53
cIID = Chr( 0x20 ) + Chr( 0x4B ) + Chr( 0x12 ) + Chr( 0x04 ) + ;
Chr( 0xC6 ) + Chr( 0x82 ) + Chr( 0x29 ) + Chr( 0x42 ) + ;
Chr( 0xB1 ) + Chr( 0x09 ) + Chr( 0xFD ) + Chr( 0x9E ) + ;
Chr( 0xD4 ) + Chr( 0x66 ) + Chr( 0x2B ) + Chr( 0x53 )
pString = WinRTString( "Windows.UI.Notifications.ToastNotification" )
RoGetActivationFactory( pString, cIID, @pNotificationFactory )
WindowsDeleteString( pString )
WinRTMethod( pNotificationFactory, CreateToastNotification, pXML, @pNotification )
pString = WinRTString( cFirstLine )
WinRTMethod( pToastFactory, CreateToastNotifierWithId, pString, @pNotifier )
WindowsDeleteString( pString )
WinRTMethod( pNotifier, Show, pNotification )
RoUninitialize()
return nil
function WinRTString( cText )
local pString
WindowsCreateString( AnsiToWide( cText ), Len( cText ), @pString )
return pString
DLL FUNCTION RoInitialize( nType AS LONG ) AS LONG PASCAL LIB "combase.dll"
DLL FUNCTION RoUninitialize() AS VOID PASCAL LIB "combase.dll"
DLL FUNCTION WindowsCreateString( cWideText AS LPSTR, nLength AS LONG, @pString AS PTR ) ;
AS LONG PASCAL LIB "combase.dll"
DLL FUNCTION WindowsDeleteString( pString AS PTR ) AS LONG PASCAL LIB "combase.dll"
DLL FUNCTION RoGetActivationFactory( pString AS PTR, REFIID AS LPSTR, @pFactory AS PTR ) ;
AS LONG PASCAL LIB "combase.dll"
#pragma BEGINDUMP
#include <Windows.h>
#include <hbapi.h>
#ifndef HB_LONGLONG
#define HB_LONGLONG long
#define hb_storvnll hb_stornl
#endif
typedef void * ( __stdcall * PMETHOD0 )( void * );
typedef void * ( __stdcall * PMETHOD1 )( void *, void * );
typedef void * ( __stdcall * PMETHOD2 )( void *, void *, void * );
HB_FUNC( WINRTMETHOD ) // pInspectable, nMethod, params...
{
IUnknown * unknown = ( IUnknown * ) hb_parnll( 1 );
void * pMethod = ( ( void ** ) unknown->lpVtbl )[ hb_parnl( 2 ) - 1 ];
IUnknown * pReturn;
switch( hb_pcount() )
{
case 3:
if( HB_ISBYREF( 3 ) )
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD1 ) pMethod )( unknown, &pReturn ) );
else
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD1 ) pMethod )( unknown, ( IUnknown * ) hb_parnll( 3 ) ) );
break;
case 4:
if( HB_ISBYREF( 4 ) )
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD2 ) pMethod )( unknown, ( void * ) hb_parnll( 3 ), &pReturn ) );
else
hb_retnll( ( HB_LONGLONG ) ( ( PMETHOD2 ) pMethod )( unknown, ( void * ) hb_parnll( 3 ), ( IUnknown * ) hb_parnll( 4 ) ) );
break;
}
if( HB_ISBYREF( 3 ) )
hb_storvnll( ( HB_LONGLONG ) pReturn, 3 );
if( HB_ISBYREF( 4 ) )
hb_storvnll( ( HB_LONGLONG ) pReturn, 4 );
}
#pragma ENDDUMP
矬闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡醴
?FWH 64 for Harbour 16.03 (MSVC++) Mar.2016 Harbour development power 喝
?(c) FiveTech 1993-2016 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 喊
斂闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡囁?
'葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔葔?' 不是內部或外部命令、可執行的程式或批次檔。
Compiling...
Harbour 3.2.0dev (r1603082110)
Copyright (c) 1999-2016, http://harbour-project.org/
Compiling 'toast.prg' and generating preprocessed output to 'toast.ppo'...
Lines 4684, Functions/Procedures 8
Generating C source output to 'toast.c'... Done.
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23918 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
toast.c
toast.prg(136): warning C4311: 'type cast': pointer truncation from 'void *' to 'long'
toast.prg(138): warning C4311: 'type cast': pointer truncation from 'void *' to 'long'
toast.prg(143): warning C4311: 'type cast': pointer truncation from 'void *' to 'long'
toast.prg(145): warning C4311: 'type cast': pointer truncation from 'void *' to 'long'
toast.prg(150): warning C4311: 'type cast': pointer truncation from 'IUnknown *' to 'long'
toast.prg(153): warning C4311: 'type cast': pointer truncation from 'IUnknown *' to 'long'
* Application successfully built *
Antonio Linares wrote:Richard,
It is not ready for 64 bits yet
Return to FiveWin for Harbour/xHarbour
Users browsing this forum: Silvio.Falconi and 48 guests