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?