Вопрос № 100200: Добрый день, уважаемые эксперты!
Пожалуйста, помогите мне с одной вещью:
Когда вызывается MessageBoxA, на окно выводится MsgBoxA и ждет нажатия клавиши "ОК"... а как сделать, чтобы он не ждал нажатия, а программа выполнялась далее?....
Вопрос № 100.200
Добрый день, уважаемые эксперты!
Пожалуйста, помогите мне с одной вещью:
Когда вызывается MessageBoxA, на окно выводится MsgBoxA и ждет нажатия клавиши "ОК"... а как сделать, чтобы он не ждал нажатия, а программа выполнялась далее?.. Или чтобы MsgBox вызывался всего на несколько секунд, чтобы через пару секунд он пропал и программа выполнялась далее?...
Я сам пробовал по разному , но постоянно не получается( Я вообще программирование под WINDOWS недавно начал изучать (дней 5 назад...), Дос я изучил так себе... Даже не знаю... стоит ли его полностью изучить, или нет, или учиться писать и под WIn32 и Dos...
Спасибо!
Удачи!
P.S. И если не сложно, объясните, пожалуйста, "в двух словах" что значат команды типа jmp @@3, метки @@: просто постоянно в программах такое вижу, а понять, зачем "@" не могу... И в учебниках не встречал.....
Огромное Вам спасибо за то что прочитали мой некороткий вопрос...:)
Отвечает: IceWolf
Здравствуйте, Покритюк Виталий Леонидович!
Есть такая недокументированная функция MessageBoxTimeoutA (W), именно она выводит MessageBox на указанное время.
int MessageBoxTimeoutA(
HWND hWnd, // хэндл окна-родителя
LPCTSTR lpText, // адрес строки с текстом окна
LPCTSTR lpCaption, // адрес строки с заголовком окна
UINT uType, // стиль (см описание MessageBoxEx в Win32.hlp)
WORD wLanguageId // идентификатор языка (см описание MessageBoxEx в Win32.hlp)
dwMilliseconds: DWORD //время существования окна в миллисекундах
);
Описания этой функции нет в win32.hlp, данных о ней нет ни в .lib'ах не в .inc'ах из MASM32, поэтому вызывать её будем получая адрес с помощью GetProcAddress (пример в приложении). Если всё же хотите использовать .lib'ы прочитайте статью.
@:, @label:, etc.-это локальные метки, т.е это обычные метки только их действие ограничивается определённым участком кода. Каждый ассемблер обрабатывает их по-разному. Например "@@:" применяется следующим образом: Вы расставляете их по коду в нужных местах, а затам ссылаетесь на предыдущую метку (выше по коду) как @B, а на следующую (ниже по коду) как @F. Таким образом, если пишете, например, цикл не нужно выдумывать лишние имена.
Также: Локальные метки в FASM, Локальные метки в ТASM и MASM.
Удачи!
Приложение:
--------- И да поможет вам F1, и да сохранит вас F2!
Ответ отправил: IceWolf (статус: Студент)
Ответ отправлен: 30.08.2007, 17:12 Оценка за ответ: 5 Комментарий оценки: Спасибо огромное!!! Теперь все понял! Наконец-то я понял о метках!!)) да, все работает!) а я не знал, почему некоторые функции, у RadASMе не подсвечиваются такие как MessageBoxTimeoutA теперь знаю, что надо получить адресс процесса...:) я просто в туториалах ICZELION'а пока еще не дошел к этому...:) жаль надо через call, я привык все делать
с invoke хотя это может было бы и лучше если бы все с помощью call а то я когда вижу свою программу в отладчике я ее даже не узнаю... мне этим и не нравится писать под Win32... А еще из-за того, что там есть LOCAL... я не понимаю, как эта переменная возникает, смотрю под отладчиком свою программу, там куча всякого, которое я не писал.... .IF, .WHILE... это уже как язык высого уровня... мне нравился дос, потому что дам Ассемблер был намного чище...Спасибо за ответ! Удачи!:)