Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2018, 15:12   #1
Hichigo204
 
Регистрация: 24.11.2018
Сообщений: 6
По умолчанию Создание окна вывода в masm32

Есть код программы,нужно создать окно с выводом информации или сделать это через MessageBox.Подскажите ничего получается.
.386
.model flat, stdcall

option casemap:none

include\masm32\include\windows.inc
include\masm32\include\kernel32.inc
include\masm32\include\user32.inc
includelib\masm32\lib\user32.lib
includelib\masm32\lib\kernel32.lib

.data ; Секцияданных
buf db 500h dup(?) ; Буффер для имени директории
fake1 db '.',0 ; Директории, которые
fake2 db '..',0 ; НЕ надо сканировать
time db 'temachka.jnt'

.code ; Секция кода
find_files proc ; Рекурсивная процедура ; Поиска файлов
push ebp ; Выделим место в стеке
mov ebp,esp ; под хэндл поиска
sub esp,144h ; и структуру WIN32_FIND_DATA
lea eax,[ebp-144h] ; Вычисляем указатель на find_data
invoke FindFirstFile,offset buf,eax ; Ищем файлы
inc eax ; Если ничего
je exit ; не нашли - выходим
dec eax ; Иначе, сохраним
mov dword ptr [ebp-6h],eax ; хэндл поиска
find_next:
mov eax,dword ptr [ebp-144h] ; Проверяем, нашли
and eax,FILE_ATTRIBUTE_DIRECTORY ; директорию?
je found ; Если нет - прыгаем на found
lea eax,[ebp-118h] ; Вычислим указатель на cFileName
invoke lstrcmp,offset fake1,eax ; это "."?
test eax,eax ; Если да,
je next ; ищем дальше
lea eax,[ebp-118h] ; Вычислим указатель на cFileName
invoke lstrcmp,offset fake2,eax ; это ".."?
test eax,eax ; Если да,
je next ; ищем дальше
invoke lstrlen,offset buf ; Вычислим длину строки
sub eax,3 ; Вычтем *.*
push eax ; Сохраним полученную длину
mov byte ptr [buf+eax],0 ; Если мы всё-таки нашли
lea eax,[ebp-118h] ; директорию, то прибавим
invoke lstrcat,offset buf,eax ; к её имени c FileName
invoke lstrlen,offset buf ; Вычислим длину строки
mov dword ptr [buf+eax],'*.*\' ; Прибавим \*.*
mov byte ptr [buf+eax+4],0 ; для поиска
call find_files ; Вызываем процедуру поиска для найденной директории
pop eax ; Восстановим дляну строки
mov dword ptr [buf+eax-1],'*.*\' ; И восстановим \*.*
mov byte ptr [buf+eax+3],0 ;
jmp next ; Ищем дальше
found:
lea eax,[ebp-118h] ; Вычислим длину
invoke lstrlen,eax ; cFileName
cmp dword ptr [ebp-118h+eax-4],'zxy.' ; Проыерим расширение файла
jne next ; Если не равно ищем дальше
;mov [ebp-118h],test
lea eax,[ebp-118h] ; Если нашли, то что нужно
invoke MessageBox,0,eax,eax,0 ; Покажем MessageBox с именем файла
next:
lea eax,[ebp-144h] ; Вычислим указатель на find_data
invoke FindNextFile,dword ptr [ebp-6h],eax ; Ищем следующий файл
test eax,eax ;
jne find_next ; Если ничего не нашли
invoke FindClose,dword ptr [ebp-6h] ; Закрываем хэндл поиска
exit:
leave ; Выходим из
ret ; процедуры
find_files endp
start:
invoke SetErrorMode,SEM_FAILCRITICALERRORS ; Установим error mode чтобы в случае обращения к недоступному диску не вываливалось сообщение
invoke GetLogicalDrives ; Получаем список дисков существующих в системе
mov ecx,25 ; Будем проверять, начиная с Z:\
find_drives:
mov ebx,1 ; Нехитрые операции в
shl ebx,cl ; ходе которых мы выясняем
and ebx,eax ; присутсвует диск в
je no_disk ; системе или нет
add cl,65 ; Если да, то
mov byte ptr buf,cl ; добавим букву
sub cl,65 ; диска в буффер
mov dword ptr buf+1,'.*\:' ; Сформируем строку
mov byte ptr buf+5,'*' ; для поиска, вида,
mov byte ptr buf+6,0 ; например, C:\*.*
push eax ; Сохраняем нужные
push ecx ; регистры в стеке
call find_files ; Вызываем процедуру поиска
pop ecx ; Восстанавливаем
pop eax ; регистры
no_disk: ; Если диска нет,
dec ecx ; то проверяем следующий
jge find_drives ; пока ecx>0
invoke ExitProcess,0 ; Выходим из программы
end start
Hichigo204 вне форума Ответить с цитированием
Старый 19.12.2018, 15:14   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

http://www.programmersforum.ru/showthread.php?t=325401
p51x вне форума Ответить с цитированием
Старый 19.12.2018, 16:08   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Hichigo204, код нужно хоть как-то форматировать, а не выкладывать его как кучу навоза. Если лень привести его в нормальный вид, то будь добр объяснить, что именно тут происходит, и что нужно в итоге получить. А здесь непонятно что..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 19.12.2018, 16:39   #4
Hichigo204
 
Регистрация: 24.11.2018
Сообщений: 6
По умолчанию

это программа ищет файл в системе по заданому формату,при помощи API функций
1.Find_files - процедура, которая включает в себя алгоритм поиска файлов.
FindFirstFile - поиск следующего файла, с него начинается поиск.
FindClose - закрытие файла
Использовании основные функции для работы со строками:
- lstrcmp - сравнения
- lstrlen - нахождение продлен
- lstrcat - конкатинация (объединение срок)

В коде вводится расширения, для поиска файла, и программа выводит все файлы с таким расширением которые смогла найти по всему компьютеру.

2. На экран выводится имя всех файлов которые были найдены с таким расширением.

Программа начинает проверять, нашла ли она директорию , если так:
Она заходит и начинает цикл снова;
Заходит до тех пор пока не перейдет все директории и файлы в системе.

Последний раз редактировалось Hichigo204; 19.12.2018 в 16:47.
Hichigo204 вне форума Ответить с цитированием
Старый 19.12.2018, 16:53   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Почему в коде куча захардкоженных смещений? Почему не использовать поля структуры? Есть LOCAL, есть .if и прочее...
p51x вне форума Ответить с цитированием
Старый 19.12.2018, 17:00   #6
Hichigo204
 
Регистрация: 24.11.2018
Сообщений: 6
По умолчанию

я только учусь со структурами такое реализовать для меня трудновато,сделал как смог,код рабочий в дебагере смотрел, а запускаю exe ,программа работает но не выводит файлы или файл,вообще ничего
Hichigo204 вне форума Ответить с цитированием
Старый 19.12.2018, 17:05   #7
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

ну вот.. можно-же при желании растолковать..
FindFirstFile находит первый файл, а для продолжения нужно использовать уже FindNextFile. Первая возвратит тебе хэндл поиска, а вторая продлит поиск по этому хэндлу.

Файлов может быть много, и буфер переполнится. Поэтому лучше выводить имена отдельно из каждого дира.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 19.12.2018, 17:16   #8
Hichigo204
 
Регистрация: 24.11.2018
Сообщений: 6
По умолчанию

а можно немного подробней растолковать,как это сделать
Hichigo204 вне форума Ответить с цитированием
Старый 19.12.2018, 17:19   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Именно так как вам сказали и написано в офф доке:
FindFirstFile
do{}while(FindNextFile(h, &ffd) != 0)
p51x вне форума Ответить с цитированием
Старый 19.12.2018, 17:22   #10
Hichigo204
 
Регистрация: 24.11.2018
Сообщений: 6
По умолчанию

Буду пробовать
Hichigo204 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несмотря на подключение masm32.inc и masm32.lib не подтягиваются функции stdin и stdout dFender Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.12.2016 13:24
Assembler под Windows (MASM32). Вывод массива в Edit диалогового окна используя WinAPI или функций MASM munthrekosh Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 04.06.2013 04:03
masm32 не модальные диалоговые окна, как гланые Avizpr Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 12.03.2013 14:05
masm32 - После создания окна оно закрывается:( Wardrag Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 23.08.2010 09:45