Hola Antonio,
Estoy probando FWH 10.08 y observo que IsAppThemed() sigue devolviendo .T. a煤n sin temas activos.
驴 Recuerdas nuestra 煤ltima conversaci贸n ?
驴 C贸mo quedar谩 finalmente ?
Gracias y saludos
Juan
Hola Antonio,
Estoy probando FWH 10.08 y observo que IsAppThemed() sigue devolviendo .T. a煤n sin temas activos.
驴 Recuerdas nuestra 煤ltima conversaci贸n ?
驴 C贸mo quedar谩 finalmente ?
Gracias y saludos
Juan
BOOL _IsAppThemed( void )
{
聽 聽static BOOL bInit = FALSE;
聽 聽static BOOL bIsThemed = FALSE;
聽 聽InitThemes();
聽 聽if( pIsAppThemed && ! bInit )
聽 聽{
聽 聽聽 聽WIN32_FIND_DATA fd;
聽 聽聽
聽 聽 聽 bInit = TRUE;
聽 聽 聽 bIsThemed = ( ( ( BOOL ) FindResource( GetResources(), MAKEINTRESOURCE( 1 ),
聽 聽 聽 聽 聽 聽 聽 聽 聽 MAKEINTRESOURCE( 24 ) ) ) ||
聽 聽 聽 聽 聽 聽 聽 聽 聽 ( ( BOOL ) FindResource( GetInstance(), MAKEINTRESOURCE( 1 ),
聽 聽 聽 聽 聽 聽 聽 聽 聽 MAKEINTRESOURCE( 24 ) ) ) || pIsAppThemed() );
聽 聽 聽 聽 聽 聽 聽 聽 聽
聽 聽 聽 if( ! bIsThemed )
聽 聽 聽 {
聽 聽 聽 聽 聽char AppName[ 256 ];
聽 聽 聽 聽 聽HANDLE hFind;
聽 聽 聽 聽
聽 聽 聽 聽 聽GetModuleFileName( NULL, AppName, 255 );
聽 聽 聽 聽 聽lstrcat( AppName, ".Manifest" );
聽 聽 聽 聽 聽
聽 聽 聽 聽 聽if( ( hFind = FindFirstFile( AppName, &fd ) ) != INVALID_HANDLE_VALUE )
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 bIsThemed = TRUE;
聽 聽 聽 聽 聽 聽 FindClose( hFind );
聽 聽 聽 聽 聽}
聽 聽 聽 } 聽 聽 聽
聽 聽}
聽 聽if( pIsAppThemed != NULL )
聽 聽 聽 return bIsThemed;
聽 聽else
聽 聽 聽 return FALSE;
}typedef BOOL ( __stdcall * PFNISAPPTHEMED ) ( void );
static PFNISAPPTHEMED pIsAppThemed = NULL;
static HMODULE hDLL = NULL;
static void InitThemes( void )
{
聽 聽static BOOL bInit = FALSE;
聽 聽if( bInit )
聽 聽 聽 return;
聽 聽else
聽 聽 聽 bInit = TRUE;
聽 聽if( hDLL == NULL )
聽 聽{
聽 聽 聽 if( hDLL = LoadLibrary( "UXTHEME.DLL" ) )
聽 聽 聽 {
聽 聽 聽 聽 聽pIsAppThemed = ( PFNISAPPTHEMED ) GetProcAddress( hDLL, "IsAppThemed" );
聽 聽 聽 }
聽 聽}
}Juan,
Has modificado la funci贸n ?
Le has encontrado alg煤n fallo ?
gracias,
BOOL _IsAppThemed( void )
{
static BOOL bInit = FALSE;
static BOOL bIsThemed = FALSE;
InitThemes();
if( pIsAppThemed && ! bInit )
{
WIN32_FIND_DATA fd;
bInit = TRUE;
bIsThemed = ( ( ( BOOL ) FindResource( GetResources(), MAKEINTRESOURCE( 1 ), MAKEINTRESOURCE( 24 ) ) ) ||
( ( BOOL ) FindResource( GetInstance(), MAKEINTRESOURCE( 1 ), MAKEINTRESOURCE( 24 ) ) ) || pIsAppThemed() ) /*ACA pIsAppThemed es funcion o var, creo que deberia ser una var*/
....Carlos,
Esa variable contendr谩 un puntero cargado desde uxtheme.dll al que se puede llamar como si fuese una funci贸n ![]()
En 茅l c贸digo que he publicado esta todo. Solo tienes que compilarlo ![]()
function IsAppThemed()
return( .f. )<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
聽 聽 type="win32"
聽 聽 name="MyOrganization.MyDivision.MyApp"
聽 聽 version="1.0.0.0"
聽 聽 processorArchitecture="X86"
聽 聽 />
聽 聽 <description>Verbal description of MyApp.</description>
聽 聽 <dependency>
聽 聽 <dependentAssembly>
聽 聽 <assemblyIdentity
聽 聽 聽 聽 type="win32"
聽 聽 聽 聽 name="Microsoft.Windows.Common-Controls"
聽 聽 聽 聽 version="6.0.0.0"
聽 聽 聽 聽 processorArchitecture="X86"
聽 聽 聽 聽 publicKeyToken="6595b64144ccf1df"
聽 聽 聽 聽 language="*"
聽 聽 />
聽 聽 </dependentAssembly>
聽 聽 </dependency>
</assembly>#include "fivewin.ch"
procedure main()
聽 聽
聽 聽?"Hola Mundo"
聽 聽?"IsAppThemed:",IsAppThemed() //original de fwh
聽 聽?"IsActive:",IsThemeActive() //original de fwh
聽 聽
聽 聽?"IsAppThemed:",IsAppThemed2() //las aca incluidas
聽 聽?"IsActive:",IsThemeActive2() //las aca incluidas
聽 聽CloseTheme()
聽 聽
return
#pragma BEGINDUMP
/*----------------------------------------------------------------------------*/
#include "hbapi.h"
#include "windows.h"
#include "uxtheme.h"
/*----------------------------------------------------------------------------*/
typedef BOOL ( __stdcall * PFNISAPPTHEMED ) ( void );
typedef BOOL ( __stdcall * PFNISTHEMEACTIVE ) ( void );
static HMODULE 聽 聽 聽 聽hDLL 聽 聽 聽 聽 = NULL;
static PFNISAPPTHEMED pIsAppThemed = NULL;
static void InitThemes( void );
BOOL _IsAppThemed( void );
BOOL _IsThemeActive( void );
BOOL _CloseTheme(void);
/*----------------------------------------------------------------------------*/
HB_FUNC( ISAPPTHEMED2 )
{
聽 聽hb_retl( _IsAppThemed() );
}
HB_FUNC( ISTHEMEACTIVE2 )
{
聽 聽hb_retl( _IsThemeActive() );
}
HB_FUNC( CLOSETHEME )
{
聽 聽hb_retl( _CloseTheme() );
}
/*----------------------------------------------------------------------------*/
static void InitThemes( void )
{
聽 聽/*inicializa variable estatica*/
聽 聽static BOOL bInit = FALSE;
聽 聽/*valida con variable estatica que la funcion se ejecute solo una vez*/
聽 聽if( bInit )
聽 聽{
聽 聽 聽 return;
聽 聽}
聽 聽else
聽 聽{
聽 聽 聽 bInit = TRUE;
聽 聽}
聽 聽if( hDLL == NULL )
聽 聽{
聽 聽 聽 /*carga dll que manipula los temas*/
聽 聽 聽 if( hDLL = LoadLibrary( "UXTHEME.DLL" ) )
聽 聽 聽 {
聽 聽 聽 聽 聽/*obtiene puntero a funcion IsAppThemed contenida en la dll cargada previamente*/
聽 聽 聽 聽 聽pIsAppThemed = ( PFNISAPPTHEMED ) GetProcAddress( hDLL, "IsAppThemed" );
聽 聽 聽 }
聽 聽}
}
/*----------------------------------------------------------------------------*/
BOOL _IsAppThemed( void )
{
聽 聽/*inicializa variables estaticas*/
聽 聽static BOOL bInit 聽 聽 = FALSE;
聽 聽static BOOL bIsThemed = FALSE;
聽 聽/*obtiene puntero de la funcion IsAppThemed*/
聽 聽InitThemes();
聽 聽if( pIsAppThemed && ! bInit )
聽 聽{
聽 聽 聽 WIN32_FIND_DATA fd;
聽 聽 聽 bInit 聽 聽 = TRUE;
聽 聽 聽 bIsThemed = ( ( ( BOOL ) FindResource( GetResources(), MAKEINTRESOURCE( 1 ), MAKEINTRESOURCE( 24 ) ) ) ||
聽 聽 聽 聽 聽 聽 聽 聽 聽 ( 聽 ( BOOL ) FindResource( GetInstance(), 聽MAKEINTRESOURCE( 1 ), MAKEINTRESOURCE( 24 ) ) ) || pIsAppThemed() );
聽 聽 聽 if( ! bIsThemed )
聽 聽 聽 {
聽 聽 聽 聽 聽char AppName[ 256 ];
聽 聽 聽 聽 聽HANDLE hFind;
聽 聽 聽 聽 聽GetModuleFileName( NULL, AppName, 255 );
聽 聽 聽 聽 聽lstrcat( AppName, ".Manifest" );
聽 聽 聽 聽 聽if( ( hFind = FindFirstFile( AppName, &fd ) ) != INVALID_HANDLE_VALUE )
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 bIsThemed = TRUE;
聽 聽 聽 聽 聽 聽 FindClose( hFind );
聽 聽 聽 聽 聽}
聽 聽 聽 }
聽 聽}
聽 聽if( pIsAppThemed != NULL )
聽 聽{
聽 聽 聽 return bIsThemed;
聽 聽}
聽 聽else
聽 聽{
聽 聽 聽 return FALSE;
聽 聽}
}
/*----------------------------------------------------------------------------*/
BOOL _IsThemeActive( void )
{
聽 聽PFNISTHEMEACTIVE pIsThemeActive = NULL; 聽
聽 聽if( hDLL != 0 )
聽 聽{
聽 聽 聽 /*puntero a funcion IsThemeActive*/
聽 聽 聽 pIsThemeActive = ( PFNISTHEMEACTIVE ) GetProcAddress( hDLL, "IsThemeActive" );
聽 聽
聽 聽 聽 /*ejecuta funcion*/
聽 聽 聽 if( pIsThemeActive() )
聽 聽 聽 {
聽 聽 聽 聽 聽return TRUE;
聽 聽 聽 }
聽 聽
聽 聽}
聽 聽return FALSE;
}
/*----------------------------------------------------------------------------*/
BOOL _CloseTheme( void )
{
聽 聽BOOL bClose = FALSE;
聽 聽if( hDLL != 0 )
聽 聽{
聽 聽 聽 bClose = FreeLibrary( hDLL ); 聽
聽 聽}
聽 聽return bClose;
}
#pragma ENDDUMP
/* codigo tomado de internet como ejemplo.
bool bReturn = false;
HMODULE hDll = ::LoadLibrary(_T("UxTheme.dll"));
if( hDll )
{
typedef BOOL(*THEMEACTIVE)(VOID);
THEMEACTIVE pIsThemeActive = (THEMEACTIVE)GetProcAddress(hDll, "IsThemeActive");
if( pIsThemeActive )
bReturn = pIsThemeActive();
::FreeLibrary( hDll );
}
return bReturn;
*/// Generated by ResEdit 1.5.4
// Copyright (C) 2006-2010
// <!-- m --><a class="postlink" href="http://www.resedit.net">http://www.resedit.net</a><!-- m -->
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"
//
// Manifest resources
//
1 聽 聽 聽 聽 聽 聽 聽 聽 聽RT_MANIFEST 聽 聽".\\manifest.xml"<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
聽 <dependency>
聽 聽 <dependentAssembly>
聽 聽 聽 <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
聽 聽 </dependentAssembly>
聽 </dependency>
聽 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
聽 聽 <security>
聽 聽 聽 <requestedPrivileges>
聽 聽 聽 聽 <requestedExecutionLevel
聽 聽 聽 聽 聽 level="asInvoker"
聽 聽 聽 聽 聽 uiAccess="false"/>
聽 聽 聽 </requestedPrivileges>
聽 聽 </security>
聽 </trustInfo>
</assembly>