您的位置:首页 > 其它

我开发的文件扩展名批量修改工具(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: