Switching Input Language - English->Hebrew Thread last updated on 2003-11-21 16:52:28

Posted by member 66055 on 2003-09-26 11:42:57

Hello. I know this was asked a couple of times before, but none of the solutions proposed worked for me. I am trying to switch my input language to Hebrew from English, or in reverse. Before I was using LiteStep, Alt+Shift switched my language. This doesn't work now. I tried deleting all Hotkeys which have Alt+Shift in them, but to no avail. Remove the Hotkey.dll reference from Step.rc didn't work either. Suggestions, anyone? Thanks in advance.

Posted by member 66055 on 2003-09-26 14:42:45 link

Hmm, nevermind - I tried that Switch It utility (which I thought was only for Russian), and after some hacking, it worked. Thanks anyway.

Posted by member 1783 on 2003-09-27 01:04:32 link

u could use ctrl+shift. u can change it in keyboard properties i think.

Posted by member 111 on 2003-09-30 15:05:05 link

Arrrgh, my favourite subject w/out me! %)
A wind of change blows from the... hmmmm... from the somewhere.
Fashion changes, and SwitchIt stopped to be a good solution.
Ctrl+Shift instead Alt+Shift isn't a good variant too.
May be it is enough to deselect a small checkbox:
Control Panel -> something as Regional Standards (I don't remember how it is written in original Windows and don't know how it can be represented in Hebrew) -> Languages -> "More..." button -> "Language panel" button -> Show indicator on the desktop
It works for me, it works for someone who called Chum, and may be it will work for someone else %)

Posted by member 7 on 2003-09-30 16:09:42 link

Which LS Installer did you use? Are you on WinXP? 0.24.7 Beta 4 should have fixed that on all windows versions except for XP...

Posted by member 111 on 2003-09-30 17:42:03 link

Me?
0.24.7b4 on WinXP...
You fixed inernat.exe displaying, as I understand, but there is is a... hmmm... the next bug in XP: if this checkbox is checked (oooops, I don't know how to say it :) ) every new window must be "registered" by an indicator region, else they cannot switch input language. I don't know how it has been realized, but if indicator is on:
1) if app created a window A during explorer is run, switching works fine
2) if we terminate explorer's process, we still can switch input language in window A
3) but we cannot switch keyboard layout in any new window B, created after exporer died

"SwitchIt" and "Punto Switcher" tools make the "registration" possible. How? Very interesting question :)

So, it is possible to solve the problem by 2 ways: find a way of SwitchIt tool's work, or to add to Litestep automatic checkbox unchecking (ops) via registry or something else...

That's my opinion.

Posted by member 7 on 2003-10-01 02:42:43 link

Hrm... well the indicator won't work on XP at all... actually, now that I think of it, XP uses a different mechanism and doesn't even have internat.exe. So maybe you could get it to work by using an internat.exe from Win2k... I'll have to try that.
I wonder how/where XP loads the language indicator without internat.exe...
Do you know if the "registering" is done via window messages?

Posted by member 111 on 2003-11-15 15:56:24 link

1,5 month delay... I'm a really quick guy %)

>Do you know if the "registering" is done via window messages?

As I understand - no, it works via Microsoft Text Services Framework, i.e. "registering" is fully controlled by OS. There are two interesting windows with the caption TF_FloatingLangBar_WndTitle.
One of them is created by Explorer, another - by ctfmon.exe.
Of course, if LiteStep is a shell, there is only one window in the system.
Ctfmon.exe is loaded from [HKCU]\\Software\Microsoft\Windows\Run and works with the msctf.dll - an interface library for text processing in XP, like the embedded OCR and SpeechAPI routines.
I think explorer works with it too, else I don't know why the window caption is the same.

Some additional observations:
1. when 'Show indicator at taskbar' checkbox disabled, everything is fine
2. when this checkbox enabled:
1) under explorer:
- if indicator is in floating mode, there is only one 'TF_FloatingLangBar_WndTitle' captioned window, it's parent
is ctfmon.exe
- if indicator is minimized, ctfmon's window is hidden and explorer creates a _NEW_ 'TF_FloatingLangBar_WndTitle' window
2) under LiteStep:
- if indicator is in floating mode, everything is fine
- if indicator is minimized, ctfmon's window is hidden again, but layout switching doesn't work!

The problem is that ctfmon is explorer-dependent (and, probably, it is only an external explorer's part), and to solve the trouble we must play with the same routines as ctfmon does.
Of course, we can remove ctfmon's key from the Widnows registry and write own MSCTF loader, but it is easier to uncheck the 'Show indicator at taskbar' chekbox, because if ctfmon disabled we required to load MSCTF manually, since 50% of ctfmon.exe's symbols found by TotalCmd's Lister are undocumented.

I don't understand, how explorer is notified that ctfmon's langbar changed the state, but there is a channel somewhere. There are many of ITf* interfaces, declared in msctf.h, and may be one of them perform this operation; but I'm too lazy to read soooo much docs :)

So I propose the following test: write a module, which just creates a new ITfLangBarMgr interface instance, declared in msctf.h:
HRESULT hr;
ITfLangBarMgr *pLangBarMgr;

hr = CoCreateInstance(CLSID_TF_LangBarMgr,
NULL,
CLSCTX_INPROC_SERVER,
IID_ITfLangBarMgr,
(void**)&pLangBarMgr);


May be it will be enough for solution, may be not, but I just want to try.
The trouble is that I cannot perform such test, because I haven't Platform SDK, cannot download it (at least 30Mbytes by modem?.. errrr...) and don't want to order a CD (I can spend my money with the better way :) )

Any ideas?

Posted by member 111 on 2003-11-18 14:41:29 link

Sorry, but
UP!

Posted by member 7 on 2003-11-21 07:08:29 link

Module sent to the email address in your profile.

Posted by member 85415 on 2003-11-21 07:12:29 link

Hey guys
I have this same problem:
I can't swap to Hebrew from English in LiteStep.
I couldn't find the program "Switchit" mentioned above.
Making the windows language bar show isn't pretty...

And I have no idea how to write modules...
But I'm willing to try!
I have all platforms I think (Including .NET), and I'm on broadband so I can download anything.

So if you tell me what to write and how, I'll test it.
If it works - this could be a great module for everyone!

:-]
It'll be really nice to get a replay on this...

Posted by member 111 on 2003-11-21 15:42:13 link

2MasterShin: you DON'T need a special module. Just uncheck 'Show the Language bar on the desktop' at
Control Panel -> Regional and Language Options -> Languages -> Details -> Language Bar.

It isn't a solution, but a way to avoid the problem :)
I'm just interested, why switching doesn't work with the enabled option, named before.

Sadly that test module doesn't solve the problem too :( But as (now) I know from docs, it was wrong suggestion from the beginning :)
ITfLangBarMgr isn't an interface, which can help with THIS problem, it has another functionality...
OK, let's continue with docs reading %)

Posted by member 85415 on 2003-11-21 16:52:28 link

:-]

Thanks! It works now.

But it still will be a great idea for a module - a litestep Language Bar I mean.
If you need any help in your searches and work just tell me, I'll be glad to.