![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
TuXAPuK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 29.4.2006 Репутация: нет Всего: нет |
Вобщем занемаюсь я програмированием серверов много чего изпытывал но всеравно лучше старой доброй консоли нечего не нашол. К сожелению дошол я до такого момента когда консоли мне окозалось мало, но от старого удобного движка отказыватся я некак не хотел. Вот я и решил извратится по полной с помощью ResHack'а создал ресурс, в нём меню. И через винапи прилепил меню к консольному окну. AllocConsole, Repaint и вот долгожданное меню уже прилеплено. Но тут я встал как вкопанный и обзадался вопросом а как-же поймать сообщение от меню??
![]() С уважением Евгений a.k.a. TuXAPuK ![]() |
|||
|
||||
Quadr0 |
|
|||
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 11:07 |
|||
|
||||
TuXAPuK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 29.4.2006 Репутация: нет Всего: нет |
В этом вся суть проблемы. В том что мне не нужна ещё одна форма с менюшкой, и не желательна реализация при помощи крюка (hook). Так как в первом случее пользователю будет не удобно искать а где-же это окошко с менюшкой там пропало.. А во втором случее прийдётся использовать DDE сервер/клиент что-бы передовать сообщения от крюка (hook) к консоли, а через SendMessage на HWND консоли я тоже нечего сделать немогу.
Вот мой сокращённый Пример:
с Картинкой: Где мы: 1) Устанавливаем Caption для консоли. 2) Заставляем Windows покозать наше окошко и создать для него все заголовки. 3) Устанавливаем меню к нашей консоли загруженное из собственного ресурса с RESNAME = '128' Пологаю вопрос остаётся в силе: Каким образом получить сообщения от своего меню? ![]() С уважением Евгений a.k.a. TuXAPuK |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Могет такой вариант подойдет?
|
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Смотреть нужно примерно в эту сторону:
К сожалению сабкласинг консоли не проходит, а было бы проще на много... |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Можно конечно "тут думать". Только консоль нам не говорит, какой пункт меню был выбран...
Мы узнаем только о раскрытии и закрытии меню. Это вообще может быть не наше меню, а системное. Можно попробовать думать в сторону событий меню. Например следить за отрисовкой и фиксировать последний выбранный пункт... Извращение конечно. Можно попробовать хук на выбор пункта меню. Простого решения здесь пока не видно... |
|||
|
||||
Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
В том то и дело что в сторону событий не получается. Дело в том что у консоли два потока.
Первый ее родной в котором все это и крутиться и второй который доступен непосредственно программисту. Можно проверить крутя цил выботки сообщений - сообщения туда не проходят. Хот если установить таймер с нулевым хэндлом, то в этом цикле WM_TIME уже ловиться. Сабклассинг, как я уже сказал - не проходит к сожалению... Добавлено @ 12:41 Кстати идея с локальным хуком - очень даже может быть... |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
а если попробовать написать обычный цикл сообщений?
правда, тогда нужно будет логику проекта вынести в другой поток Добавлено @ 12:55 (сам я этого не пробовал, так что это - просто догадка) -------------------- qqq |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Пробовали - пусто. Ни одного, даже самого маленького сообщения. Тишина полная.
Консоль только эвенты дает. А там информация о меню не дается. Выдает всего один параметр - reserved. Из чего возникает нездоровый вопрос: почему программеры из M$ считают, что мы не собираемся юзать меню... |
|||
|
||||
Rouse_ |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Мдя, вот так да. Собственно обработчик MENU_EVENT:
Его вызов в ConsoleWindowProc системное меню:
Остальное:
Я медленно офигеваю... Как все сделано: сама консоль находиться в сервере, а не реализуется приложением. Обработчик соответвенно тоже сидит в нем же. Функции работы с консолью вызываются со стороны клиента тобишь приложения... Если интересно как работает сия кухня - могу кинуть родные исходники... |
||||||
|
|||||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
ннндааа... намутили... хотя, если подумать... консольные программы далеко не всегда запускаются в своём окне - иногда запускают командную строку, а в ней программу если каждой запущеной программе давать возможность управлять окном, можетполучиться кашица... кроме того, если, например, программа зациклилась, любому юзеру будет удобно нажать Ctrl-C в случае обработки сообщений самой программой ничего не произойдёт (она ж зациклилась) а сервер, на котором расположена реализация функций консоли, всё сделает, как надо... а перенаправление потоков ввода/вывода... что-то в этом есть... зато у мне пришла в голову другая мысль: причина такого поведения с консольным окном, насколько я понял в том, чтобы меньше переписывать уже существующий код под консоль... тогда можно сделать немножко наоборот: делаем простое окно на него ставим multiline edit прикручиваем дополнительные функции реализуем функции консоли через функции работы с edit'ом если заменить их не получается - перенаправляем ввод/вывод в каналы и общаемся через них тут всё зависит от того, насколько широк диапазон используемых функций консоли... -------------------- qqq |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |