| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > SendMessage и все все все |
| Автор: gonzales 26.4.2006, 23:40 |
| Хочу посылать системные сообщения окну, хэндл которого знаю из текстовой строки, но SendMessage требует Cardinal??? Как быть??? Должно быть так, хочу закрыть приложение - пишу в Edit WM_SYSCOMMAND, SC_CLOSE, должен получать postmessage(hBhWnd, WM_SYSCOMMAND, SC_CLOSE, 0); как перевести 'WM_SYSCOMMAND' в WM_SYSCOMMAND или 'WM_SYSCOMMAND' в 274 RegisterWindowMessage не канает или я не умею им пользоваться |
| Автор: Fin 26.4.2006, 23:47 |
| Я так понял, ты хочеш в Run-Taim режиме посылать сообшения другим окнам. Тебе придется делать свой интерпретатор сообшений. Т.е. пользователь написал название сообшения. Ты по своим таблицам находиш номер сообшения соответствуюший данной строке и посылаеш его. А еше проше сделать ComboBox Туда забить все сообшения. Пользователь выбирает онное. И ты уже конвертируеш номер итема в номер сообшения. |
| Автор: gonzales 26.4.2006, 23:51 | ||||
это ты самую суть ухватил
А вот с этим проблема, ведь я же не могу охватить все программы с системными сообщениями, опять же есть WM_USER+... А неужели нет уже готовых функций интерпретирования? |
| Автор: Fin 27.4.2006, 00:05 |
| На WM_USER+... 100 процентов уверен, что нет никакой функции. Так как эти сообшения каждый программист вправе интерпретировать сам, как захочет. Список всех стандартных сообшений есть в юните, помоему с именем Messages. Могу и ошибаться. С Дельфи давно не работал. |
| Автор: gonzales 27.4.2006, 00:09 | ||
про это не допонял, например из SDK одного приложения WM_USER+201; // Переключить на канал с абсолютным порядковым номером (LParam = 1..999) Про стандартные функции понятно, их можно выдрать, но не хочется жестко привязываться, хочется гибкости, чтоб пользователя не ограничивать. |
| Автор: Fin 27.4.2006, 00:31 | ||
Это конкретная привязка на конкретное приложение. Я могу например данным сообшением WM_USER+201 уведомлять свое окно, что ему нужно отключить кнопку "Запуск" и никто мне этого не может запретить. Если ты настраиваеш свою прогу на конкретное приложение, то заставлять юзера печатать сообшение WM_USER+201 не самое романтичное занятие. Лучше уж сделать кнопочку, которое это сообшение будет слать окну. Стандартные сообшения уже привязаны к номерам и к действиям. С ними в этом отношении легче. |
| Автор: Демо 27.4.2006, 08:26 |
| >Автор Для используемых системой сообщений составь таблицу соответствия (сообщения ест в Messages.pas). Для всех остальных сообщений такой возможности нет, только если тебе не нужно это для конкретных приложений, в которых тебе известны их пользовательские номера сообщений. |
| Автор: Snowy 27.4.2006, 08:34 |
| Лучше сделай комбобокс, в который загони все возможные сообщения. |
| Автор: gonzales 27.4.2006, 10:18 |
| В общем получается такой возможности нет, хотя это странно |
| Автор: Snowy 27.4.2006, 10:25 |
| Ничего странного. Сообщения - это двухбайтовое число. Строкового представления они не имеют. То, что компилятор позволяет тебе использовать констатны - это только для того, чтобы в цифрах не запутаться. Это ж не RTTI, а WinAPI. |
| Автор: Wing 27.4.2006, 20:33 |
Немного не согласен. Есть очень хитрая функция RegisterWindowMessage. |
| Автор: AKN 3.5.2006, 13:08 |
| gonzales, открой делфю и зажми Ctrl и нажми на слово Messages в списке подключаемых модулей. Там ты увидишь строковые константы и соответствующие им коды сообщения. напиши функцию, которая бы искала значение кода сообщения по его строковому значению и вставляй это значение в сендмессаг себе на здоровье... |