Вопрос № 71578: Доброго времени суток.
Как в C++ Builder 6 после создания и написания проэкта сделать что-то вроде либо самораспаковывающегося архива, либо установойчной программы?...Вопрос № 71583: Доброго времени суток!
Подскажите пожалуйста пример программы, которая висит в памяти и ждёт нажатия клавиш.
Если я с клавиатуры нажму "А", {то выполнить этот кусок}, а если нажму "Б", {то этот кусок}. Форма не нужна. <br...Вопрос № 71597: Помогите решить проблему.
Почему моя программа, работающая с строками и файлами при первом запуске работает нормально, а при повторном выдает ошибку Access Violation.... и т.д. Файлы в конце я все закрываю. При перезапуске формы история повторяет...
Вопрос № 71.578
Доброго времени суток.
Как в C++ Builder 6 после создания и написания проэкта сделать что-то вроде либо самораспаковывающегося архива, либо установойчной программы?
Отправлен: 18.01.2007, 20:00
Вопрос задал: Mihalich (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Vaga
Здравствуйте, Mihalich!
InstallShield.
Можно воспользоваться NSIS от Nullsoft - хорошая штука, к тому же бесплатная, но нужно писать скрипт самостоятельно.
--------- Ошибка становится ошибкой, когда рождается как истина. Станислав Ежи Лец
Ответ отправил: Vaga (статус: 6-ой класс)
Ответ отправлен: 19.01.2007, 02:53
Вопрос № 71.583
Доброго времени суток!
Подскажите пожалуйста пример программы, которая висит в памяти и ждёт нажатия клавиш.
Если я с клавиатуры нажму "А", {то выполнить этот кусок}, а если нажму "Б", {то этот кусок}. Форма не нужна.
Нужен просто запущенный процесс в памяти (резидент?).
Спасибо.
чтобы реализовать ваш замысел необходимо использовать механизм ловушек(Windows Hooks).
Ответ отправил: Mitya86 (статус: 1-ый класс)
Ответ отправлен: 19.01.2007, 00:23 Оценка за ответ: 3 Комментарий оценки: Спасибо. Однако, как такового, ответа на вопрос не последовало... Посмотрите ответ другого эксперта и сравните...
Отвечает: burbot
Здравствуйте, Москвин Роман!
Конечно установка хука WH_KEYBOARD_LL функцией SetWindowsHookEx очень мощный и гибкий метод, но есть метод попроще.
Давайте подумаем вместе :)
Во-первых: Вам нужен просто "резидент".
С моей точки зрения, решений здесь два (Если их больше, пусть кто-то поправит. Я об этом сильно не задумывался :).
1. Написать сервис (работает только на NT).
2. Создать dummy-окно, которое показывать пользователю мы не будем. Нам потребуется лишь его оконная процедура для обработки сообщений.
В Windows 2000/XP, кстати, появилась возможность создавать "message-only" окна. Т.е. окна, которые как раз и предазначены для решения данной задачи вторым способом. Их мы и будем использовать.
Итак:
1. Регистрируем свой класс окна.
2. Создаем окно зарегистрированного класса функцией CreateWindowEx и передаем ей в параметре hWndParent значение HWND_MESSAGE.
С задачей создания "резидента" справились.
3. После создания окна регистрируем глобальные горячие клавиши функцией RegisterHotKey.
4. В оконной функции пишем обработку сообщения WM_HOTKEY.
5. При выходе из программы не забываем удалить наши глобальные горячие клавиши фукцией UnregisterHotKey.
В приложении код, написанный на коленке.
Всего доброго!
Приложение:
--------- Хорошо смеется тот, кто смеется над собой. (C)
Ответ отправил: burbot (статус: 1-ый класс)
Ответ отправлен: 19.01.2007, 17:35 Оценка за ответ: 4 Комментарий оценки: Незнаю, почему-то Ваш пример во вложении у меня не работает. Microsoft Visual C++ 6.0 выдаёт: "g:\program files\microsoft visual studio\myprojects\13\13.cpp(83) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Вопрос № 71.597
Помогите решить проблему.
Почему моя программа, работающая с строками и файлами при первом запуске работает нормально, а при повторном выдает ошибку Access Violation.... и т.д. Файлы в конце я все закрываю. При перезапуске формы история повторяется снова, первый раз все отлично, второй и последуюшие ошибка. Может дело в памяти. Компилятор Borlan C++ Builder 6.0
Отвечает: Шинтяков Дмитрий Васильевич / Ratson
Здравствуйте, Костенко Игорь Викторович!
Значит, где-то ошибка, что ещё можно тут сказать....
Запустите программу по шагам, посмотрите, на какой команде валится. Или хотя бы листинг приведите.