Подскажите как заставить елементы управления в программе написаной на Fasm отражатся в стиле XP. Как внедрить в программу файл манифеста?
а разве итак не отражается? это только кривые какие-то приложения хз на чём кампиленны, редко но встречаются :\ ах да, вру... minipad >help кнопка лажёвая
Добавить манифест в программу можно, подключив файл ресурсов Код (Text): section '' data readable resource from 'filename.res' При этом filename.res должен содержать в себе XML-файл следующего содержания. Прикрепить XML к RES ожно при помощи ResourceHacker. Код (Text): <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="XP style manifest" processorArchitecture="x86" version="1.0.0.0" type="win32"/> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
murder Спасибо за розъяснение,но я пробовал прикреплять файл манифеста к ресурсу с помощью редактора ресурсов GoRS (RadAsm) ефекти никакой.Что я делаю не правильно?
В fasm же можно манифест прямо в исходнике указать... Sashok Тут вроде в разделе projects есть тема "простой генератор паролей", там чел выкладывал исходник на фасме, в котором манифест забит в исходник...
??? у меня есть секция .rsrc и как это можно добавить? Код (Text): section '.rsrc' resource data readable directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions resource icons,1,LANG_NEUTRAL,icon_data resource group_icons,17,LANG_NEUTRAL,main_icon resource versions,1,LANG_NEUTRAL,version icon main_icon,\ icon_data,'%SystemRoot%\Icons\exec.ico' versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\ 'FileDescription','Sleep',\ 'LegalCopyright','2001-2005 GmbH'
Спасибо большое за помощь. С этим вопросом я розобрался. Вся загвоздка била в том ,что после внедрения манифеста в программу нужно било визвать функцию InitCommonControls,которая дает указание использовать библиотеку ComCtl32.dll версии 6.00 или выше.
Сразу же примерчег, покажу, получилось! Код (Text): include '%fasm%\win32ax.inc' cinvoke GetCurrentDirectory,nBufferLength,lpBuffer cinvoke MessageBox,NULL,lpBuffer,'I''m here:',MB_OK cinvoke ExitProcess,0 nBufferLength dw ? lpBuffer db ? resdata man db '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' db '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">' db '<assemblyIdentity ' db 'version="1.0.0.0"' db 'processorArchitecture="X86" ' db 'name="CompanyName.ProductName.YourApp" ' db 'type="win32"' db '/>' db '<description>Your application description here.</description>' db '<dependency>' db '<dependentAssembly>' db '<assemblyIdentity ' db 'type="win32" ' db 'name="Microsoft.Windows.Common-Controls" ' db 'version="6.0.0.0" ' db 'processorArchitecture="X86" ' db 'publicKeyToken="6595b64144ccf1df" ' db 'language="*"' db '/>' db '</dependentAssembly>' db '</dependency>' db '</assembly>' endres data import library kernel32,'KERNEL32.DLL',user32,'USER32.DLL' include '%fasm%\api\kernel32.inc' include '%fasm%\api\user32.inc' end data
Использование иконок разных размеров в ресурсах http://www.manhunter.ru/assembler/76_ispolzovanie_ikonok_raznih_razmerov_v_resursah.html Что-то не получается привинтить манифест. С ресурс секцией никак не работает. Может имя ресурса неправильное? Через файл manifest.xml тоже не работало. Код (Text): include '%fasm%\win32ax.inc' entry start section '.rsrc' resource data readable directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions resource icons,1,LANG_NEUTRAL,icon_data resource group_icons,17,LANG_NEUTRAL,main_icon resource versions,1,LANG_NEUTRAL,version icon main_icon,\ icon_data,'%SystemRoot%\Icons\exec.ico' versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\ 'FileDescription','Debug',\ 'LegalCopyright','2001-2005 GmbH',\ 'FileVersion','1.0.0.0',\ 'ProductVersion','1.0.0.0',\ 'OriginalFilename','Debug.exe',\ 'Company','Semiono' resdata manifest db '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' db '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">' db '<assemblyIdentity ' db 'version="1.0.0.0"' db 'processorArchitecture="X86" ' db 'name="CompanyName.ProductName.YourApp" ' db 'type="win32"' db '/>' db '<description>Debug</description>' db '<dependency>' db '<dependentAssembly>' db '<assemblyIdentity ' db 'type="win32" ' db 'name="Microsoft.Windows.Common-Controls" ' db 'version="6.0.0.0" ' db 'processorArchitecture="X86" ' db 'publicKeyToken="6595b64144ccf1df" ' db 'language="*"' db '/>' db '</dependentAssembly>' db '</dependency>' db '</assembly>' endres ;resdata manifest ;file 'manifest.xml' ;endres section '.idata' import data readable writeable library advapi32,'ADVAPI32.DLL',kernel32,'KERNEL32.DLL',user32,'USER32.DLL' include '%fasm%\api\advapi32.inc' include '%fasm%\api\kernel32.inc' include '%fasm%\api\user32.inc' ddValue dd ? lpType dd ? hKey dd ? buffer rb 256 szREGSZ db 'REG_SZ',0 szTestKey db 'SYSTEM\Select',0 szValueName db 'Current',0 szError db 'KEY Doesn''t exist.',0 form db 'Type: [%u]',10,'High: %08x',10,0 ValSize dd 4 ERROR_SUCCESS = 0 start: stdcall [RegOpenKeyEx],HKEY_LOCAL_MACHINE,szTestKey,0,KEY_READ,hKey .if eax = ERROR_SUCCESS stdcall [RegQueryValueEx],[hKey],szValueName,0,lpType,ddValue,ValSize .if eax = ERROR_SUCCESS stdcall [wsprintf],buffer,form,[lpType],[ddValue] stdcall [MessageBox],0,buffer,szTestKey,MB_OK + MB_ICONASTERISK .else stdcall [MessageBox],0,0,0,0 .endif stdcall [RegCloseKey],hKey .else stdcall [MessageBox],0,szError,0,0 .endif exit: stdcall [ExitProcess],0
Я извиняюс. Post #12 Я щас в истерике был. Два идентичных сурса кампилю, в одном есть стайл в другом нету 0_O Пока не увидел, что там в куче файлов .manifest лежал рядом с бинарем, я забыл про него. Выходит никогда и не работало. :\
Всё, готово! Код (Text): section '.rsrc' resource data readable directory ..., RT_MANIFEST,_manifest ... resource _manifest,1,LANG_NEUTRAL,manifest ... resdata manifest file 'manifest.xml' endres
минимальный xml, верней минимальный manifest Код (Text): <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="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly> Однако, наверное ещё можно выкинуть что либо? А если юзать внутрикодово, то для изяществ )) нужно добавить пробелов для красоты ;- типо (ато в ресурсах в одну строку всё вытянется) Код (Text): db 'publicKeyToken="6595b64144ccf1df" ',13,10,32,32,32,32,32,32,32,32,32,32,32,32 db 'language="*"',13,10,32,32,32,32,32,32,32,32 db '/>',13,10