Создание ярлыков на FASM

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 5 ноя 2011.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    sources.codenet.ru/file/3643/CreateLink.zip

    ---
    вот пожалуй самое страшное:
    Код (Text):
    1. struc GUID def
    2. {
    3.    match d1-d2-d3-d4-d5, def
    4.     \{
    5.       .data1 dd 0x\#d1
    6.       .data2 dw 0x\#d2
    7.       .data3 dw 0x\#d3
    8.       .data4 db 0x\#d4 shr 8,0x\#d4 and 0FFh
    9.       .data5 db 0x\#d5 shr 40,0x\#d5 shr 32 and 0FFh,0x\#d5 shr 24 and 0FFh,0x\#d5 shr 16 and 0FFh,0x\#d5 shr 8 and 0FFh,0x\#d5 and 0FFh
    10.     \}
    11. }
    вот это \{ и 0x\#d я вообще не понимаю (((
    я всегда юзал struct ends
     
  2. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1. include '%fasm%/win32wxp.inc'
    2. include '%fasm%/equates/ole32.inc'
    3. include '%fasm%/encoding/win1251.inc'
    4. section '.code' executable
    5. start:
    6.         invoke ExpandEnvironmentStrings,'%SystemRoot%\notepad.exe',root,MAX_PATH
    7.         invoke CoInitializeEx,NULL,COINIT_APARTMENTTHREADED
    8.         invoke CoCreateInstance,CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLinkW,ISLink
    9.         cominvk ISLink,SetPath,root
    10.         cominvk ISLink,QueryInterface,IID_IPersistFile,IPFile
    11.         cominvk IPFile,Save,'notepad.exe.lnk',FALSE
    12. exit:
    13.         invoke ExitProcess,NULL
    14.  
    15. section '.data' readable writeable
    16.  
    17.         root rd MAX_PATH
    18.         ISLink IShellLinkW
    19.         IPFile IPersistFile
    20.         def!CLSID_ShellLink
    21.         def!IID_IShellLinkW
    22.         def!IID_IPersistFile
    Упростил :)
     
  3. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Сколько не читай об COM ничего не будет понятно какие бы слова не придумывали, параллелизм, объектные модели, понять может только тот кто знает как это работает, а это постигается только часами просиживания штанов))
     
  4. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Не пойму откуда юникод взялся тут! Исправил на заголовок - win32ax.inc, заменил IShellLinkW на IShellLinkA, всёравно получается 'notepad.exe.lnk' иероглифами. Я уже весь инклюд, где только можно букву A приписал толку нет.
    Открываю examples\usecom\usecom.asm вижу там хедер - win32a.inc, и практически такой же код, правда там имя файла не пишется.
    И другое дело, если мне переходить в Wide Char, то что исправлять-то, практически ничего из моих прог не работает
    исправлением A2W или тут в двух словах не скажешь?? Но я бы хотел в ansi оставаться желательно.
     
  5. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1. include '%fasm%/win64ax.inc'
    2. include '%fasm%/equates/ole32.inc'
    3. section '.code' executable
    4. start:
    5.         sub rsp,8
    6.  
    7.         invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe\RegModule',RegModule
    8.         invoke SetDllDirectory,RegModule
    9.  
    10. macro reg c {
    11.  
    12.         invoke LoadLibrary,c
    13.         mov rbx,rax
    14.         invoke GetProcAddress,rbx,'DllRegisterServer'
    15.         mov qword [regsvr],rax
    16.         invoke regsvr
    17.         invoke FreeLibrary,rbx
    18.         }
    19.  
    20.         reg 'AudioVis.dll'
    21.         reg 'GPUInterop.dll'
    22.         reg 'MCMultifileWriter.dll'
    23.         reg 'Mx3d_GPUInterop.dll'
    24. ;...
    25.         reg 'UYVY_CC.ax'
    26.         reg 'vmr9conn.ax'
    27.         reg 'WAVDEST.AX'
    28.  
    29.         invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe\Videodeluxe.exe',execute,MAX_PATH
    30.         invoke ExpandEnvironmentStrings,'%ProgramFiles%\Videodeluxe',workroot,MAX_PATH
    31.         invoke SHGetSpecialFolderPath,NULL,shortcut,CSIDL_PROGRAMS,NULL
    32.         invoke lstrcat,shortcut,shortstr
    33.  
    34.         invoke CoInitializeEx,NULL,COINIT_APARTMENTTHREADED
    35.         invoke CoCreateInstance,CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLinkA,ISLink
    36.  
    37.         cominvk ISLink,SetPath,execute
    38.         cominvk ISLink,SetWorkingDirectory,workroot
    39.         cominvk ISLink,SetDescription,'Videodeluxe'
    40.  
    41.         cominvk ISLink,QueryInterface,IID_IPersistFile,IPFile
    42.  
    43.         cominvk IPFile,Save,shortcut,FALSE
    44.  
    45.         cominvk IPFile,Release
    46.         cominvk ISLink,Release
    47. exit:
    48.         invoke ExitProcess,NULL
    49.  
    50. section '.data' readable writeable
    51.  
    52.         RegModule rd MAX_PATH
    53.         regsvr rq MAX_PATH
    54.         shortcut rd MAX_PATH
    55.         shortstr du '\Videodeluxe.lnk',NULL
    56.         execute rd MAX_PATH
    57.         workroot rd MAX_PATH
    58.         def!CLSID_ShellLink
    59.         def!IID_IPersistFile
    60.         def!IID_IShellLinkA
    61.         IPFile IPersistFile
    62.         ISLink IShellLinkA
    63.  
    64. section '.idata' import readable
    65.  
    66.         library kernel32,'KERNEL32.DLL',ole32,'OLE32.DLL',shell32,'SHELL32.DLL'
    67.         import kernel32,\
    68.                ExitProcess,'ExitProcess',ExpandEnvironmentStrings,'ExpandEnvironmentStringsA',\
    69.                FreeLibrary,'FreeLibrary',GetProcAddress,'GetProcAddress',LoadLibrary,'LoadLibraryA',\
    70.                lstrcat,'lstrcatW',SetDllDirectory,'SetDllDirectoryA'
    71.         import ole32,\
    72.                CoCreateInstance,'CoCreateInstance',CoInitializeEx,'CoInitializeEx'
    73.         import shell32,\
    74.                SHGetSpecialFolderPath,'SHGetSpecialFolderPathW'
    Забавно! Если создавать ярлык до макроса reg то всё нормально, ежели как написано сейчас, то ярлык не создастся, что за фиговина? :)

    Кстати, в каком порядке надёжнее сохранять данные du и rd или это не важно, я впервые в юникод влез?