Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.033 c
1-1141686181
Papa
2006-03-07 02:03
2006.04.09
Проблема с указателем на запись


4-1138106786
er_long76
2006-01-24 15:46
2006.04.09
Плагины для Windows Messenger


2-1143004367
Rubey
2006-03-22 08:12
2006.04.09
Вывод текста на экран


2-1143042991
mrAndersen
2006-03-22 18:56
2006.04.09
CopyFile


15-1142411199
WestBronx
2006-03-15 11:26
2006.04.09
Как узнать св-во железа?