Знаете товарищи... Таки меня задолбала, проблема с переключением раскладки клавиатуры в UltraVNC...
Я админ и на работе мне кодить не дают, злобные начальники и юзвери поэтому патч может и корявый, но решает проблему переключения клавиатуры:
Если на сервере VNC(там где процесс winvnc запущен) и на клиенте( там где запускаем vncviewer) в винде установлены одинаковые сочетания клавиш переключения клавиатуры, то ввод текста на сервере не работает или вводится полная хня.
Дело в том, что в UltraVNC раскладка клавиатуры на протяжении сессии (KeyBoardLayout) на клиенте не должна меняться.
Мой патч при переключении раскладки , не дает поменять раскладку, а точнее возвращает раскладку на место.
(Работать будет полько на XP и выше. В WinMe Win98 нет сообщения WM_INPUTLANGCHANGE)
Собственно что я сделал:
в оконную процедуру
LRESULT CALLBACK ClientConnection::WndProchwnd.
file ClientConnection.cpp
добавил обработку события WM_INPUTLANGCHANGE
<code>
case WM_INPUTLANGCHANGE:
{
ActivateKeyboardLayout( _this->hkl,
KLF_ACTIVATE | KLF_REPLACELANG | KLF_REORDER );
return 0;
}
</code>
в ClientConnection.h
добавил объявление HKL hkl;
<code>
class ClientConnection : public omni_thread
{
public:
HWND m_hSessionDialog;
int m_port;
int m_proxyport;
HKL hkl;
</code>
в VNCViewerApp32.cpp
добавил
pcc->hkl = GetKeyboardLayout(NULL);
<code>
void VNCviewerApp32::NewConnection(bool Is_Listening) {
ClientConnection *pcc = new ClientConnection(this);
pcc->hkl = GetKeyboardLayout(NULL);
</code>
Собственно ссылка на бинарник debug версия:
http://narod.ru/disk/20125161000/vncviewer.7z.html release версия.
http://narod.ru/disk/20125397000/vncviewer_release.7z.html