Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WM_GETTEXT окну чужого процесса


Страницы:   1 2

Atheist ©   (2006-01-20 17:21:00) 

Здравствуйте!

В ВинАпи я пока новичок, поэтому прошу вашего совета. Подскажите, куда копать или что читать.

Ситуация: есть чужое приложение. В нем контрол, комбобокс. Я определяю хэндл edit'а этого комбобокса, посылаю ему WM_GETTEXT. Возвращается пустая строка. А всякими шпионами все ловится отлично.

В каких случаях такое может быть?


Atheist   (2006-01-20 21:47:00) [1]

Ничего статья, только она для родных контролов


Джо   (2006-01-20 20:00:00) [2]

На всякий случай держи статью по этому вопросу.

http://dotnet.sys-con.com/read/39039.htm
Статья How to Subclass in .NET.


Джо   (2006-01-20 19:53:00) [3]

Попробуй сформулировать задачу в конференции по .Net (подмена оконной процедуры своим методом). Сдается мне, не так все просто там.


Leonid Troyanovsky   (2006-01-20 19:42:00) [4]


> Atheist   (20.01.06 19:27) [18]

> А это оконка:
>
>    private int NameBarWndProc(IntPtr hWnd, int Msg, int
> wParam, int lParam)


Я в диезе профан, но, по аналогии, кажется мне, что NameBarWndProc д.б.
обычной процедурой, а не методом.
А как организовать сию модель я не знаю, бо Рихтера читал весьма давно.

Т.е., я пока сильно сомневаюсь в работоспособности оного, даже
без case (можно опустить).

А проверить мое предположение можно из отдельно стоящего
приложения, которое  пошлет честный WM_GETTEXT в злосчастный
контрол, о результатах чего я рассчитываю узнать в понедельник,
бо настала пора отходить на заранее определенные позиции.

--
Regards, LVT.


Atheist   (2006-01-20 19:27:00) [5]

>Код давай, хоть на 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:14:00) [6]


> Atheist   (20.01.06 18:55) [15]

> Класс ComboBox


Ввв..
IsWindowUnicode?

--
Regards, LVT.


Leonid Troyanovsky   (2006-01-20 19:06:00) [7]


> Atheist   (20.01.06 18:55) [15]
> >Он возвращает 0? Кста, а какой класс у этого комбо?
> >звращает он (не Edit), например, правильный CB_GETCOUNT?

> Класс ComboBox


Код давай, хоть на VBA.
И пальцем ткни, где Excel оный комбо.

--
Regards, LVT.


Atheist   (2006-01-20 18:55:00) [8]

>Он возвращает 0? Кста, а какой класс у этого комбо?
>звращает он (не Edit), например, правильный CB_GETCOUNT?

Класс ComboBox


Leonid Troyanovsky   (2006-01-20 18:47:00) [9]


> Atheist   (20.01.06 18:43) [13]
> >SendMessage vs PostMessage?
> Делаю Сенд.


Он возвращает 0? Кста, а какой класс у этого комбо?
Возвращает он (не Edit), например, правильный CB_GETCOUNT?

--
Regards, LVT.


Atheist   (2006-01-20 18:43:00) [10]

>Если старую вызываешь то, в принципе, должно быть нормально.
Было бы нормально, я не задавал бы тут вопроса :)


Atheist   (2006-01-20 18:43:00) [11]

>SendMessage vs PostMessage?
Делаю Сенд.


Leonid Troyanovsky   (2006-01-20 18:41:00) [12]


> Atheist   (20.01.06 17:38) [4]

> дела. Или просто обычной вещи, о которой везде неписано,
>  а я не видел...


SendMessage vs PostMessage?

--
Regards, LVT.


Джо   (2006-01-20 18:38:00) [13]

> [9] Atheist   (20.01.06 17:50)

Если старую вызываешь то, в принципе, должно быть нормально.


Atheist   (2006-01-20 17:50:00) [14]

>Вот так фунт. Ну, тогда ты сам ответственен за обработку всех сообщений, >в том числе и WM_GETTEXT.

Так, вот тут я почувствовал себя неуверенно. Как это? Я же вызываю родимую процедуру.
Интересно... Может, моя проца мешает отработать той?


Atheist   (2006-01-20 17:46:00) [15]

>Надеюсь, старая оконная функция из неё, когда нужно, вызывается?
Разумеется, после каждой обработки, в самом конце моей подменки-процедуры.


Джо   (2006-01-20 17:45:00) [16]

> [4] Atheist   (20.01.06 17:38)
> Всем по-порядку.
>
> Ситуация подробнее. Написал некий add-in для Excel, и нужно
> кое-что сделать с name bar.
> Поверьте, хэндл определили правильно - проверено отладчиком
> и шпионом.
> Далее, подменяю оконную процедуру хэндла своей, путем SetWindowLong
> Перехватываю WM_KEYDOWN. Без проблем, ловится. (это все
> из моей dll)

Вот так фунт. Ну, тогда ты сам ответственен за обработку всех сообщений, в том числе и WM_GETTEXT.


begin...end   (2006-01-20 17:42:00) [17]

> Atheist   (20.01.06 17:38) [4]

> Далее, подменяю оконную процедуру хэндла своей, путем SetWindowLong

Надеюсь, старая оконная функция из неё, когда нужно, вызывается?


Athiest   (2006-01-20 17:42:00) [18]

>Вроде как можно послать сообщение самому combobox'у

Да, это я от отчаяния начал копаться. С комбобоксом та же история.


Atheist   (2006-01-20 17:38:00) [19]

Всем по-порядку.

Ситуация подробнее. Написал некий add-in для Excel, и нужно кое-что сделать с name bar.
Поверьте, хэндл определили правильно - проверено отладчиком и шпионом.
Далее, подменяю оконную процедуру хэндла своей, путем SetWindowLong
Перехватываю WM_KEYDOWN. Без проблем, ловится. (это все из моей dll)

И вот после определения кода нажатой клавиши (определяю верно), мне нужно взять полный текст из name bar. Из своей оконной процедуры, из той части, что обрабатывает WM_KEYDOWN, посылаю WM_GETTEXT - пусто.

Код могу привести, он он отрабатывает во всем как надо, кроме этого случаю, и он C#.

Скорее всего, не знаю каких-то тонкостей обработки этого дела. Или просто обычной вещи, о которой везде неписано, а я не видел...


begin...end   (2006-01-20 17:29:00) [20]

> 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.

> В каких случаях такое может быть?

В случае неверного хэндла, например.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо