Re[7]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
От:
Amor
Дата: 10.11.08 17:06
Оценка:
Ну там я ответил... а про СВ я не понял. что это?
Re[8]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Amor, Вы писали:
A>Повесил spy на главный поток — такие сообщения не приходят.
Сам вешай хук WH_GETMESAGE и доложи о результате.
--
С уважением, LVT
Re[8]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Amor, Вы писали:
A>Ну там я ответил... а про СВ я не понял. что это?
CBuilder, расслабься.
--
С уважением, LVT
Re[9]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
От:
Amor
Дата: 10.11.08 17:09
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>Сам вешай хук WH_GETMESAGE и доложи о результате.
ок. завтра уже попробую.
спасибо за сотрудничество
Re[10]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Amor, Вы писали:
LT>>Сам вешай хук WH_GETMESAGE и доложи о результате.
A>ок. завтра уже попробую.
Вешай быстрей, завтра может быть не до этого
WH_GETMESSAGE, sorry.
--
С уважением, LVT
Re[8]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>О.. Древний msdn был много прямей, когда утверждал, что
LT>The WM_INPUTLANGCHANGEREQUEST message is posted
LT>to the application's top-level window when the user chooses an input language.
Чего-то я накосячил.
http://msdn.microsoft.com/en-us/library/ms632630(VS.85).aspx
The WM_INPUTLANGCHANGEREQUEST message is posted to the window with the focus when
the user chooses a new input language
С этим я согласен, блокнот и собс-ручное приложение ведут себя именно так (XP, 2003)
А вот здесь:
http://msdn.microsoft.com/en-us/library/ms632629(VS.85).aspx
The WM_INPUTLANGCHANGE message is sent to the topmost affected window after
an application's input language has been changed.
накосячил MS, бо пример того же блокнота и собс-ручного приложения
демонстрирует, что сообщение получает окно в фокусе (XP, 2003)
--
С уважением, LVT
Re[2]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Amor, Вы писали:
A>С помощью панели в трее, мышкой то есть, переключение происходит нормально.
A>Т.е. предположительно трабла в том, что моё приложение каким-то образом перехватывает Ctrl+Shift... И если так, то основной вопрос — как это можно выяснить? Приложение большое, я пересмотрел все PreTranslateMessage, все обработчики WM_KEYDOWN/UP.
А хоткеи?
Не показывает ли spy на твоем приложении WM_HOTKEY при нажатии волшебных клавиш?
Или WM_COMMAND, если это акселератор.
--
С уважением, LVT
Re[9]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
От:
Amor
Дата: 14.11.08 13:10
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>Сам вешай хук WH_GETMESAGE и доложи о результате.
Сори, заболел, не смог на след. день все проверить
Сделал следующее
LRESULT CALLBACK GetMsgProc( int code,
WPARAM wParam,
LPARAM lParam
)
{
PMSG pmsg = ( PMSG ) lParam;
if ( pmsg->message == WM_INPUTLANGCHANGEREQUEST || pmsg->message == WM_INPUTLANGCHANGE )
{
TRACE( _T("GetMsgProc( WM_INPUTLANGCHANGE %d )\n" ), pmsg->message );
}
return CallNextHookEx( NULL, code, wParam, lParam );
}
Ну и в начале приложения воткнул вызов:
HHOOK hk = ::SetWindowsHookEx( WH_GETMESSAGE, GetMsgProc, m_hInstance, ::GetCurrentThreadId() );
ASSERT( hk );
Итог: сообщение WM_INPUTLANGCHANGEREQUEST в поток не поступают!
Я думаю, это и спай отлично показал, он же сам хуки вешает...
Re[10]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Amor, Вы писали:
A>Я думаю, это и спай отлично показал, он же сам хуки вешает...
С этим, считай, разобрались.
Теперь натрави spy на свое приложение.
Что происходит при нажатии переключателя?
См. также
http://rsdn.ru/forum/message/3171013.1.aspxАвтор: Leonid Troyanovsky Дата: 11.11.08
--
С уважением, LVT
Re[11]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>Что происходит при нажатии переключателя?
Протокол spy — в студию.
--
С уважением, LVT
Re[11]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
От:
Amor
Дата: 17.11.08 14:30
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>Теперь натрави spy на свое приложение.
LT>Что происходит при нажатии переключателя?
Подцепил spy к гавнлому потоку приложения:
<01869> 00010CD6 P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<01870> 00010CD6 S WM_GETDLGCODE
<01871> 00010CD6 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_HASSETSEL | DLGC_WANTCHARS
<01872> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01873> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01874> 00010CC6 S TVM_GETITEM pitem:0012F87C
<01875> 00010CC6 R TVM_GETITEM fSucceeded:True
<01876> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01877> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01878> 00010CC6 S TVM_GETITEM pitem:0012F850
<01879> 00010CC6 R TVM_GETITEM fSucceeded:True
<01880> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01881> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01882> 00010CC6 S TVM_GETITEM pitem:0012F8CC
<01883> 00010CC6 R TVM_GETITEM fSucceeded:True
<01884> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01885> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01886> 00010CC6 S TVM_GETITEM pitem:0012F894
<01887> 00010CC6 R TVM_GETITEM fSucceeded:True
<01888> 00010EEA S WM_GETDLGCODE
<01889> 00010EEA R WM_GETDLGCODE fuDlgCode:DLGC_STATIC
<01890> 00010CD6 P message:0x0118 [Unknown] wParam:0000FFFF lParam:BF8C399C
<01891> 00010CD6 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<01892> 00010CD6 S WM_GETDLGCODE
<01893> 00010CD6 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_HASSETSEL | DLGC_WANTCHARS
<01894> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01895> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01896> 00010CC6 S TVM_GETITEM pitem:0012F87C
<01897> 00010CC6 R TVM_GETITEM fSucceeded:True
<01898> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01899> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01900> 00010CC6 S TVM_GETITEM pitem:0012F850
<01901> 00010CC6 R TVM_GETITEM fSucceeded:True
<01902> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01903> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01904> 00010CC6 S TVM_GETITEM pitem:0012F8CC
<01905> 00010CC6 R TVM_GETITEM fSucceeded:True
<01906> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01907> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01908> 00010CC6 S TVM_GETITEM pitem:0012F894
<01909> 00010CC6 R TVM_GETITEM fSucceeded:True
<01910> 00010EEA S WM_GETDLGCODE
<01911> 00010EEA R WM_GETDLGCODE fuDlgCode:DLGC_STATIC
<01912> 00010CD6 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:2 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:0
<01913> 00010CD6 S WM_GETDLGCODE
<01914> 00010CD6 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_HASSETSEL | DLGC_WANTCHARS
<01915> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01916> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01917> 00010CC6 S TVM_GETITEM pitem:0012F87C
<01918> 00010CC6 R TVM_GETITEM fSucceeded:True
<01919> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01920> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01921> 00010CC6 S TVM_GETITEM pitem:0012F850
<01922> 00010CC6 R TVM_GETITEM fSucceeded:True
<01923> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01924> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01925> 00010CC6 S TVM_GETITEM pitem:0012F8CC
<01926> 00010CC6 R TVM_GETITEM fSucceeded:True
<01927> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01928> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01929> 00010CC6 S TVM_GETITEM pitem:0012F894
<01930> 00010CC6 R TVM_GETITEM fSucceeded:True
<01931> 00010EEA S WM_GETDLGCODE
<01932> 00010EEA R WM_GETDLGCODE fuDlgCode:DLGC_STATIC
<01933> 00010CD6 P message:0x0118 [Unknown] wParam:0000FFFF lParam:BF8C399C
<01934> 00010CD6 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:0
<01935> 00010CD6 S WM_GETDLGCODE
<01936> 00010CD6 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_HASSETSEL | DLGC_WANTCHARS
<01937> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01938> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01939> 00010CC6 S TVM_GETITEM pitem:0012F87C
<01940> 00010CC6 R TVM_GETITEM fSucceeded:True
<01941> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01942> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01943> 00010CC6 S TVM_GETITEM pitem:0012F850
<01944> 00010CC6 R TVM_GETITEM fSucceeded:True
<01945> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01946> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01947> 00010CC6 S TVM_GETITEM pitem:0012F8CC
<01948> 00010CC6 R TVM_GETITEM fSucceeded:True
<01949> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01950> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01951> 00010CC6 S TVM_GETITEM pitem:0012F894
<01952> 00010CC6 R TVM_GETITEM fSucceeded:True
<01953> 00010EEA S WM_GETDLGCODE
<01954> 00010EEA R WM_GETDLGCODE fuDlgCode:DLGC_STATIC
<01955> 00010CD6 P WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
<01956> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01957> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01958> 00010CC6 S TVM_GETITEM pitem:0012F87C
<01959> 00010CC6 R TVM_GETITEM fSucceeded:True
<01960> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01961> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01962> 00010CC6 S TVM_GETITEM pitem:0012F850
<01963> 00010CC6 R TVM_GETITEM fSucceeded:True
<01964> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01965> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01966> 00010CC6 S TVM_GETITEM pitem:0012F8CC
<01967> 00010CC6 R TVM_GETITEM fSucceeded:True
<01968> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01969> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01970> 00010CC6 S TVM_GETITEM pitem:0012F894
<01971> 00010CC6 R TVM_GETITEM fSucceeded:True
<01972> 00010EEA S WM_GETDLGCODE
<01973> 00010EEA R WM_GETDLGCODE fuDlgCode:DLGC_STATIC
<01974> 00010CD6 P WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
<01975> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01976> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01977> 00010CC6 S TVM_GETITEM pitem:0012F87C
<01978> 00010CC6 R TVM_GETITEM fSucceeded:True
<01979> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01980> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01981> 00010CC6 S TVM_GETITEM pitem:0012F850
<01982> 00010CC6 R TVM_GETITEM fSucceeded:True
<01983> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01984> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01985> 00010CC6 S TVM_GETITEM pitem:0012F8CC
<01986> 00010CC6 R TVM_GETITEM fSucceeded:True
<01987> 00010CC6 S TVM_GETNEXTITEM flag:TVGN_CARET hitem:00000000
<01988> 00010CC6 R TVM_GETNEXTITEM hItem:0022D130
<01989> 00010CC6 S TVM_GETITEM pitem:0012F894
<01990> 00010CC6 R TVM_GETITEM fSucceeded:True
<01991> 00010EEA S WM_GETDLGCODE
<01992> 00010EEA R WM_GETDLGCODE fuDlgCode:DLGC_STATIC
<01993> 00010CD6 P message:0x0118 [Unknown] wParam:0000FFFF lParam:BF8C399C
<01994> 00010CD6 P message:0x0118 [Unknown] wParam:0000FFFF lParam:BF8C399C
<01995> 00010CD6 P message:0x0118 [Unknown] wParam:0000FFFF lParam:BF8C399C
<01996> 00010CD6 P message:0x0118 [Unknown] wParam:0000FFFF lParam:BF8C399C
<01997> 00010CD6 P message:0x0118 [Unknown] wParam:0000FFFF lParam:BF8C399C
<01998> 00010CD6 P message:0x0118 [Unknown] wParam:0000FFFF lParam:BF8C399C
<01999> 00010CD6 P message:0x0118 [Unknown] wParam:0000FFFF lParam:BF8C399C
<02000> 00010CBE S WM_NCACTIVATE fActive:False
<02001> 00010CBE R WM_NCACTIVATE fDeactivateOK:True
<02002> 00010CBE S WM_ACTIVATE fActive:WA_INACTIVE fMinimized:False hwndPrevious:(null)
<02003> 00010CBE S .WM_ACTIVATETOPLEVEL fActive:False dwThreadID:0012FB34
<02004> 00020CB8 S ..TTM_ACTIVATE Activate:False
<02005> 00020CB8 R ..TTM_ACTIVATE
<02006> 00010CBE R .WM_ACTIVATETOPLEVEL
<02007> 00010CBE S .WM_NCACTIVATE fActive:False
<02008> 00010CBE R .WM_NCACTIVATE fDeactivateOK:True
<02009> 00010CD8 S .WM_FLOATSTATUS wFloatState:FS_DEACTIVATE
<02010> 00010CD8 R .WM_FLOATSTATUS
<02011> 00010CC0 S .WM_FLOATSTATUS wFloatState:FS_DEACTIVATE
<02012> 00010CC0 R .WM_FLOATSTATUS
<02013> 00020CB8 S .WM_FLOATSTATUS wFloatState:FS_DEACTIVATE
<02014> 00020CB8 R .WM_FLOATSTATUS
<02015> 00010CC8 S .WM_FLOATSTATUS wFloatState:FS_DEACTIVATE
<02016> 00010CC8 R .WM_FLOATSTATUS
<02017> 00010CBE S .WM_FLOATSTATUS wFloatState:FS_DEACTIVATE
<02018> 00010CBE R .WM_FLOATSTATUS
Re[12]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Amor, Вы писали:
A>Подцепил spy к гавнлому потоку приложения:
А что за код вызывается при каждом нажатии и отжатии клавиши?
Нет ли среди него к.л. PeekMessage?
А что получается если использовать Alt+Shift для переключения?
--
С уважением, LVT
Re[13]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
От:
Amor
Дата: 18.11.08 08:57
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>А что за код вызывается при каждом нажатии и отжатии клавиши?
Там обновляется содержимое дерева, рядом с которым расположен этот edit (вернее ввод осуществлялся в combo)
LT>Нет ли среди него к.л. PeekMessage?
Врядли, но даже если б был, то это не дало б ответ на вопрос, почему WM_INPUTLANGCHANGEREQUEST вообще не попадает в очередь сообщений.
LT>А что получается если использовать Alt+Shift для переключения?
Внешне тоже самое. Раскладка не переключается. Более глубокого анализа не проводил...
Re[14]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Amor, Вы писали:
A>Врядли, но даже если б был, то это не дало б ответ на вопрос, почему WM_INPUTLANGCHANGEREQUEST вообще не попадает в очередь сообщений.
Оно и не генерируется.
Т.е., в момент WM_KEYUP один из WM_KEYDOWN уже кто-то "съел".
--
С уважением, LVT
Re[14]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Amor, Вы писали:
A>Внешне тоже самое. Раскладка не переключается. Более глубокого анализа не проводил...
А как ведет себя все это хозяйство в обычном окне, не в диалоге?
--
С уважением, LVT
Re[15]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
От:
Amor
Дата: 20.11.08 12:19
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:
LT>А как ведет себя все это хозяйство в обычном окне, не в диалоге?
Что имеется ввиду под обычным окном? Это все происходит в главном окне приложения...
Структура окон такая:
Фрейм
Сплиттер
Левая форма
Правая форма
Re[16]: Не приходит сообщение WM_INPUTLANGCHANGEREQUEST
Здравствуйте, Amor, Вы писали:
A>Что имеется ввиду под обычным окном? Это все происходит в главном окне приложения...
А откуда же в логе WM_GETDLGCODE?
IsDialogMessage вызываем?
--
С уважением, LVT
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить