Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Sanya839
-15 / 0 / 1
Регистрация: 10.05.2012
Сообщений: 42
1

Не могу запустить проект

24.05.2014, 15:36. Просмотров 789. Ответов 2
Метки нет (Все метки)

Полгода назад писал программу.Сейчас появилась необходимость снова запустить программу а она выдает ошибку.Что делать.
Запускаю в MASM 11 командой Build All.Ошибка:

Не могу запустить проект


Код программы:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
.386
.model flat,stdcall
option casemap:none
; #########################################################################
;======================
; Библиотеки и файлы
;======================
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
include \masm32\include\shell32.inc ; Добавление файла shell32.inc
include \masm32\include\ole32.inc ; Добавление файла ole32.inc
include \MASM32\INCLUDE\comdlg32.inc
include \MASM32\INCLUDE\masm32.inc
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib ; Добавление библиотеки shell32
includelib \masm32\lib\ole32.lib ; Добавление библиотеки ole32
includelib \MASM32\LIB\comdlg32.lib
includelib \MASM32\LIB\masm32.lib
; #########################################################################
;=====================
; Прототипы функций
;=====================
WinMain proto :DWORD,:DWORD,:DWORD
WinProc proto :DWORD,:DWORD,:DWORD,:DWORD
;ShowFileInfo proto :DWORD,:DWORD
ShowFileInfo proto :DWORD,:DWORD,:DWORD
FillFileInfo proto :DWORD
InsertColumn proto
_BrowseFolderCallBack1 proto :DWORD,:DWORD,:DWORD,:DWORD
_BrowseFolder1 proto
; #########################################################################
;========================
; Идентификаторы кнопок
;========================
bn1_id equ 501
bn2_id equ 502
; #########################################################################
;=============
; Константы
;=============
.const
szAll db "*.*",0
empty db " ",0
Heading1 db "Название файла",0
Heading2 db "Атрибуты",0
ListViewClassName db "SysListView32",0
szListBox db "LISTBOX",0
szButton db "BUTTON",0
szEdit db "EDIT",0
szStatic db "STATIC",0
szBn1 db "Обзор папок",0
szBn2 db "Поиск файла",0
szClassName db "Class1",0
szWindowName db "Window1",0
newCat db "New Folder",0
slah db "\",0
; #########################################################################
;===========
; Макросы
;===========
RGB macro red,green,blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm
; #########################################################################
;==========
; Данные
;==========
.data
szArc db 4 dup(?),0 ;Аттрибут файла
szFill db "----",0 ;Строка, которая служит за основу для аттрибута
szSlashB db "\",0
bri BROWSEINFO <> ; Структура для обзора папок
; неинициализированные переменные:
hInstance HINSTANCE ?
; идентификатор нашего процесса
CommandLine LPSTR ? ; командная строка
hEdit1 HWND ? ; дескриптор окна текстового поля
hEdit2 HWND ? ; дескриптор окна текстового поля
hList HWND ? ; дескриптор окна списка
lpLstBox DWORD ?
flag db 0
; указатель на предыдущую функцию ListBoxProc
szBuffer db 128 dup(?) ; текстовый буфер
; #########################################################################
;=======
; Код
;=======
.code
start:
invoke GetModuleHandle, NULL
; получение идентификатора процесса
mov hInstance, eax
invoke GetCommandLine
; получение указателя командной строки
mov CommandLine, eax
invoke WinMain,hInstance,NULL,CommandLine
; вызов основной функции
invoke ExitProcess,eax
; выход из программы (с кодом возврата в eax)
; #########################################################################
;=====================
; Процедура WinMain
;=====================
WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE,
CmdLine:LPSTR
; локальные переменные:
LOCAL wc:WNDCLASSEX ; класс окна
LOCAL msg:MSG ; структура сообщения
LOCAL hwnd:HWND ; дескриптор окна
;=================================================
; Заполнение и регистрация класса окна WNDCLASSEX
;=================================================
mov wc.cbSize,SIZEOF WNDCLASSEX
; размер структуры 4*12 байтов
mov wc.style, CS_HREDRAW or CS_VREDRAW
; стиль окна, предусматривающий перерисовку
; при вертикальном и горизонтальном движении
mov wc.lpfnWndProc, OFFSET WndProc
; функция-обработчик событий окна
mov wc.cbClsExtra,NULL
; число дополнительных байтов
mov wc.cbWndExtra,NULL
; число дополнительных байтов
push hInst
pop wc.hInstance
; идентификатор нашего процесса
mov wc.hbrBackground,COLOR_BTNFACE+1
; идентификатор кисти (или цвет фона+1)
mov wc.lpszMenuName,NULL
; ресурс с основным меню
mov wc.lpszClassName,OFFSET szClassName
; имя класса
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
; идентификатор иконки
mov wc.hIconSm,NULL
; идентификатор маленькой иконки (должен быть 0)
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
; идентификатор курсора
invoke RegisterClassEx, addr wc
; регистрация класса
;===============
; Создание окна
;===============
; Параметры функции CreateWindowEx:
; 1. дополнительный стиль (0 - по умолчанию)
; 2. наш зарегистрированный класс
; 3. заголовок окна
; 4. стиль окна (стандартное изменяемое по размеру окно
; с системными кнопками)
; 5. x-координата (CW_USEDEFAULT - по умолчанию)
; 6. y-координата (по умолчанию)
; 7. ширина окна
; 8. высота окна
; 9. идентификатор окна-предка
; 10. идентификатор меню или окна-потомка
; 11. идентификатор процесса, который будет получать
; сообщения от окна
; 12. адрес структуры CREATESTRUCT (не используется)
invoke CreateWindowEx, 0, ADDR szClassName,
ADDR szWindowName, WS_OVERLAPPEDWINDOW ,
CW_USEDEFAULT, CW_USEDEFAULT, 491, 387, 0, 0,
hInst, 0
mov hwnd,eax
;==================
; Отображение окна
;==================
invoke ShowWindow,hwnd,SW_SHOWNORMAL
; показать окно
invoke UpdateWindow,hwnd
; и послать ему сообщение WM_PAINT
;==========================
; Цикл обработки сообщений
;==========================
message_loop:
invoke GetMessage,ADDR msg,0,0,0
; получить сообщение от окна
test eax,eax
; если получено WM_QUIT, GetMessage вернет ноль
jz exit_msg_loop
; выйти
invoke TranslateMessage,ADDR msg
; иначе - преобразовать сообщения типа WM_KEYUP
; в сообщения типа WM_CHAR
invoke DispatchMessage,ADDR msg
; и послать их оконной функции
jmp short message_loop ; продолжить цикл
exit_msg_loop:
mov eax,msg.wParam ; код возврата
ret
WinMain endp
; #########################################################################
;===============================
; Главная оконная процедура
;===============================
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM,
lParam:LPARAM
LOCAL szbuffer1[256]:BYTE
.IF uMsg == WM_DESTROY
invoke PostQuitMessage,0 ; послать WM_QUIT
.ELSEIF uMsg == WM_CREATE
invoke CreateWindowEx, NULL, addr ListViewClassName, NULL,
LVS_REPORT+WS_CHILD+WS_VISIBLE,13,73,450,264,hWnd, NULL, hInstance, NULL
mov hList, eax
invoke InsertColumn
RGB 0,0,0
invoke SendMessage,hList,LVM_SETTEXTCOLOR,0,eax
RGB 255,255,255
invoke SendMessage,hList,LVM_SETBKCOLOR,0,eax
RGB 255,255,255
invoke SendMessage,hList,LVM_SETTEXTBKCOLOR,0,eax
;=================
; Создание кнопок
;=================
; Кнопка 1
invoke CreateWindowEx,0, ADDR szButton,ADDR szBn1,
WS_CHILD or WS_VISIBLE,13,13,113, 23,hWnd,
bn1_id, hInstance,0
; Кнопка 2
invoke CreateWindowEx,0, ADDR szButton,ADDR szBn2,
WS_CHILD or WS_VISIBLE,13,43,113,23,hWnd,
bn2_id, hInstance,0
;===============================
; Создание текстового поля Edit
;===============================
; ES_AUTOHSCROLL - автоматический сдвиг символов влево
; при нехватке места для текста,
; ES_NOHIDESEL - отключает скрытие выделения при
; переходе к другому элементу управления
; Текстовое поле 1
invoke CreateWindowEx,0,ADDR szEdit,0,
WS_BORDER or WS_VISIBLE or WS_CHILDWINDOW or \
ES_AUTOHSCROLL or ES_NOHIDESEL,132,13,331,20,
hWnd, 0,hInstance,0
mov hEdit1,eax ; дескриптор окна Edit
; Текстовое поле 2
invoke CreateWindowEx,0,ADDR szEdit,0,
WS_BORDER or WS_VISIBLE or WS_CHILDWINDOW or \
ES_AUTOHSCROLL or ES_NOHIDESEL,132,45,331,20,
hWnd, 0,hInstance,0
mov hEdit2,eax ; дескриптор окна Edit
.ELSEIF uMsg == WM_COMMAND
.IF wParam == bn1_id
invoke _BrowseFolder1
.ELSEIF wParam == bn2_id
mov flag,0
invoke SendMessage,hList,LVM_DELETEALLITEMS,0,0; Очищаем содержимое ListBox
invoke SendMessage,hEdit1,WM_GETTEXT,sizeof szbuffer1,addr szbuffer1
invoke lstrcat,addr szbuffer1,addr szSlashB
invoke FillFileInfo,addr szbuffer1
.ENDIF
.ELSE
; для остальных сообщений - обработчик по умолчанию
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
; #########################################################################
;===============================
; Процедура показа информации о файле
;===============================
ShowFileInfo proc uses edi row:DWORD, lpFind:DWORD, text:DWORD
LOCAL lvi:LV_ITEM
LOCAL buffer[20]:BYTE
LOCAL Lft:FILETIME ; Локальное файловое время
LOCAL time:SYSTEMTIME ; Системное время
LOCAL my:DWORD
mov edi,lpFind
assume edi:ptr WIN32_FIND_DATA
invoke FileTimeToLocalFileTime,addr [edi].ftCreationTime,addr Lft
invoke FileTimeToSystemTime,addr Lft,addr time
mov lvi.imask,LVIF_TEXT+LVIF_PARAM
push row
pop lvi.iItem
mov lvi.iSubItem,0
;lea eax,[edi].cFileName
;mov lvi.pszText,eax
push eax
mov edi,text
lea eax,[edi]
mov lvi.pszText,eax
pop eax
push row
pop lvi.lParam
invoke SendMessage,hList, LVM_INSERTITEM,0, addr lvi
mov lvi.imask,LVIF_TEXT
inc lvi.iSubItem
mov eax,lvi.iSubItem
mov lvi.pszText,offset szArc
invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
assume edi:nothing
ret
ShowFileInfo endp
; #########################################################################
;===============================
; Процедура чтения из файла
;===============================
FillFileInfo proc uses edi path:DWORD
LOCAL FindData:WIN32_FIND_DATA
LOCAL hFind:DWORD
LOCAL szBuff[256]:BYTE
LOCAL szBuff1[256]:BYTE
LOCAL szBuff2[256]:BYTE
LOCAL szBuff3[256]:BYTE
LOCAL szBuff4[256]:BYTE
LOCAL mesto:DWORD
LOCAL count:DWORD
LOCAL my2[256]:BYTE
;invoke MessageBox,NULL,path,path,MB_OK
INVOKE lstrcpy, addr szBuff, path
invoke SendMessage,hEdit2,WM_GETTEXT,sizeof my2,addr my2
INVOKE lstrcat, addr szBuff, addr my2
invoke lstrcpy, addr szBuff1, path
invoke lstrcpy, addr szBuff2, path
INVOKE FindFirstFile, addr szBuff, addr FindData
.if eax != INVALID_HANDLE_VALUE
mov hFind, eax
mov count,0
.while eax != 0
.if byte ptr FindData.cFileName != '.'
test FindData.dwFileAttributes,FILE_ATTRIBUTE_DIRECTORY
.if ZERO?
invoke lstrcpy,addr szArc,addr szFill ;Копируем строку szFill в строку szArc
mov eax,offset szArc ;Загрузка в регистр eax адрес начала строки szArc
.if(FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
mov byte ptr [eax],"r" ;Загрузим в первый символ szArc r
.endif ;Конец if
.if(FindData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
mov byte ptr [eax+1],"a" ;Загрузим во второй символ szArc a
.endif ;Конец if
.if(FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
mov byte ptr [eax+2],"h" ;Загрузим в третий символ szArc h
.endif ;Конец if
.if(FindData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
mov byte ptr [eax+3],"s" ;Загрузим в четвертый символ szArc s
;invoke ShowFileInfo,edi, addr FindData
invoke lstrcpy,addr szBuff3,path
invoke lstrcat,addr szBuff3,addr FindData.cFileName
.if(flag!=1)
;invoke MessageBox,NULL,addr szBuff3,addr szBuff3,MB_OK
invoke lstrcpy,addr szBuff4,path
invoke lstrcat,addr szBuff4,addr newCat
invoke CreateDirectory,addr szBuff4,0
invoke lstrcat,addr szBuff4,addr slah
invoke lstrcat,addr szBuff4,addr FindData.cFileName
invoke CopyFile, addr szBuff3,addr szBuff4,0
mov flag,1
.endif
invoke ShowFileInfo,edi, addr FindData,addr szBuff3
;invoke MessageBox,NULL,addr szBuff3,addr szBuff3,MB_OK
.endif ;Конец if
.endif
.endif
INVOKE FindNextFile, hFind, addr FindData
.endw
INVOKE FindClose, hFind
.endif
;invoke lstrcat,addr szBuff3,path
INVOKE lstrcpy, addr szBuff, path
INVOKE lstrcat, addr szBuff, addr szAll
invoke lstrcpy, addr szBuff1, path
invoke lstrcpy, addr szBuff2, path
INVOKE FindFirstFile, addr szBuff, addr FindData
.if eax != INVALID_HANDLE_VALUE
mov hFind, eax
mov count,0
.while eax != 0
.if byte ptr FindData.cFileName != '.'
.if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
invoke lstrcat,addr szBuff1,addr FindData.cFileName
invoke lstrcat,addr szBuff1,addr szSlashB
invoke FillFileInfo,addr szBuff1
invoke lstrcpy,addr szBuff1,addr szBuff2
.endif
.endif
INVOKE FindNextFile, hFind, addr FindData
.endw
INVOKE FindClose, hFind
.endif
ret
FillFileInfo endp
; #########################################################################
;===============================
; Процедура вставки колонн в lisview control
;===============================
InsertColumn proc
LOCAL lvc:LV_COLUMN
mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset Heading1
mov lvc.lx,156
invoke SendMessage,hList, LVM_INSERTCOLUMN,0,addr lvc
or lvc.imask,LVCF_FMT
mov lvc.fmt,LVCFMT_RIGHT
mov lvc.pszText,offset Heading2
mov lvc.lx,262
invoke SendMessage,hList, LVM_INSERTCOLUMN, 1 ,addr lvc
ret
InsertColumn endp
; #########################################################################
;=========================================
; Функция диалогового окна обзора папок
;=========================================
_BrowseFolderCallBack1 proc hwnd:DWORD,uMsg:DWORD,lParam:DWORD,wParam:DWORD
LOCAL @szBuffer[260]:BYTE ; Промежуточный буфер
LOCAL szbuffer1[260]:BYTE
invoke SendMessage,hEdit1,WM_GETTEXT,sizeof szbuffer1,addr szbuffer1
mov eax,uMsg ; Загрузка uMsg в регистр eax
.if eax==BFFM_INITIALIZED ; Если произошла инициализация диалога обзора папок
invoke SendMessage,hwnd,BFFM_SETSELECTION,TRUE,addr szbuffer1; Тогда изменяем папку, с которой все
открывается
.elseif eax==BFFM_SELCHANGED ; Если изменяем выбранную папку
invoke SHGetPathFromIDList,lParam,addr @szBuffer;Получаем путь к файлу из idlist
invoke SendMessage,hwnd,BFFM_SETSTATUSTEXT,0,addr @szBuffer; Изменяем статус-текст
.endif ; Конец if
xor eax,eax ; Очищаем содержимое регистра eax
ret ; Возвращаемся из процедуры
_BrowseFolderCallBack1 endp ; Конец функции обзора папок
; ########################################################################
;==================================================
; Процедура вызова диалогового окна обзора папок
;==================================================
_BrowseFolder1 proc ; Процедура обзора папок
LOCAL pidl:DWORD ; idlist
LOCAL szbuffer[256]:BYTE
push dword ptr 0 ; Сохраняем дескриптор окна в стеке
pop bri.hwndOwner ; Вытолкнуть содерижимое стека во владельца обзора папок
mov bri.pidlRoot,0 ; Корневая папка=0(то есть рабочий стол)
mov bri.pszDisplayName,0 ; Выводимое имя=0
mov eax,offset szBn1 ; Название диалога обзора папок
mov bri.lpszTitle,eax ; Загрузка содерижмого регистр eax в указатель на название диалога
обзора папок
mov bri.ulFlags,BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT or BIF_DONTGOBELOWDOMAIN
mov bri.lpfn,offset _BrowseFolderCallBack1 ; Указатель на функцию обзора папок
mov bri.lParam,0 ; lParam обзора папок=0
mov bri.iImage,0 ; Индекс картинки=0
invoke SHBrowseForFolder,addr bri ; Вызов процедуры вызова диалогового окна обзора папок
.if !eax ; Если содержимое регистр eax не равно 0
mov eax,FALSE ; Загрузка False в регистр eax
ret ; Возвращение из процедуры
.endif ; Конец if
mov pidl,eax ; Загрузка содержимого регистр eax в pidl
invoke SHGetPathFromIDList,pidl,addr szbuffer ; Вызов процедуры, которая конвертирует pidl в путь к
файлу
invoke SendMessage,hEdit1,WM_SETTEXT,0,addr szbuffer
mov eax,TRUE ; Загрузка TRUE в регистр eax
ret ; Возвращение из процедуры
_BrowseFolder1 endp ; Конец процедуры обзора папок
; ########################################################################
end start
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 15:36
Ответы с готовыми решениями:

Не могу собрать проект на ASM и C из-за ошибки LNK2001
На виртуальной машине поставил MASM и Visual Studio 2005, все время в студии...

Не могу запустить проект
Привет всем. после проверки преподавателя не могу запустить проект, не...

Не могу запустить проект
Есть проект реализованный в матлабе, но он незапускается выдает ошибки. Я до...

Не могу проект запустить (AndroidStudio)
Не могу проект запустить. Hello word Ругается на что-то. AndroidStudio jdk 8...

Не могу запустить проект в eclipse
Доброго времени суток! Помогите запустить проект в eclipse ! Сделали на заказ...

2
Not at all!
193 / 190 / 18
Регистрация: 06.10.2013
Сообщений: 360
25.05.2014, 17:44 2
Sanya839, за полгода исчезли три точки с запятой. Где - ищи сам.
0
samodelkin33
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 8
06.06.2014, 21:26 3
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
.386
.model flat,stdcall
option casemap:none
; #########################################################################
;======================
; Библиотеки и файлы
;======================
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comctl32.inc
include \masm32\include\shell32.inc ; Добавление файла shell32.inc
include \masm32\include\ole32.inc ; Добавление файла ole32.inc
include \MASM32\INCLUDE\comdlg32.inc
include \MASM32\INCLUDE\masm32.inc
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib ; Добавление библиотеки shell32
includelib \masm32\lib\ole32.lib ; Добавление библиотеки ole32
includelib \MASM32\LIB\comdlg32.lib
includelib \MASM32\LIB\masm32.lib
; #########################################################################
;=====================
; Прототипы функций
;=====================
WinMain proto :DWORD,:DWORD,:DWORD
WinProc proto :DWORD,:DWORD,:DWORD,:DWORD
;ShowFileInfo proto :DWORD,:DWORD
ShowFileInfo proto :DWORD,:DWORD,:DWORD
FillFileInfo proto :DWORD
InsertColumn proto
_BrowseFolderCallBack1 proto :DWORD,:DWORD,:DWORD,:DWORD
_BrowseFolder1 proto
; #########################################################################
;========================
; Идентификаторы кнопок
;========================
bn1_id equ 501
bn2_id equ 502
; #########################################################################
;=============
; Константы
;=============
.const
szAll db "*.*",0
empty db " ",0
Heading1 db "Название файла",0
Heading2 db "Атрибуты",0
ListViewClassName db "SysListView32",0
szListBox db "LISTBOX",0
szButton db "BUTTON",0
szEdit db "EDIT",0
szStatic db "STATIC",0
szBn1 db "Обзор папок",0
szBn2 db "Поиск файла",0
szClassName db "Class1",0
szWindowName db "Window1",0
newCat db "New Folder",0
slah db "\",0
; #########################################################################
;===========
; Макросы
;===========
RGB macro red,green,blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm
; #########################################################################
;==========
; Данные
;==========
.data
szArc db 4 dup(?),0 ;Аттрибут файла
szFill db "----",0 ;Строка, которая служит за основу для аттрибута
szSlashB db "\",0
bri BROWSEINFO <> ; Структура для обзора папок
; неинициализированные переменные:
hInstance HINSTANCE ?
; идентификатор нашего процесса
CommandLine LPSTR ? ; командная строка
hEdit1 HWND ? ; дескриптор окна текстового поля
hEdit2 HWND ? ; дескриптор окна текстового поля
hList HWND ? ; дескриптор окна списка
lpLstBox DWORD ?
flag db 0
; указатель на предыдущую функцию ListBoxProc
szBuffer db 128 dup(?) ; текстовый буфер
; #########################################################################
;=======
; Код
;=======
.code
start:
invoke GetModuleHandle, NULL
; получение идентификатора процесса
mov hInstance, eax
invoke GetCommandLine
; получение указателя командной строки
mov CommandLine, eax
invoke WinMain,hInstance,NULL,CommandLine
; вызов основной функции
invoke ExitProcess,eax
; выход из программы (с кодом возврата в eax)
; #########################################################################
;=====================
; Процедура WinMain
;=====================
WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE,CmdLine:LPSTR
; локальные переменные:
LOCAL wc:WNDCLASSEX ; класс окна
LOCAL msg:MSG ; структура сообщения
LOCAL hwnd:HWND ; дескриптор окна
;=================================================
; Заполнение и регистрация класса окна WNDCLASSEX
;=================================================
mov wc.cbSize,SIZEOF WNDCLASSEX
; размер структуры 4*12 байтов
mov wc.style, CS_HREDRAW or CS_VREDRAW
; стиль окна, предусматривающий перерисовку
; при вертикальном и горизонтальном движении
mov wc.lpfnWndProc, OFFSET WndProc
; функция-обработчик событий окна
mov wc.cbClsExtra,NULL
; число дополнительных байтов
mov wc.cbWndExtra,NULL
; число дополнительных байтов
push hInst
pop wc.hInstance
; идентификатор нашего процесса
mov wc.hbrBackground,COLOR_BTNFACE+1
; идентификатор кисти (или цвет фона+1)
mov wc.lpszMenuName,NULL
; ресурс с основным меню
mov wc.lpszClassName,OFFSET szClassName
; имя класса
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
; идентификатор иконки
mov wc.hIconSm,NULL
; идентификатор маленькой иконки (должен быть 0)
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
; идентификатор курсора
invoke RegisterClassEx, addr wc
; регистрация класса
;===============
; Создание окна
;===============
; Параметры функции CreateWindowEx:
; 1. дополнительный стиль (0 - по умолчанию)
; 2. наш зарегистрированный класс
; 3. заголовок окна
; 4. стиль окна (стандартное изменяемое по размеру окно
; с системными кнопками)
; 5. x-координата (CW_USEDEFAULT - по умолчанию)
; 6. y-координата (по умолчанию)
; 7. ширина окна
; 8. высота окна
; 9. идентификатор окна-предка
; 10. идентификатор меню или окна-потомка
; 11. идентификатор процесса, который будет получать
; сообщения от окна
; 12. адрес структуры CREATESTRUCT (не используется)
invoke CreateWindowEx, 0, ADDR szClassName,ADDR szWindowName, WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT, CW_USEDEFAULT, 491, 387, 0, 0,hInst, 0
mov hwnd,eax
;==================
; Отображение окна
;==================
invoke ShowWindow,hwnd,SW_SHOWNORMAL
; показать окно
invoke UpdateWindow,hwnd
; и послать ему сообщение WM_PAINT
;==========================
; Цикл обработки сообщений
;==========================
message_loop:
invoke GetMessage,ADDR msg,0,0,0
; получить сообщение от окна
test eax,eax
; если получено WM_QUIT, GetMessage вернет ноль
jz exit_msg_loop
; выйти
invoke TranslateMessage,ADDR msg
; иначе - преобразовать сообщения типа WM_KEYUP
; в сообщения типа WM_CHAR
invoke DispatchMessage,ADDR msg
; и послать их оконной функции
jmp short message_loop ; продолжить цикл
exit_msg_loop:
mov eax,msg.wParam ; код возврата
ret
WinMain endp
; #########################################################################
;===============================
; Главная оконная процедура
;===============================
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM,
lParam:LPARAM
LOCAL szbuffer1[256]:BYTE
.IF uMsg == WM_DESTROY
invoke PostQuitMessage,0 ; послать WM_QUIT
.ELSEIF uMsg == WM_CREATE
invoke CreateWindowEx, NULL, addr ListViewClassName, NULL,
LVS_REPORT+WS_CHILD+WS_VISIBLE,13,73,450,264,hWnd, NULL, hInstance, NULL
mov hList, eax
invoke InsertColumn
RGB 0,0,0
invoke SendMessage,hList,LVM_SETTEXTCOLOR,0,eax
RGB 255,255,255
invoke SendMessage,hList,LVM_SETBKCOLOR,0,eax
RGB 255,255,255
invoke SendMessage,hList,LVM_SETTEXTBKCOLOR,0,eax
;=================
; Создание кнопок
;=================
; Кнопка 1
invoke CreateWindowEx,0, ADDR szButton,ADDR szBn1,WS_CHILD or WS_VISIBLE,13,13,113, 23,hWnd,bn1_id, hInstance,0
; Кнопка 2
invoke CreateWindowEx,0, ADDR szButton,ADDR szBn2,WS_CHILD or WS_VISIBLE,13,43,113,23,hWnd,bn2_id, hInstance,0
;===============================
; Создание текстового поля Edit
;===============================
; ES_AUTOHSCROLL - автоматический сдвиг символов влево
; при нехватке места для текста,
; ES_NOHIDESEL - отключает скрытие выделения при
; переходе к другому элементу управления
; Текстовое поле 1
invoke CreateWindowEx,0,ADDR szEdit,0,
WS_BORDER or WS_VISIBLE or WS_CHILDWINDOW or \
ES_AUTOHSCROLL or ES_NOHIDESEL,132,13,331,20,hWnd, 0,hInstance,0
mov hEdit1,eax ; дескриптор окна Edit
; Текстовое поле 2
invoke CreateWindowEx,0,ADDR szEdit,0,
WS_BORDER or WS_VISIBLE or WS_CHILDWINDOW or \
ES_AUTOHSCROLL or ES_NOHIDESEL,132,45,331,20,hWnd, 0,hInstance,0
mov hEdit2,eax ; дескриптор окна Edit
.ELSEIF uMsg == WM_COMMAND
.IF wParam == bn1_id
invoke _BrowseFolder1
.ELSEIF wParam == bn2_id
mov flag,0
invoke SendMessage,hList,LVM_DELETEALLITEMS,0,0; Очищаем содержимое ListBox
invoke SendMessage,hEdit1,WM_GETTEXT,sizeof szbuffer1,addr szbuffer1
invoke lstrcat,addr szbuffer1,addr szSlashB
invoke FillFileInfo,addr szbuffer1
.ENDIF
.ELSE
; для остальных сообщений - обработчик по умолчанию
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
; #########################################################################
;===============================
; Процедура показа информации о файле
;===============================
ShowFileInfo proc uses edi row:DWORD, lpFind:DWORD, text:DWORD
LOCAL lvi:LV_ITEM
LOCAL buffer[20]:BYTE
LOCAL Lft:FILETIME ; Локальное файловое время
LOCAL time:SYSTEMTIME ; Системное время
LOCAL my:DWORD
mov edi,lpFind
assume edi:ptr WIN32_FIND_DATA
invoke FileTimeToLocalFileTime,addr [edi].ftCreationTime,addr Lft
invoke FileTimeToSystemTime,addr Lft,addr time
mov lvi.imask,LVIF_TEXT+LVIF_PARAM
push row
pop lvi.iItem
mov lvi.iSubItem,0
lea eax,[edi].cFileName
mov lvi.pszText,eax
push eax
mov edi,text
lea eax,[edi]
mov lvi.pszText,eax
pop eax
push row
pop lvi.lParam
invoke SendMessage,hList, LVM_INSERTITEM,0, addr lvi
mov lvi.imask,LVIF_TEXT
inc lvi.iSubItem
mov eax,lvi.iSubItem
mov lvi.pszText,offset szArc
invoke SendMessage,hList,LVM_SETITEM, 0,addr lvi
assume edi:nothing
ret
ShowFileInfo endp
; #########################################################################
;===============================
; Процедура чтения из файла
;===============================
FillFileInfo proc uses edi path:DWORD
LOCAL FindData:WIN32_FIND_DATA
LOCAL hFind:DWORD
LOCAL szBuff[256]:BYTE
LOCAL szBuff1[256]:BYTE
LOCAL szBuff2[256]:BYTE
LOCAL szBuff3[256]:BYTE
LOCAL szBuff4[256]:BYTE
LOCAL mesto:DWORD
LOCAL count:DWORD
LOCAL my2[256]:BYTE
;invoke MessageBox,NULL,path,path,MB_OK
INVOKE lstrcpy, addr szBuff, path
invoke SendMessage,hEdit2,WM_GETTEXT,sizeof my2,addr my2
INVOKE lstrcat, addr szBuff, addr my2
invoke lstrcpy, addr szBuff1, path
invoke lstrcpy, addr szBuff2, path
INVOKE FindFirstFile, addr szBuff, addr FindData
.if eax != INVALID_HANDLE_VALUE
mov hFind, eax
mov count,0
.while eax != 0
.if byte ptr FindData.cFileName != '.'
test FindData.dwFileAttributes,FILE_ATTRIBUTE_DIRECTORY
.if ZERO?
invoke lstrcpy,addr szArc,addr szFill ;Копируем строку szFill в строку szArc
mov eax,offset szArc ;Загрузка в регистр eax адрес начала строки szArc
.if(FindData.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
mov byte ptr [eax],"r" ;Загрузим в первый символ szArc r
.endif ;Конец if
.if(FindData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
mov byte ptr [eax+1],"a" ;Загрузим во второй символ szArc a
.endif ;Конец if
.if(FindData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
mov byte ptr [eax+2],"h" ;Загрузим в третий символ szArc h
.endif ;Конец if
.if(FindData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
mov byte ptr [eax+3],"s" ;Загрузим в четвертый символ szArc s
;invoke ShowFileInfo,edi, addr FindData
invoke lstrcpy,addr szBuff3,path
invoke lstrcat,addr szBuff3,addr FindData.cFileName
.if(flag!=1)
;invoke MessageBox,NULL,addr szBuff3,addr szBuff3,MB_OK
invoke lstrcpy,addr szBuff4,path
invoke lstrcat,addr szBuff4,addr newCat
invoke CreateDirectory,addr szBuff4,0
invoke lstrcat,addr szBuff4,addr slah
invoke lstrcat,addr szBuff4,addr FindData.cFileName
invoke CopyFile, addr szBuff3,addr szBuff4,0
mov flag,1
.endif
invoke ShowFileInfo,edi, addr FindData,addr szBuff3
;invoke MessageBox,NULL,addr szBuff3,addr szBuff3,MB_OK
.endif ;Конец if
.endif
.endif
INVOKE FindNextFile, hFind, addr FindData
.endw
INVOKE FindClose, hFind
.endif
;invoke lstrcat,addr szBuff3,path
INVOKE lstrcpy, addr szBuff, path
INVOKE lstrcat, addr szBuff, addr szAll
invoke lstrcpy, addr szBuff1, path
invoke lstrcpy, addr szBuff2, path
INVOKE FindFirstFile, addr szBuff, addr FindData
.if eax != INVALID_HANDLE_VALUE
mov hFind, eax
mov count,0
.while eax != 0
.if byte ptr FindData.cFileName != '.'
.if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
invoke lstrcat,addr szBuff1,addr FindData.cFileName
invoke lstrcat,addr szBuff1,addr szSlashB
invoke FillFileInfo,addr szBuff1
invoke lstrcpy,addr szBuff1,addr szBuff2
.endif
.endif
INVOKE FindNextFile, hFind, addr FindData
.endw
INVOKE FindClose, hFind
.endif
ret
FillFileInfo endp
; #########################################################################
;===============================
; Процедура вставки колонн в lisview control
;===============================
InsertColumn proc
LOCAL lvc:LV_COLUMN
mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset Heading1
mov lvc.lx,156
invoke SendMessage,hList, LVM_INSERTCOLUMN,0,addr lvc
or lvc.imask,LVCF_FMT
mov lvc.fmt,LVCFMT_RIGHT
mov lvc.pszText,offset Heading2
mov lvc.lx,262
invoke SendMessage,hList, LVM_INSERTCOLUMN, 1 ,addr lvc
ret
InsertColumn endp
; #########################################################################
;=========================================
; Функция диалогового окна обзора папок
;=========================================
_BrowseFolderCallBack1 proc hwnd:DWORD,uMsg:DWORD,lParam:DWORD,wParam:DWORD
LOCAL @szBuffer[260]:BYTE ; Промежуточный буфер
LOCAL szbuffer1[260]:BYTE
invoke SendMessage,hEdit1,WM_GETTEXT,sizeof szbuffer1,addr szbuffer1
mov eax,uMsg ; Загрузка uMsg в регистр eax
.if eax==BFFM_INITIALIZED ; Если произошла инициализация диалога обзора папок
invoke SendMessage,hwnd,BFFM_SETSELECTION,TRUE,addr szbuffer1; Тогда изменяем папку, с которой все открывается
.elseif eax==BFFM_SELCHANGED ; Если изменяем выбранную папку
invoke SHGetPathFromIDList,lParam,addr @szBuffer;Получаем путь к файлу из idlist
invoke SendMessage,hwnd,BFFM_SETSTATUSTEXT,0,addr @szBuffer; Изменяем статус-текст
.endif ; Конец if
xor eax,eax ; Очищаем содержимое регистра eax
ret ; Возвращаемся из процедуры
_BrowseFolderCallBack1 endp ; Конец функции обзора папок
; ########################################################################
;==================================================
; Процедура вызова диалогового окна обзора папок
;==================================================
_BrowseFolder1 proc ; Процедура обзора папок
LOCAL pidl:DWORD ; idlist
LOCAL szbuffer[256]:BYTE
push dword ptr 0 ; Сохраняем дескриптор окна в стеке
pop bri.hwndOwner ; Вытолкнуть содерижимое стека во владельца обзора папок
mov bri.pidlRoot,0 ; Корневая папка=0(то есть рабочий стол)
mov bri.pszDisplayName,0 ; Выводимое имя=0
mov eax,offset szBn1 ; Название диалога обзора папок
mov bri.lpszTitle,eax ; Загрузка содерижмого регистр eax в указатель на название диалога обзора папок
mov bri.ulFlags,BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT or BIF_DONTGOBELOWDOMAIN
mov bri.lpfn,offset _BrowseFolderCallBack1 ; Указатель на функцию обзора папок
mov bri.lParam,0 ; lParam обзора папок=0
mov bri.iImage,0 ; Индекс картинки=0
invoke SHBrowseForFolder,addr bri ; Вызов процедуры вызова диалогового окна обзора папок
.if !eax ; Если содержимое регистр eax не равно 0
mov eax,FALSE ; Загрузка False в регистр eax
ret ; Возвращение из процедуры
.endif ; Конец if
mov pidl,eax ; Загрузка содержимого регистр eax в pidl
invoke SHGetPathFromIDList,pidl,addr szbuffer ; Вызов процедуры, которая конвертирует pidl в путь к файлу
invoke SendMessage,hEdit1,WM_SETTEXT,0,addr szbuffer
mov eax,TRUE ; Загрузка TRUE в регистр eax
ret ; Возвращение из процедуры
_BrowseFolder1 endp ; Конец процедуры обзора папок
; ########################################################################
end start
Вроде вышло но я кривоорук

AsmProj.rar
Исходник
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 21:26

Не могу запустить проект Django
В общем решил заняться Django, все установил как надо, создал виртуальное...

Не могу штатно запустить проект
Всем доброго дня, произошла какая-то необъяснимая для меня фигня:) Мне...

Не могу запустить посмотреть проект
в юнити не сказал бы что новичок и не сказал бы что я среднячек . так время от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru