2010-05-21 3 views
0

Я думаю, что субъект говорит все ...Импорт конкретных (в моем случае - Themes.ThemesService.ThemesEnabled) функция/процедура runetime в Delphi

Мне нужен только этот метод. Не нужно тратить около 6 Мб включенной единицы, если только мне нужно только один метод с этого устройства (Темы) ...

Я думал об устройстве UxTheme, но он не содержал надлежащей функции. Какую Windows DLL мне нужно импортировать и какую функцию API этот метод означает?

Спасибо.

P.S. Вопрос предназначен для охвата не только этого конкретного метода, но и других, так как мне нужно будет делать то же самое в установках MSXML и MM ...

ответ

1

@HX_unbanned, по-видимому, вы немного смущены. потому что добавление единицы тембров в ваш проект только увеличивает размер EXE в 321 kb aprox. в любом случае, если вы хотите проверить, является ли ваше приложение тематическим (themesEnabled) вручную, вы должны следовать следующим шагам.

1) проверить версию comctl32.dll библиотеки (должна быть большей или равной 6)

2) загрузить библиотеку UXTheme.dll

3) импортировать IsThemeActive и IsAppThemed функции.

4) проверить значение тезисов функциев (оба должна быть истинными)

проверки этого образца

function ThemesEnabled :Boolean; 
const 
    ComCtlVersionIE6 = $00060000; 
var 
    ThemeLib  : THandle; 
    IsThemeActive : function: Boolean; stdcall; 
    IsAppThemed  : function: Boolean; stdcall; 
begin 
    Result:=GetFileVersion('comctl32.dll')>=ComCtlVersionIE6; 
    if not Result then exit; 
    ThemeLib := LoadLibrary('uxtheme.dll'); 
    try 
    if ThemeLib > 0 then 
    begin 
     IsAppThemed := GetProcAddress(ThemeLib, 'IsAppThemed'); 
     IsThemeActive := GetProcAddress(ThemeLib, 'IsThemeActive'); 
     Result:=IsAppThemed and IsThemeActive; 
    end 
    else 
    Result:=False; 
    finally 
    FreeLibrary(ThemeLib); 
    end; 
end; 
+0

Хмммы. Хорошо, это было бы правильным решением, но, фактически, добавив модуль UxThemes к проекту, размер увеличивается на ~ 321kb ... если я добавлю модуль Themes, для компиляции exe будет добавлено ~ 6,5 МБ. Btw - есть ли способ найти функцию delphi в соответствующей DLL Windows (вызов API)? –

+0

Спасибо. Я проверю его как можно скорее;) –

+0

Да, HX. Просто найдите исходный код. Функция Delphi вызовет функцию API, поэтому, когда вы найдете ее, вы найдете другую рядом. –