.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
