Comments 74
Хорошо) Но почему ".cpp"?
-8
Чтобы использовать некоторые удобные возможности C++, которые доступны при отключении RTL.
+4
А почему бы и нет? И кто же, если не он? :)
0
Сразу в заголовке было написано просто C, я позже исправил на C++ — чтобы было понятно, что означает этот комментарий.
+3
Win7 Ult SP1 x64 RUS. Щито-то не арбайтен. В процессах висит, толку ноль. Не в редакторах, ни в эксплорере винды.
0
У меня Windows 7 SP Professional (английская, x86), плюс тестировал на Windows XP — работало. Вы нажимаете Shift, когда курсор находится над полем для ввода? Дело в том, что индикация появляется только по нажатию на Shift. Я это сделал для того, чтобы в браузере при чтении текста индикация не отображалась на этом же курсоре.
0
у меня Win7 Ult x86 Rus — работает. Наверно дело в x64…
Кстати, довольно удобно. Спасибо за программку
Кстати, довольно удобно. Спасибо за программку
+1
Почему-то подумалось, что будет реагировать на alt + shift / ctrl + shift. Так что звиняйте ради Бога.
Имхо, не совсем удобно для проверки нажимать лишний раз шифт. Понятно, что привыкнуть можно, но все же, было бы лучше отслеживать системное изменение курсора со стандартного на «I» и тут уже на постоянку подсовывать отображение идентификатора текущей раскладки. Но это так, мысли в слух.
Имхо, не совсем удобно для проверки нажимать лишний раз шифт. Понятно, что привыкнуть можно, но все же, было бы лучше отслеживать системное изменение курсора со стандартного на «I» и тут уже на постоянку подсовывать отображение идентификатора текущей раскладки. Но это так, мысли в слух.
+2
UFO just landed and posted this here
Соглашусь с тем, что постоянно отображать — удобнее.
А тем, кто в силу каких-то причин не пользуется мышкой, было бы удобно отображать прямо в поле ввода.
Можно добавить иконку в трей и настройки
А тем, кто в силу каких-то причин не пользуется мышкой, было бы удобно отображать прямо в поле ввода.
Можно добавить иконку в трей и настройки
0
Ниже в комментариях есть реализация подобного поведения.
0
WinXP x86 Работает отлично. Спасибо за маленькую полезную программку, которая вовсе не мешает.
0
Чтобы язык постоянно отображался рядом с курсором курсором редактирования текста, достаточно просто убрать хук на клавиатуру и запустить таймер без ограничений по времени. Кода получится ещё меньше.
Правда это не очень красивое решение. Более грамотно было бы внедрять во все процессы dll, которая отлавливала бы событие изменения языка в приложении и меняла соответствующим образом курсор. Заметка на будущее.
#define OEMRESOURCE
#include <windows.h>
HINSTANCE g_instance;
HCURSOR g_hc_ibeam;
UINT_PTR g_timer = NULL;
DWORD g_layout = 0;
void CALLBACK UpdateTimer(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
int layout = (int) GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)) & 0xFFFF;
if (g_layout != layout)
{
HCURSOR hc_new = LoadCursor(g_instance, MAKEINTRESOURCE(layout));
if (hc_new)
{
SetSystemCursor(hc_new, OCR_IBEAM);
}
else
{
SetSystemCursor(CopyCursor(g_hc_ibeam), OCR_IBEAM);
}
}
}
int Main()
{
HANDLE mutex = CreateMutex(NULL, FALSE, "LangCursor");
if (GetLastError() == ERROR_ALREADY_EXISTS || GetLastError() == ERROR_ACCESS_DENIED) return 1;
g_hc_ibeam = CopyCursor(LoadCursor(NULL, IDC_IBEAM));
if (!g_hc_ibeam) return 1;
g_instance = GetModuleHandle(NULL);
g_timer = SetTimer(NULL, g_timer, 200, UpdateTimer);
if (!g_timer) return 1;
MSG msg;
while (GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
DestroyCursor(g_hc_ibeam);
return 0;
}
EXTERN_C void WINAPI WinMainCRTStartup()
{
ExitProcess(Main());
}
Правда это не очень красивое решение. Более грамотно было бы внедрять во все процессы dll, которая отлавливала бы событие изменения языка в приложении и меняла соответствующим образом курсор. Заметка на будущее.
+9
Скомпилированная версия: langcursor-permanent-bin.zip (1 кб).
+7
UFO just landed and posted this here
А будьте любезны, скомпилируйте для трех языков: английский, русский, украинский.
PS: VEG, спасибо за отличную утилиту!
PS: VEG, спасибо за отличную утилиту!
0
Сам сделал. Перманент версия EN RU UK (с заглавными буквами)
langcursor_permanent_en_ru_uk_bin.zip
langcursor_permanent_en_ru_uk_bin.zip
+1
После
if (g_layout != layout)
{
забыл строчку g_layout = layout;
Из-за этой ошибки курсор устанавливается даже тогда, когда это не нужно. В архиве уже исправленная версия.+1
А зачем внедряться во все процессы? Может быть проще и не менее грамотно ставить хук на WH_SHELL, событие HSHELL_LANGUAGE?
Сам не пробовал, но мне кажется, что должно работать как следует.
Сам не пробовал, но мне кажется, что должно работать как следует.
0
А для linux(ubuntu) есть аналогичное решение?
+5
Еще бы как-то сделать, чтобы для каждой закладки хрома сохранялась раскладка ;)
0
Оффтопик, конечно же…
0
Для Chrome не знаю, но вот расширение для Firefox.
+4
Отличное дополнение к capswitch.
0
UFO just landed and posted this here
Перед этим вы запускали перманентную версию? Если да, то после её убийства до перезагрузки остаётся курсор с последним языком, и обычная версия использует этот курсор как основной. Чтобы сбросить без перезагрузки, зайдите в настройки курсоров мыши и обновите там курсор редактирования текста сперва на какой-нибудь левый, затем опять на стандартный.
+1
UFO just landed and posted this here
Программа при загрузке запоминает текущий системный курсор, при изменении языка она его подменяет, и если в этот момент убить программу, то системный курсор останется подменённым на версию с иконкой языка.
Если вы пытаетесь выбрать язык, для которого нет курсора (а курсор сейчас есть только для русского и для английского), то программа отображает стандартный курсор, который она сохранила при загрузке.
Для нормальной работы после убийства программы нужно сперва сбросить курсор на нормальный, и только после этого запускать новый экземпляр.
Чтобы этого избежать, нужно будет реализовать нормальную процедуру выхода, когда курсор восстанавливался бы сам. В ближайшем обновлении реализуем.
Если вы пытаетесь выбрать язык, для которого нет курсора (а курсор сейчас есть только для русского и для английского), то программа отображает стандартный курсор, который она сохранила при загрузке.
Для нормальной работы после убийства программы нужно сперва сбросить курсор на нормальный, и только после этого запускать новый экземпляр.
Чтобы этого избежать, нужно будет реализовать нормальную процедуру выхода, когда курсор восстанавливался бы сам. В ближайшем обновлении реализуем.
+1
UFO just landed and posted this here
UFO just landed and posted this here
К сожалению, не знаю с чем может быть связана эта проблема :( Попробуйте добавить такой ключ в реестр и перезагрузиться (должно отключить сервисы для восточноазиатских языков).
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IMM]
"LoadIMM"=dword:00000000
+1
Рядом с мышиным курсором что-то показывать не очень практично, он может быть где угодно во время ввода текста, а может быть даже скрыт (некоторые программы умеют его прятать когда начинается набор текста). Я когда-то пробовал возле каретки эту информацию выводить, но к сожалению многие приложения не используют стандартную каретку (например тот же офис или приложения на Qt) и как в них вклиниваться осталось для меня непонятным.
0
В среде, где достаточно RU+EN+Compose, достаточно прицепить переключение раскладки, скажем, на CapsLock, и по светодиоду на границе поля зрения всегда можно определить текущую раскладку.
0
У меня всегда один и тот же язык, но с двумя раскладками — RU и US International. Соответственно, возле курсора висит всегда RU.
0
Если не секрет, зачем такое понадобилось? :)
+3
Семерка, при установке, спрашивает про язык и раскладку.
Автоматом выбираю раскладку «США международная», а остальные поля не трогаю. Получаю в результате два языка — русский и английский, а в русском еще и две раскладки. Мне проще удалить лишний язык, который не стоит основным и оставить две раскладки в одном языке.
Потом привык и всегда теперь так ставлю… Ничем не мешает в жизни — раскладки переключаются по CTRL+SHIFT, никакой разницы не замечаю.
Автоматом выбираю раскладку «США международная», а остальные поля не трогаю. Получаю в результате два языка — русский и английский, а в русском еще и две раскладки. Мне проще удалить лишний язык, который не стоит основным и оставить две раскладки в одном языке.
Потом привык и всегда теперь так ставлю… Ничем не мешает в жизни — раскладки переключаются по CTRL+SHIFT, никакой разницы не замечаю.
0
Может быть тогда это повод сделать как положено :)
+2
Вам не кажется, что вы как-то неправильно используете концепцию языков и раскладок? :)
+1
Строго говоря — кажется, но разницы я не замечал до сих пор.
0
А в чем она?
0
В том, что в русском языке нет латиницы. А раскладка есть.
0
Язык – это язык, например русский, английский. А раскладка – это конкретное отображение алфавита языка на клавишы: например виндовый йцукен, или вообще дворак.
У меня например на рабочей винде стоит два языка, причем на русском по умолчанию Mac'овая раскладка, при этом можно переключиться и на обычную виндовую, итого 2 языка и 3 раскладки.
У меня например на рабочей винде стоит два языка, причем на русском по умолчанию Mac'овая раскладка, при этом можно переключиться и на обычную виндовую, итого 2 языка и 3 раскладки.
0
UFO just landed and posted this here
Я вот никак не пойму,… нафига мьютекс.
0
Отличная вещь.
Правда попытка приладить к дикой связке с терминалом не дала нужного результата, но и без этого стало удобно на обычной машине.
Правда попытка приладить к дикой связке с терминалом не дала нужного результата, но и без этого стало удобно на обычной машине.
+1
Если кто-то пытается добавить курсоры со своими языками, небольшая памятка:
Не забывайте в файле resource.h установить правильный идентификатор курсора, он должен соответствовать идентификатору языка из этой таблицы: msdn.microsoft.com/en-us/goglobal/bb964664 (последняя колонка). Сейчас уже есть идентификаторы русского и американского английского:
Не забывайте в файле resource.h установить правильный идентификатор курсора, он должен соответствовать идентификатору языка из этой таблицы: msdn.microsoft.com/en-us/goglobal/bb964664 (последняя колонка). Сейчас уже есть идентификаторы русского и американского английского:
#define IDC_CURSOR1 1033
#define IDC_CURSOR2 1049
0
А про пунто-свитчер тут правда никто не слышал?
В IDE автоматическую смену раскладки отключаем, т.к. там пунто часто тупит, однако возможность менять раскладку только что написанного текста нажатием одной кнопки остается и в выключенном режиме. Зато исправлять уже написанное мне кажется удобнее, чем превентивно проверять раскладку.
В IDE автоматическую смену раскладки отключаем, т.к. там пунто часто тупит, однако возможность менять раскладку только что написанного текста нажатием одной кнопки остается и в выключенном режиме. Зато исправлять уже написанное мне кажется удобнее, чем превентивно проверять раскладку.
0
Видимо слышали, видимо пользовались, видимо очень не понравилось. Если что — говорю за себя и некоторых из своего окружения от кого слышал отзывы. да, список исключений куда вносятся putty, есть, но все равно, мне на рус/укр/англ жутко неудобно. Проще оказалось переключать раскладку только по Ctrl+1,2,3 рус, англ, укр в самой винде.
0
Если нравится переключать «на» язык, то могу поделиться своей программкой, в которой делал настройку Caps — англ, Shift+Caps — рус, Ctrl+Caps — укр. Если быть совсем точным, то сочетания там могут быть любыми. Давно была идея довести эту прожку до ума да выложить в паблик под какой-нибудь свободной лицензией, да всё никак со временем :)
0
Отличная утилита! Приходится использовать эстонскую раскладку — почти все буквы те-же, но спецсимволы совершенно на других местах.
0
А можно попросить под x64 собрать?
+1
Было бы круто менять цвет курсора (не текстового а обычного) в зависимости от языка
0
А можно менять цвет мигающей «вертикальной черты» что в поле ввода.
Скажем русский красный английский синий. Ну и пожирней чуть-чуть сделать.
Скажем русский красный английский синий. Ну и пожирней чуть-чуть сделать.
0
Sign up to leave a comment.
Простой индикатор раскладки клавиатуры в курсоре на С++