我开发的文件扩展名批量修改工具(win32asm)
2007-03-06 18:54
351 查看
使用win32Asm开发的,下面使源代码:
代码1:
.586 .model flat,stdcall option casemap:none include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib include shell32.inc includelib shell32.lib include ole32.inc includelib ole32.lib ICO_MAIN equ 1000h IDD_DIALOG1 equ 101 IDC_BUTTON1 equ 1000 IDC_BUTTON2 equ 1001 IDC_LIST1 equ 1002 IDC_EDIT1 equ 1003 IDC_BUTTON3 equ 1004 IDC_STATIC equ -1 .data szString1 db "****************************",13,10 db "作者:XXX(小三软件工作室)",13,10 db "QQ:502037318",13,10 db "邮箱:basketwill@sina.com",13,10 db "****************************",0 szString2 db "作者",0 szNoSelect db "你没有选择文件夹",0 prrString db "你没有填入新扩展名或者列表框没有文件,请返回!",0 prrText db "错误",0 szChengGong db "修改成功!",0 szXieg db "/",0 szXinhao db "/*.*",0 szDot db ".",0 .data? szTempPath db 260 dup (?) szPath1 db 260 dup (?) hInstance dd ? hFile dd ? szPath db 260 dup (?) szCaption db 7 dup (?) .code include _BrowseFolder.asm ProcDlgMain proc hWnd,wMsg,wParam,lParam local @szBuffer[128]:byte local @szBuffer1[128]:byte Local @dwCount mov eax, wMsg .if eax == WM_CLOSE invoke EndDialog,hWnd,NULL .elseif eax == WM_INITDIALOG invoke LoadIcon,hInstance,1000h invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.elseif eax == WM_COMMAND mov eax,wParam .if ax == IDCANCEL invoke EndDialog,hWnd,NULL .elseif ax == IDC_BUTTON2 invoke MessageBox,NULL,addr szString1,addr szString2,MB_OK OR MB_ICONINFORMATION .elseif ax == IDC_BUTTON3 invoke _BrowseFolder,NULL,addr szPath push eax invoke lstrcpy,addr szTempPath,addr szPath pop eax .if eax invoke SendDlgItemMessage,hWnd,IDC_LIST1,LB_RESETCONTENT,0,0 invoke lstrcat,addr szPath,addr szXinhao Invoke DlgDirList, hWnd, Addr szPath, IDC_LIST1, 0, 0 .else invoke SendDlgItemMessage,hWnd,IDC_LIST1,LB_RESETCONTENT,0,0 invoke MessageBox,NULL,addr szNoSelect,addr prrText,MB_OK OR MB_ICONWARNING .endif .elseif ax == IDC_BUTTON1 invoke GetDlgItemText,hWnd,IDC_EDIT1,addr szCaption,sizeof szCaption Invoke SendDlgItemMessage, hWnd, IDC_LIST1, LB_GETCOUNT, 0, 0 mov @dwCount, eax .if szCaption == NULL || @dwCount == 0 invoke MessageBox,NULL,addr prrString,addr prrText,MB_OK OR MB_ICONWARNING ret .else dec @dwCount .while @dwCount!=-1 invoke SendDlgItemMessage,hWnd,IDC_LIST1,LB_GETTEXT,@dwCount,addr @szBuffer1 invoke lstrcpy,addr szPath,addr szTempPath invoke lstrcat,addr szPath,addr szXieg invoke lstrcpy,addr szPath1,addr szPath invoke lstrcat,addr szPath,addr @szBuffer1 lea esi,@szBuffer1 mov al,[esi] mov ecx,0 .while al!="." mov al,[esi] inc esi inc ecx .endw invoke lstrcpyn,addr @szBuffer,addr @szBuffer1,ecx invoke lstrcat,addr @szBuffer,addr szDot invoke lstrcat,addr @szBuffer,addr szCaption invoke lstrcat,addr szPath1,addr @szBuffer invoke CreateFile,addr szPath,GENERIC_READ OR GENERIC_WRITE,FILE_SHARE_DELETE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 mov hFile,eax invoke MoveFile,addr szPath,addr szPath1 .if eax jmp @F .else ret .endif @@: invoke CloseHandle,hFile dec @dwCount .endw invoke MessageBox,NULL,addr szChengGong,addr szChengGong,MB_OK invoke lstrcpy,addr szPath,addr szTempPath invoke lstrcat,addr szPath,addr szXinhao Invoke DlgDirList, hWnd, addr szPath, IDC_LIST1, 0, 0 .endif .endif .else mov eax,FALSE ret .endif mov eax,TRUE ret ProcDlgMain endp
start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset ProcDlgMain,NULL invoke ExitProcess,NULL
end start
代码2:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 定义几个基本的 COM 接口 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; IUnknown interface ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> externdef IID_IUnknown:IID LPUNKNOWN typedef DWORD LPPUNKNOWN typedef ptr LPUNKNOWN
IUnknown_QueryInterfaceProto typedef proto :DWORD, :DWORD, :DWORD IUnknown_AddRefProto typedef proto :DWORD IUnknown_ReleaseProto typedef proto :DWORD IUnknown_QueryInterface typedef ptr IUnknown_QueryInterfaceProto IUnknown_AddRef typedef ptr IUnknown_AddRefProto IUnknown_Release typedef ptr IUnknown_ReleaseProto
IUnknown struct DWORD QueryInterface IUnknown_QueryInterface ? AddRef IUnknown_AddRef ? Release IUnknown_Release ? IUnknown ends ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;IMalloc Interface ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> externdef IID_IMalloc:IID LPMALLOC typedef DWORD LPPMALLOC typedef ptr LPMALLOC
IMalloc_AllocProto typedef proto :DWORD, :DWORD IMalloc_ReallocProto typedef proto :DWORD, :DWORD, :DWORD IMalloc_FreeProto typedef proto :DWORD, :DWORD IMalloc_GetSizeProto typedef proto :DWORD, :DWORD IMalloc_DidAllocProto typedef proto :DWORD, :DWORD IMalloc_HeapMinimizeProto typedef proto :DWORD
IMalloc_Alloc typedef ptr IMalloc_AllocProto IMalloc_Realloc typedef ptr IMalloc_ReallocProto IMalloc_Free typedef ptr IMalloc_FreeProto IMalloc_GetSize typedef ptr IMalloc_GetSizeProto IMalloc_DidAlloc typedef ptr IMalloc_DidAllocProto IMalloc_HeapMinimize typedef ptr IMalloc_HeapMinimizeProto
IMalloc struct DWORD QueryInterface IUnknown_QueryInterface ? AddRef IUnknown_AddRef ? Release IUnknown_Release ? Alloc IMalloc_Alloc ? Realloc IMalloc_Realloc ? Free IMalloc_Free ? GetSize IMalloc_GetSize ? DidAlloc IMalloc_DidAlloc ? HeapMinimize IMalloc_HeapMinimize ? IMalloc ends ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .data? _BrowseFolderTmp dd ?
.const _szDirInfo db '请选择目录:',0 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .code ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 弹出选择目录的对话框 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _BrowseFolderCallBack proc hWnd,uMsg,lParam,lpData local @szBuffer[260]:byte
mov eax,uMsg .if eax == BFFM_INITIALIZED invoke SendMessage,hWnd,BFFM_SETSELECTION,TRUE,_BrowseFolderTmp .elseif eax == BFFM_SELCHANGED invoke SHGetPathFromIDList,lParam,addr @szBuffer invoke SendMessage,hWnd,BFFM_SETSTATUSTEXT,0,addr @szBuffer .endif xor eax,eax ret
_BrowseFolderCallBack endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _BrowseFolder proc _hWnd,_lpszBuffer local @stBrowseInfo:BROWSEINFO local @stMalloc local @pidlParent,@dwReturn
pushad
invoke CoInitialize,NULL invoke SHGetMalloc,addr @stMalloc .if eax == E_FAIL mov @dwReturn,FALSE jmp @F .endif
invoke RtlZeroMemory,addr @stBrowseInfo,sizeof @stBrowseInfo ;******************************************************************** ; SHBrowseForFolder 选择一个目录,把不含路径的目录名放入 ; stBrowseInfo.pszDisplayName 中,SHGetPathFromIDList 把 ; stBrowseInfo.pszDisplayName 转换成含全部路径的目录名 ;******************************************************************** push _hWnd pop @stBrowseInfo.hwndOwner push _lpszBuffer pop _BrowseFolderTmp mov @stBrowseInfo.lpfn,offset _BrowseFolderCallBack mov @stBrowseInfo.lpszTitle,offset _szDirInfo mov @stBrowseInfo.ulFlags,BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT invoke SHBrowseForFolder,addr @stBrowseInfo mov @pidlParent,eax .if eax != NULL invoke SHGetPathFromIDList,eax,_lpszBuffer mov eax,TRUE .else mov eax,FALSE .endif mov @dwReturn,eax mov eax,@stMalloc mov eax,[eax] invoke (IMalloc PTR [eax]).Free,@stMalloc,@pidlParent mov eax,@stMalloc mov eax,[eax] invoke (IMalloc PTR [eax]).Release,@stMalloc
@@: invoke CoUninitialize popad mov eax,@dwReturn ret
_BrowseFolder endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
(我的个人主页:地址:http://download.csdn.net/source/233385
相关文章推荐
- 用vc++重写的文件扩展名批量修改工具(改进了一下)
- AS/400开发经验点滴(二)一个批量修改文件属性的工具
- Mac下好用的批量文件扩展名修改工具
- 批量修改文件的工具java代码(原创,仅限交流)
- 基于C#.net开发的hosts静态域名解析文件修改工具
- 可复用的批量文件修改工具
- python实现批量修改文件扩展名
- 一个批量修改文件属性的工具
- 批量修改文件扩展名
- A Better Finder Attributes for Mac (文件图片批量修改工具)免注册码 v6.05中文破解版
- Windows7 批量修改文件属性 不用下载任何工具
- 怎么批量修改文件扩展名
- 批量修改文件扩展名(批处理)
- 批量修改文件扩展名
- 批量修改文件扩展名
- adb shell获取root权限 因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便
- shell脚本:批量修改文件扩展名
- 开发工具:Idea 字符集配置,修改 encodings.xml 文件
- 文件内容批量修改工具
- 本地文件的批量创建,修改工具类