Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.014 c
2-1142972969
Adios
2006-03-21 23:29
2006.04.09
Помогите исправить процедуру


4-1137854444
Qstream
2006-01-21 17:40
2006.04.09
USB i D.


2-1143223901
ЧиЧиЧи
2006-03-24 21:11
2006.04.09
Как можно создать объект?


15-1142724810
Германн
2006-03-19 02:33
2006.04.09
Верный (правильный) вопрос


4-1137094740
AndreyRus
2006-01-12 22:39
2006.04.09
Временный запрет доступа всех процессов к HDD





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский