Текущий архив: 2006.04.09;
Скачать: CL | DM;
ВнизWM_GETTEXT окну чужого процесса Найти похожие ветки
← →
Atheist (2006-01-20 17:21) [0]Здравствуйте!
В ВинАпи я пока новичок, поэтому прошу вашего совета. Подскажите, куда копать или что читать.
Ситуация: есть чужое приложение. В нем контрол, комбобокс. Я определяю хэндл edit"а этого комбобокса, посылаю ему WM_GETTEXT. Возвращается пустая строка. А всякими шпионами все ловится отлично.
В каких случаях такое может быть?
← →
umbra © (2006-01-20 17:23) [1]лучше приведите код, с помощью которого отсылается сообщение
← →
Джо © (2006-01-20 17:25) [2]а лучше код, которым "определяю хэндл edit"а этого комбобокса"
← →
begin...end © (2006-01-20 17:29) [3]> Atheist (20.01.06 17:21)
> Я определяю хэндл edit"а этого комбобокса, посылаю ему WM_GETTEXT.
Вроде как можно послать сообщение самому combobox"у: For a combo box, the text is the content of the edit control (or static-text) portion of the combo box.
> В каких случаях такое может быть?
В случае неверного хэндла, например.
← →
Atheist (2006-01-20 17:38) [4]Всем по-порядку.
Ситуация подробнее. Написал некий add-in для Excel, и нужно кое-что сделать с name bar.
Поверьте, хэндл определили правильно - проверено отладчиком и шпионом.
Далее, подменяю оконную процедуру хэндла своей, путем SetWindowLong
Перехватываю WM_KEYDOWN. Без проблем, ловится. (это все из моей dll)
И вот после определения кода нажатой клавиши (определяю верно), мне нужно взять полный текст из name bar. Из своей оконной процедуры, из той части, что обрабатывает WM_KEYDOWN, посылаю WM_GETTEXT - пусто.
Код могу привести, он он отрабатывает во всем как надо, кроме этого случаю, и он C#.
Скорее всего, не знаю каких-то тонкостей обработки этого дела. Или просто обычной вещи, о которой везде неписано, а я не видел...
← →
Athiest (2006-01-20 17:42) [5]>Вроде как можно послать сообщение самому combobox"у
Да, это я от отчаяния начал копаться. С комбобоксом та же история.
← →
begin...end © (2006-01-20 17:42) [6]> Atheist (20.01.06 17:38) [4]
> Далее, подменяю оконную процедуру хэндла своей, путем SetWindowLong
Надеюсь, старая оконная функция из неё, когда нужно, вызывается?
← →
Джо © (2006-01-20 17:45) [7]> [4] Atheist (20.01.06 17:38)
> Всем по-порядку.
>
> Ситуация подробнее. Написал некий add-in для Excel, и нужно
> кое-что сделать с name bar.
> Поверьте, хэндл определили правильно - проверено отладчиком
> и шпионом.
> Далее, подменяю оконную процедуру хэндла своей, путем SetWindowLong
> Перехватываю WM_KEYDOWN. Без проблем, ловится. (это все
> из моей dll)
Вот так фунт. Ну, тогда ты сам ответственен за обработку всех сообщений, в том числе и WM_GETTEXT.
← →
Atheist (2006-01-20 17:46) [8]>Надеюсь, старая оконная функция из неё, когда нужно, вызывается?
Разумеется, после каждой обработки, в самом конце моей подменки-процедуры.
← →
Atheist (2006-01-20 17:50) [9]>Вот так фунт. Ну, тогда ты сам ответственен за обработку всех сообщений, >в том числе и WM_GETTEXT.
Так, вот тут я почувствовал себя неуверенно. Как это? Я же вызываю родимую процедуру.
Интересно... Может, моя проца мешает отработать той?
← →
Джо © (2006-01-20 18:38) [10]> [9] Atheist (20.01.06 17:50)
Если старую вызываешь то, в принципе, должно быть нормально.
← →
Leonid Troyanovsky © (2006-01-20 18:41) [11]
> Atheist (20.01.06 17:38) [4]
> дела. Или просто обычной вещи, о которой везде неписано,
> а я не видел...
SendMessage vs PostMessage?
--
Regards, LVT.
← →
Atheist (2006-01-20 18:43) [12]>Если старую вызываешь то, в принципе, должно быть нормально.
Было бы нормально, я не задавал бы тут вопроса :)
← →
Atheist (2006-01-20 18:43) [13]>SendMessage vs PostMessage?
Делаю Сенд.
← →
Leonid Troyanovsky © (2006-01-20 18:47) [14]
> Atheist (20.01.06 18:43) [13]
> >SendMessage vs PostMessage?
> Делаю Сенд.
Он возвращает 0? Кста, а какой класс у этого комбо?
Возвращает он (не Edit), например, правильный CB_GETCOUNT?
--
Regards, LVT.
← →
Atheist (2006-01-20 18:55) [15]>Он возвращает 0? Кста, а какой класс у этого комбо?
>звращает он (не Edit), например, правильный CB_GETCOUNT?
Класс ComboBox
← →
Leonid Troyanovsky © (2006-01-20 19:06) [16]
> Atheist (20.01.06 18:55) [15]
> >Он возвращает 0? Кста, а какой класс у этого комбо?
> >звращает он (не Edit), например, правильный CB_GETCOUNT?
> Класс ComboBox
Код давай, хоть на VBA.
И пальцем ткни, где Excel оный комбо.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-01-20 19:14) [17]
> Atheist (20.01.06 18:55) [15]
> Класс ComboBox
Ввв..
IsWindowUnicode?
--
Regards, LVT.
← →
Atheist (2006-01-20 19:27) [18]>Код давай, хоть на VBA.
>И пальцем ткни, где Excel оный комбо.
Минуточку.
Что это Комбо, показал Спай++.this.nameBarControlHwnd = (System.IntPtr) FindWindowEx(this.excelApplication.Hwnd, 0, "EXCEL;", null);
this.nameBarComboHwnd = (System.IntPtr) FindWindowEx(this.nameBarControlHwnd.ToInt32(), 0, "combobox", null);
this.nameBarEditHwnd = (System.IntPtr) FindWindowEx(this.nameBarComboHwnd.ToInt32(), 0, "edit", null);
А это оконка:private int NameBarWndProc(IntPtr hWnd, int Msg, int wParam, int lParam)
{
switch (Msg)
{
case (int) Win32.Msg.WM_KEYDOWN:
MessageBox.Show(String.Format("Name Bar Key Down event fired. Key - {0}", wParam));
break;
default:
break;
}
return CallWindowProc(this.oldNameBarWndProc, hWnd, Msg, wParam, lParam);
}
← →
Leonid Troyanovsky © (2006-01-20 19:42) [19]
> Atheist (20.01.06 19:27) [18]
> А это оконка:
>
> private int NameBarWndProc(IntPtr hWnd, int Msg, int
> wParam, int lParam)
Я в диезе профан, но, по аналогии, кажется мне, что NameBarWndProc д.б.
обычной процедурой, а не методом.
А как организовать сию модель я не знаю, бо Рихтера читал весьма давно.
Т.е., я пока сильно сомневаюсь в работоспособности оного, даже
без case (можно опустить).
А проверить мое предположение можно из отдельно стоящего
приложения, которое пошлет честный WM_GETTEXT в злосчастный
контрол, о результатах чего я рассчитываю узнать в понедельник,
бо настала пора отходить на заранее определенные позиции.
--
Regards, LVT.
← →
Джо © (2006-01-20 19:53) [20]Попробуй сформулировать задачу в конференции по .Net (подмена оконной процедуры своим методом). Сдается мне, не так все просто там.
← →
Джо © (2006-01-20 20:00) [21]На всякий случай держи статью по этому вопросу.
http://dotnet.sys-con.com/read/39039.htm
Статья How to Subclass in .NET.
← →
Atheist (2006-01-20 21:47) [22]Ничего статья, только она для родных контролов
Страницы: 1 вся ветка
Текущий архив: 2006.04.09;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.011 c