Опытный
 
Профиль
Группа: Участник
Сообщений: 275
Регистрация: 28.11.2006
Репутация: нет Всего: 5
|
Собственно есть задание | Код | Вывести список файлов и подкаталогов в заданной директории, удалить первый найденный подкаталог вместе со всем содержимым предварительно запросив подтверждение у пользователя
|
Засел не посредственно на удаление, что то не могу сообразить как его сделать , вот то что есть | Код | .386 .model flat,stdcall option casemap:none
;П О Д К Л Ю Ч А Е М Ф А Й Л Ы
include c:\MASM32\INCLUDE\windows.inc include c:\MASM32\INCLUDE\masm32.inc include c:\MASM32\INCLUDE\gdi32.inc include c:\MASM32\INCLUDE\user32.inc include c:\MASM32\INCLUDE\kernel32.inc include c:\MASM32\INCLUDE\Comctl32.inc include c:\MASM32\INCLUDE\comdlg32.inc include c:\MASM32\INCLUDE\shell32.inc include c:\MASM32\include\ole32.inc
;П О Д К Л Ю Ч А Е М Б И Б Л И О Т Е К И
includelib c:\MASM32\LIB\masm32.lib includelib c:\MASM32\LIB\gdi32.lib includelib c:\MASM32\LIB\user32.lib includelib c:\MASM32\LIB\kernel32.lib includelib c:\MASM32\LIB\Comctl32.lib includelib c:\MASM32\LIB\comdlg32.lib includelib c:\MASM32\LIB\shell32.lib includelib c:\MASM32\LIB\ole32.lib ;М А К Р О С Ы
szText MACRO Name, Text:VARARG LOCAL lbl jmp lbl Name db Text,0 lbl: ENDM
return MACRO arg mov eax,arg ret ENDM
;П Р О Т О Т И П Ы
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD ListBox proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD ListBoxProc PROTO :DWORD,:DWORD,:DWORD,:DWORD PushButton PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD EditSl PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD EdProc PROTO :DWORD,:DWORD,:DWORD,:DWORD Static PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD Find PROTO Delete PROTO
;Д А Н Н Ы Е
.data ;данные окна hInstance HINSTANCE ? CommandLine LPSTR ? hIcon dd 0 lpLstBox dd 0 lpfnEdProc dd 0 btnClass db "BUTTON",0 ClassName db "MyClass",0 AppName db "777",0 TheText db "Вы действительно хотите удалить подкатолог?",0 Thetitle db "???",0 Begin db "START",0 OpenBtn db "...",0 SDir db "Выбор каталога",0 Year db "2010",0 Month db "12",0 Day db "30",0 BS db "\",0 Coma db ".",0 Coma2 db "..",0 TypeFiles db "*",0 ;данные для работы flag dd 0 count dd 0 buf db 255 dup(0) buf1 db 255 dup(0) CurDir db 255 dup (0)
what1 db 255 dup(0) what2 db 255 dup(0)
hButton1 dd 0 hButton2 dd 0 hEdit dd 0 hList dd 0 dialogh db "777",0
;О С Н О В Н О Й М О Д У Л Ь
.code start: invoke GetModuleHandle, NULL mov hInstance,eax invoke GetCommandLine mov CommandLine,eax invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG LOCAL hwnd:HWND invoke LoadIcon,hInst,500 ; icon ID mov hIcon, eax mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style, CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW mov wc.lpfnWndProc, OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInstance pop wc.hInstance mov wc.hbrBackground,COLOR_WINDOW mov wc.lpszMenuName,NULL mov wc.lpszClassName,OFFSET ClassName push hIcon pop wc.hIcon push hIcon pop wc.hIconSm invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx, addr wc INVOKE CreateWindowEx, WS_EX_OVERLAPPEDWINDOW,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPED or WS_SYSMENU,50,50,600,430,NULL,NULL,hInst,NULL mov hwnd,eax invoke LoadMenu,hInst,600 ; menu ID invoke SetMenu,hwnd,eax invoke ShowWindow, hwnd,SW_SHOWNORMAL invoke UpdateWindow, hwnd .WHILE TRUE invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp
;О К О Н Н А Я Ф У Н К Ц И Я
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL tmp: DWORD .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg == WM_CREATE szText lbl1,"Файлы: " invoke Static,ADDR lbl1,hWnd,260,125,110,17,0 ;260,120,110,17,0 ;листбокс для содержимого каталога первого файла invoke ListBox,20,150,550,200,hWnd,500 ;20,250,550,100,hWnd,500 mov hList, eax invoke SetWindowLong,hList,GWL_WNDPROC,ListBoxProc mov lpLstBox, eax ;поле выбора invoke GetCurrentDirectory, 255, ADDR CurDir invoke EditSl,ADDR CurDir,20,20,300,25,hWnd,200 mov hEdit, eax invoke SetWindowLong,hEdit,GWL_WNDPROC,EdProc mov lpfnEdProc, eax ;кнопка для работы invoke PushButton,ADDR Begin,hWnd,20,60,350,25,501 mov hButton1, eax ;кнопка для выбора каталога invoke PushButton,ADDR OpenBtn,hWnd,320,20,50,25,1000 mov hButton2, eax .ELSEIF uMsg==WM_COMMAND .IF wParam == 1000 ; "Выбрать каталог" invoke lstrcpyA, ADDR buf, ADDR CurDir invoke BrowseForFolder,hWnd,ADDR buf,ADDR SDir,0 .IF buf[0] != 0 invoke SetCurrentDirectory,ADDR buf invoke lstrcpyA, ADDR CurDir, ADDR buf invoke SetWindowText,hEdit,ADDR CurDir .ENDIF .ELSEIF wParam == 1200 ; "Выход" invoke SendMessage,hWnd,WM_SYSCOMMAND,SC_CLOSE,NULL .ELSEIF wParam == 501 ; "Поехали" Next: invoke SendMessage,hList,LB_GETCOUNT,0,0 cmp eax,0 je AfterClear Clear: invoke SendMessage,hList,LB_DELETESTRING,0,0 jmp Next AfterClear: mov flag,1 invoke Find .IF (flag == 0) invoke MessageBox,hWnd,ADDR TheText,ADDR Thetitle,MB_YESNO .IF (eax==IDYES) invoke Delete .endif .ENDIF .ENDIF .ENDIF invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret WndProc endp
ListBox proc a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,hParent:DWORD,ID:DWORD szText lstBox,"LISTBOX" invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR lstBox,0, WS_VSCROLL or WS_VISIBLE or \ WS_BORDER or WS_CHILD or \ LBS_HASSTRINGS or LBS_NOINTEGRALHEIGHT or \ LBS_DISABLENOSCROLL, a,b,wd,ht,hParent,ID,hInstance,NULL ret ListBox endp ;процедура листбокса ListBoxProc proc hCtl :DWORD, uMsg :DWORD, wParam :DWORD, lParam :DWORD LOCAL IndexItem :DWORD LOCAL Buffer[32] :BYTE .if uMsg == WM_LBUTTONDBLCLK jmp DoIt .elseif uMsg == WM_CHAR .if wParam == 13 jmp DoIt .endif .endif jmp EndDo DoIt: invoke SendMessage,hCtl,LB_GETCURSEL,0,0 mov IndexItem, eax invoke SendMessage,hCtl,LB_GETTEXT,IndexItem,ADDR Buffer EndDo: invoke CallWindowProc,lpLstBox,hCtl,uMsg,wParam,lParam ret ListBoxProc endp ;процедура кнопки PushButton proc lpText:DWORD,hParent:DWORD,a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD invoke CreateWindowEx,0, ADDR btnClass,lpText, WS_CHILD or WS_VISIBLE, a,b,wd,ht,hParent,ID, hInstance,NULL ret PushButton endp ;процедура текстбокса EditSl proc szMsg:DWORD,a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,hParent:DWORD,ID:DWORD szText slEdit,"EDIT" invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR slEdit,szMsg, WS_VISIBLE or WS_CHILDWINDOW or \ ES_AUTOHSCROLL or ES_NOHIDESEL, a,b,wd,ht,hParent,ID,hInstance,NULL ret EditSl endp EdProc proc hCtl :DWORD, uMsg :DWORD, wParam :DWORD, lParam :DWORD invoke CallWindowProc,lpfnEdProc,hCtl,uMsg,wParam,lParam ret EdProc endp ;процедура надписи Static proc lpText:DWORD,hParent:DWORD, a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD
LOCAL hndle:DWORD
szText statClass,"STATIC"
invoke CreateWindowEx,WS_EX_LEFT, ADDR statClass,lpText, WS_CHILD or WS_VISIBLE or SS_LEFT, a,b,wd,ht,hParent,ID, hInstance,NULL ret Static endp
;Р А Б О Т А Е М
Find proc LOCAL hFind: HANDLE LOCAL FileFindData: WIN32_FIND_DATA LOCAL now[256]: BYTE LOCAL next[256]:BYTE invoke FindFirstFile,ADDR TypeFiles ,ADDR FileFindData mov hFind,eax .IF hFind != INVALID_HANDLE_VALUE mov eax,1 .WHILE eax != 0 invoke lstrcmp, ADDR FileFindData.cFileName, ADDR Coma .IF eax !=0 invoke lstrcmp, ADDR FileFindData.cFileName, ADDR Coma2 .IF eax !=0 .IF FileFindData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY .IF flag==1 invoke GetCurrentDirectory,255,ADDR what1 invoke lstrcpyA, ADDR what2, ADDR FileFindData.cFileName mov flag,0 .ENDIF invoke GetCurrentDirectory,255,ADDR next invoke lstrcpyA, ADDR now, ADDR next invoke lstrcatA, ADDR next, ADDR BS invoke lstrcatA, ADDR next, ADDR FileFindData.cFileName invoke SendMessage,hList,LB_ADDSTRING,0,ADDR next invoke SetCurrentDirectory, ADDR next invoke Find invoke SetCurrentDirectory, ADDR now .ENDIF .ENDIF .ENDIF invoke FindNextFile,hFind,ADDR FileFindData .ENDW invoke FindClose,hFind .ENDIF return 0 Find endp
Delete proc
return 0 Delete endp
end start
|
|