Fasm и XP Style

Тема в разделе "WASM.BEGINNERS", создана пользователем Sashok, 19 янв 2009.

  1. Sashok

    Sashok New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    52
    Подскажите как заставить елементы управления в программе написаной на Fasm отражатся в стиле XP.
    Как внедрить в программу файл манифеста?
     
  2. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    добавить его в ресурсы
     
  3. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Положить рядом с ним .manifest файл
     
  4. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    а разве итак не отражается? это только кривые какие-то приложения хз на чём кампиленны, редко но встречаются :\
    ах да, вру... minipad >help кнопка лажёвая :)
     
  5. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Добавить манифест в программу можно, подключив файл ресурсов
    Код (Text):
    1. section '' data readable resource from 'filename.res'
    При этом filename.res должен содержать в себе XML-файл следующего содержания. Прикрепить XML к RES ожно при помощи ResourceHacker.
    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    3. <assemblyIdentity
    4.   name="XP style manifest"
    5.   processorArchitecture="x86"
    6.   version="1.0.0.0"
    7.   type="win32"/>
    8. <dependency>
    9.   <dependentAssembly>
    10.     <assemblyIdentity
    11.       type="win32"
    12.       name="Microsoft.Windows.Common-Controls"
    13.       version="6.0.0.0"
    14.       processorArchitecture="x86"
    15.       publicKeyToken="6595b64144ccf1df"
    16.       language="*"
    17.     />
    18.   </dependentAssembly>
    19. </dependency>
    20. </assembly>
     
  6. Sashok

    Sashok New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    52
    murder


    Спасибо за розъяснение,но я пробовал прикреплять файл манифеста к ресурсу с помощью редактора ресурсов GoRS (RadAsm)
    ефекти никакой.Что я делаю не правильно?
     
  7. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    В fasm же можно манифест прямо в исходнике указать...

    Sashok
    Тут вроде в разделе projects есть тема "простой генератор паролей", там чел выкладывал исходник на фасме, в котором манифест забит в исходник...
     
  8. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    ???
    у меня есть секция .rsrc и как это можно добавить?
    Код (Text):
    1. section '.rsrc' resource data readable
    2.  
    3.         directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions
    4.         resource icons,1,LANG_NEUTRAL,icon_data
    5.         resource group_icons,17,LANG_NEUTRAL,main_icon
    6.         resource versions,1,LANG_NEUTRAL,version
    7.  
    8.         icon main_icon,\
    9.         icon_data,'%SystemRoot%\Icons\exec.ico'
    10.  
    11.         versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\
    12.                     'FileDescription','Sleep',\
    13.                     'LegalCopyright','2001-2005 GmbH'
     
  9. Sashok

    Sashok New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    52
    Спасибо большое за помощь.
    С этим вопросом я розобрался.
    Вся загвоздка била в том ,что после внедрения манифеста в программу
    нужно било визвать функцию InitCommonControls,которая дает указание использовать библиотеку ComCtl32.dll версии 6.00 или выше.
     
  10. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Какое ещё спасибо! А мне то когда ответ пришлют!? :)
     
  11. Sashok

    Sashok New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    52
    http://mikhajduk.houa.org/SimPaGen/SimPaGenRU.zip -качай и изучай.
     
  12. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Сразу же примерчег, покажу, получилось!
    Код (Text):
    1. include '%fasm%\win32ax.inc'
    2.  
    3.         cinvoke GetCurrentDirectory,nBufferLength,lpBuffer
    4.         cinvoke MessageBox,NULL,lpBuffer,'I''m here:',MB_OK
    5.         cinvoke ExitProcess,0
    6.  
    7.         nBufferLength dw ?
    8.         lpBuffer db ?
    9.  
    10.         resdata man
    11.                 db '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
    12.                 db '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">'
    13.                 db '<assemblyIdentity '
    14.                         db 'version="1.0.0.0"'
    15.                         db 'processorArchitecture="X86" '
    16.                         db 'name="CompanyName.ProductName.YourApp" '
    17.                         db 'type="win32"'
    18.                 db '/>'
    19.                 db '<description>Your application description here.</description>'
    20.                 db '<dependency>'
    21.                         db '<dependentAssembly>'
    22.                                 db '<assemblyIdentity '
    23.                                         db 'type="win32" '
    24.                                         db 'name="Microsoft.Windows.Common-Controls" '
    25.                                         db 'version="6.0.0.0" '
    26.                                         db 'processorArchitecture="X86" '
    27.                                         db 'publicKeyToken="6595b64144ccf1df" '
    28.                                         db 'language="*"'
    29.                                 db '/>'
    30.                         db '</dependentAssembly>'
    31.                 db '</dependency>'
    32.                 db '</assembly>'
    33.         endres
    34.  
    35. data import
    36.  
    37.         library kernel32,'KERNEL32.DLL',user32,'USER32.DLL'
    38.         include '%fasm%\api\kernel32.inc'
    39.         include '%fasm%\api\user32.inc'
    40.  
    41. end data
     
  13. Sashok

    Sashok New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    52
    Скажы спасибо K10.
     
  14. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Использование иконок разных размеров в ресурсах
    http://www.manhunter.ru/assembler/76_ispolzovanie_ikonok_raznih_razmerov_v_resursah.html
    :)

    Что-то не получается привинтить манифест. С ресурс секцией никак не работает.
    Может имя ресурса неправильное? Через файл manifest.xml тоже не работало.

    Код (Text):
    1. include '%fasm%\win32ax.inc'
    2. entry start
    3. section '.rsrc' resource data readable
    4.         directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions
    5.         resource icons,1,LANG_NEUTRAL,icon_data
    6.         resource group_icons,17,LANG_NEUTRAL,main_icon
    7.         resource versions,1,LANG_NEUTRAL,version
    8.  
    9.         icon main_icon,\
    10.         icon_data,'%SystemRoot%\Icons\exec.ico'
    11.  
    12.         versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\
    13.                     'FileDescription','Debug',\
    14.                     'LegalCopyright','2001-2005 GmbH',\
    15.                     'FileVersion','1.0.0.0',\
    16.                     'ProductVersion','1.0.0.0',\
    17.                     'OriginalFilename','Debug.exe',\
    18.                     'Company','Semiono'
    19.  
    20.         resdata manifest
    21.                 db '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
    22.                 db '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">'
    23.                 db '<assemblyIdentity '
    24.                         db 'version="1.0.0.0"'
    25.                         db 'processorArchitecture="X86" '
    26.                         db 'name="CompanyName.ProductName.YourApp" '
    27.                         db 'type="win32"'
    28.                 db '/>'
    29.                 db '<description>Debug</description>'
    30.                 db '<dependency>'
    31.                         db '<dependentAssembly>'
    32.                                 db '<assemblyIdentity '
    33.                                         db 'type="win32" '
    34.                                         db 'name="Microsoft.Windows.Common-Controls" '
    35.                                         db 'version="6.0.0.0" '
    36.                                         db 'processorArchitecture="X86" '
    37.                                         db 'publicKeyToken="6595b64144ccf1df" '
    38.                                         db 'language="*"'
    39.                                 db '/>'
    40.                         db '</dependentAssembly>'
    41.                 db '</dependency>'
    42.                 db '</assembly>'
    43.         endres
    44.  
    45.         ;resdata manifest
    46.         ;file 'manifest.xml'
    47.         ;endres
    48.  
    49. section '.idata' import data readable writeable
    50.         library advapi32,'ADVAPI32.DLL',kernel32,'KERNEL32.DLL',user32,'USER32.DLL'
    51.         include '%fasm%\api\advapi32.inc'
    52.         include '%fasm%\api\kernel32.inc'
    53.         include '%fasm%\api\user32.inc'
    54.  
    55. ddValue          dd  ?
    56. lpType           dd  ?
    57. hKey             dd  ?
    58. buffer           rb  256
    59.  
    60. szREGSZ          db  'REG_SZ',0
    61. szTestKey        db  'SYSTEM\Select',0
    62. szValueName      db  'Current',0
    63. szError          db  'KEY Doesn''t exist.',0
    64. form             db  'Type: [%u]',10,'High: %08x',10,0
    65. ValSize          dd  4
    66.  
    67. ERROR_SUCCESS    = 0
    68.  
    69. start:
    70.         stdcall [RegOpenKeyEx],HKEY_LOCAL_MACHINE,szTestKey,0,KEY_READ,hKey
    71.         .if eax = ERROR_SUCCESS
    72.  
    73.         stdcall [RegQueryValueEx],[hKey],szValueName,0,lpType,ddValue,ValSize
    74.         .if eax = ERROR_SUCCESS
    75.  
    76.         stdcall [wsprintf],buffer,form,[lpType],[ddValue]
    77.         stdcall [MessageBox],0,buffer,szTestKey,MB_OK + MB_ICONASTERISK
    78.         .else
    79.         stdcall [MessageBox],0,0,0,0
    80.         .endif
    81.  
    82.         stdcall [RegCloseKey],hKey
    83.         .else
    84.         stdcall [MessageBox],0,szError,0,0
    85.         .endif
    86.  
    87. exit:
    88.         stdcall [ExitProcess],0
     
  15. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Я извиняюс. Post #12
    Я щас в истерике был. Два идентичных сурса кампилю, в одном есть стайл в другом нету 0_O
    Пока не увидел, что там в куче файлов .manifest лежал рядом с бинарем, я забыл про него.
    Выходит никогда и не работало. :\
     
  16. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Всё, готово!
    Код (Text):
    1. section '.rsrc' resource data readable
    2.         directory ..., RT_MANIFEST,_manifest
    3. ...
    4.         resource _manifest,1,LANG_NEUTRAL,manifest
    5. ...
    6.         resdata manifest
    7.         file 'manifest.xml'
    8.         endres
     
  17. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    минимальный xml, верней минимальный manifest
    Код (Text):
    1. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    2. <dependency>
    3. <dependentAssembly>
    4.         <assemblyIdentity
    5.             type="win32"
    6.             name="Microsoft.Windows.Common-Controls"
    7.             version="6.0.0.0"
    8.             processorArchitecture="X86"
    9.             publicKeyToken="6595b64144ccf1df"
    10.             language="*"
    11.         />
    12. </dependentAssembly>
    13. </dependency>
    14. </assembly>
    Однако, наверное ещё можно выкинуть что либо?

    А если юзать внутрикодово, то для изяществ ))
    нужно добавить пробелов для красоты ;-
    типо (ато в ресурсах в одну строку всё вытянется)
    Код (Text):
    1.         db 'publicKeyToken="6595b64144ccf1df" ',13,10,32,32,32,32,32,32,32,32,32,32,32,32
    2.             db 'language="*"',13,10,32,32,32,32,32,32,32,32
    3.             db '/>',13,10