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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2009, 14:31   #1
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
Вопрос Программно закрыть окно блокнота

Здравствуйте! Я новичок в asm. Пишу на FASM. Решил в познавательных целях написать программу, которая будет закрывать окно блокнота. Код скомпилировался, но когда запускаю программу, то выходит что программа перестала работать и не отвечает.
Вот код:
Код:
format PE GUI 4.0

include 'INCLUDE\win32a.inc'

notepad db 'notepad'

invoke FindWindow,notepad,0
invoke SendMessage,FindWindow,$0010,0,0
invoke ExitProcess,0


data import

  library kernel32,'KERNEL32.DLL',\
         user32,'USER32.DLL'

 import kernel32,\
        ExitProcess,'ExitProcess'

 import user32,\
        FindWindow,'FindWindowA',\
        SendMessage,'SendMessageA'

end data
Как я уже писал - я новичок в asm. И вероятно где-то допустил ошибку в коде. Помогите пожалуйста найти ошибку. Я вообще программирую на Дельфи, но решил изучать asm.
Заранее благодарен.
Crivel вне форума Ответить с цитированием
Старый 02.04.2009, 14:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как минимум:
Код:
invoke SendMessage,eax,$0010,0,0
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2009, 15:37   #3
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Stilet, спасибо, но всё равно не пашет.
Crivel вне форума Ответить с цитированием
Старый 02.04.2009, 15:44   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Ужас

Код:
format PE GUI 4.0

include 'INCLUDE\win32a.inc'

; Выполнение программы начинается отсюда
; db 'notepad' будет исполнен как код 6E 6F 74 65 70 61 64
; 6E = OUTS DX,[BYTE ES:EDI]                                 
; первая же команда завалит программу

; Строки заканчиваются нулями
notepad db 'notepad'

invoke FindWindow,notepad,0
; Это вообще бред
invoke SendMessage,FindWindow,$0010,0,0
invoke ExitProcess,0

data import

  library kernel32,'KERNEL32.DLL',\
         user32,'USER32.DLL'

 import kernel32,\
        ExitProcess,'ExitProcess'

 import user32,\
        FindWindow,'FindWindowA',\
        SendMessage,'SendMessageA'

end data
Явно обьявляй секции, иначе фасм засунет всё в одну. Работать будет, но бывают исключения.

Код:
format PE GUI 4.0
entry start
include 'INCLUDE\win32a.inc'

section '.data' data readable writable

        notepad db 'notepad', 0

section '.code' code readable executable

start:
        invoke FindWindow, notepad, 0
        invoke SendMessage, eax, WM_CLOSE, 0, 0
        invoke ExitProcess, 0

section '.idata' import data readable   

        library kernel32,'KERNEL32.DLL',\
                 user32,'USER32.DLL'

        import kernel32,\
                 ExitProcess,'ExitProcess'

        import user32,\
                 FindWindow,'FindWindowA',\
                 SendMessage,'SendMessageA'
Есть ещё упрощённый синтаксис "на макросах", для этого надо подключить win32ax.inc. Удобно, но могут быть сложности с импортами.

Код:
format PE GUI 4.0
include 'win32ax.inc' 

.data  
        notepad db 'notepad', 0

.code
        start:
        invoke FindWindow, notepad, 0
        invoke SendMessage, eax, WM_CLOSE, 0, 0
        invoke ExitProcess, 0
.end start
Если подключить win32axp.inc, то фасм будет ещё и проверять количество параметров в функциях.
Вот это "import user32, FindWindow,'FindWindowA', SendMessage,'SendMessageA'" можно заменять на include 'api/user32.inc', 'api/kernel32.inc' и т.п.

И отступ в 8 пробелов - это святое
пыщь

Последний раз редактировалось JTG; 02.04.2009 в 15:49.
JTG вне форума Ответить с цитированием
Старый 02.04.2009, 16:40   #5
Crivel
Delphi\C++
Форумчанин
 
Аватар для Crivel
 
Регистрация: 18.06.2008
Сообщений: 277
По умолчанию

Большое спасибо JTG! Всё работает!
Crivel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Немогу закрыть окно по класу и имени Pirotexnik Win Api 4 02.04.2009 17:05
Закрыть окно в браузере! Какой-то глюк! Yaga Безопасность, Шифрование 7 24.02.2009 03:49
Как закрыть окно подключения к инету dial-up? Vladimir K. Работа с сетью в Delphi 4 12.02.2008 19:13
Программно закрыть Internet Explorer 7 Vladimir K. Общие вопросы Delphi 10 21.01.2008 20:00
Закрыть окно консоли в Delphi & Автозагрузка NovaC Общие вопросы Delphi 1 27.11.2006 21:38