设置文件关联

    技术2026-08-13  1

    .386 .model   flat,stdcall option   casemap:none

    include      windows.inc include      kernel32.inc includelib   kernel32.lib include      user32.inc includelib   user32.lib include      advapi32.inc     ;必须包含这个头文件 includelib   advapi32.lib

    .data? hInstance    dd    ?

    .const

    szKeyExt1        db '.test',0      ;第一个子键 szKeyExt1Value   db 'testfile',0   ;第一个子键的默认键值 szKeyExt2        db 'testfile/shell/open/command',0      ;第二个子键,默认键值为关联程序名 szParam          db ' "%1"',0

    .code _SetExt     proc LOCAL    @hKey LOCAL    @szFileName[MAX_PATH]:byte   ;关联到这个可执行程序 invoke   RegCreateKeyEx,HKEY_CLASSES_ROOT,addr szKeyExt1,NULL,NULL,/            REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,addr @hKey,NULL .if   eax == ERROR_SUCCESS    invoke   RegSetValueEx,@hKey,NULL,NULL,REG_SZ,ADDR szKeyExt1Value,sizeof szKeyExt1Value    invoke   RegCloseKey,@hKey .endif invoke   RegCreateKeyEx,HKEY_CLASSES_ROOT,addr szKeyExt2,NULL,NULL,/            REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,addr @hKey,NULL .if   eax == ERROR_SUCCESS    invoke   GetModuleFileName,NULL,addr @szFileName,MAX_PATH    invoke   lstrcat,addr @szFileName,addr szParam    invoke   lstrlen,addr @szFileName    inc      eax   ;REG_EXPAND_SZ型的cbData应为字符串长度加2,但这里加一就可以    invoke   RegSetValueEx,@hKey,NULL,NULL,REG_EXPAND_SZ,addr @szFileName,eax    invoke   RegCloseKey,@hKey .endif ret

    _SetExt endp start:         invoke _SetExt         invoke MessageBox,NULL,NULL,NULL,MB_OK ;双击.TEST文件,如果程序运行的话,则设置成功         invoke ExitProcess,NULL         end start

    最新回复(0)