ページ

ラベル ChgSIP の投稿を表示しています。 すべての投稿を表示
ラベル ChgSIP の投稿を表示しています。 すべての投稿を表示

2008-10-19

SIPの切り替え その2

昨日から悩んでいたSIP切り替え後に表示が崩れる問題を調べている途中、MSDNのSipSetInfo()のページで こんな説明を見つけました。
To prevent undesirable information from being passed to SipSetInfo, clear the SIPINFO structure beforehand.
The following code example shows how to clear the structure.
 
memset(pSipInfo, 0, sizeof(SIPINFO))
 
"undesirable information"というのが引っかかったので、空のSIPINFOをSipSetInfo()に渡してSipSetCurrentIM()の前後で実行してみたのですが何も変わりませんでした。
 
ところが、ふとSIPINFOの定義を見てみると おなじみのcbSizeメンバがあるじゃないですか。 cbSizeをセットしてやると SIPを切り替えても表示が崩れなくなりました。
 
たまたま動いているだけかもしれませんが、昨日のSIP切り替え部分はこんな感じになりました。
static VOID ChgSip()
{
    DWORD   dwData  = 0L;
    SIPINFO sipInfo = {0};

    if (SUCCEEDED(RegistryGetDWORD(SN_DISPLAYROTATION_ROOT, SN_DISPLAYROTATION_PATH, SN_DISPLAYROTATION_VALUE, &dwData))) {
        ZeroMemory(&sipInfo, sizeof(SIPINFO));
        sipInfo.cbSize = sizeof(SIPINFO);
        SipSetInfo(&sipInfo);
        if (0L == dwData) {
            SipSetCurrentIM(&g_clsidPortrait);
        } else {
            SipSetCurrentIM(&g_clsidLandscape);
        }
    }
}

「cbSizeがあったらセットする」というのは常識なのかもしれませんが、せっかくサンプル書くならそこまで書いておいて欲しいですよね。
 
という訳で、一応動いているプログラムを公開しておきます。
 
ChgSIP.exeを適当なフォルダにコピーして起動するとSIPの選択画面が出るので、縦画面・横画面それぞれのSIPを選択してください。
 
あとは画面の向きが切り替わったときに自動的にプログラムが起動してSIPを切り替えます。
 
やっている事は既存ツールの組み合わせで実現できる上に、PQzIIなら普通に備わっている機能なので あくまで参考程度という事で...。
 

2008-10-18

SIPの切り替え

先日 Operaが勝手にSIPを開くので横画面でtouchkeysip/gesture10keyを使っていると画面がSIPで覆われてしまうと書いたところ、NullKeyboardというものがあるよと教えて頂きました。
NullKeyboardは何もしないSIPということで、OperaがいくらSIPを開こうとしても安心という事ですね。
 
これにLPChgExecChangeSIP等を組み合わせれば解決とのアドバイスを頂いたのですが、せっかくなので簡単にSIPを指定できるようなツールを作ってみようと思いました。
 
SIPの選択自体は「Windows Mobileプログラミング徹底理解」のサンプルそのままで割と簡単にできたのですが、いざSIPを切り替えようとするとSIPが変な場所に描画されるという問題が発生しました。
どうも画面が切り替わったときに前のSIPの領域を覚えているような気もするのですが、原因は不明のままです。
 
単純に画面の向きに応じてSipSetCurrentIM()でSIPを切り替えているだけなのですが、何か見落としがあるのでしょうね。
static VOID ChgSip()
{
    DWORD dwData = 0L;
    if (SUCCEEDED(RegistryGetDWORD(SN_DISPLAYROTATION_ROOT, SN_DISPLAYROTATION_PATH, SN_DISPLAYROTATION_VALUE, &dwData))) {
        if (0L == dwData) {
            SipSetCurrentIM(&g_clsidPortrait);
        } else {
            SipSetCurrentIM(&g_clsidLandscape);
        }
        //SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, (WPARAM)SPI_SETSIPINFO, NULL);
    }
}

しかも、その後いろいろ調べていると 実はPQzIIにもSIPの切り替え機能があった事が発覚。 しかもこちらは問題なく動作します。
 
それなら「PQzIIでいいじゃん」とも思うのですが、スッキリしないのでもう少し調べてみようと思います。
 

2008-10-15

SIP

世間から大幅に遅れて touchkeysipgesture10key(の改造ファイル)をインストールしてみました。
 
gesture10keyについてはこちらの改造ファイルの中からg10k4を頂きました。
標準SIPだとスタイラスを使っても正確に押すことは難しかったのですが、これだけボタンが大きければ問題なく指タップできますね。
動作も予想以上に軽快で驚きました。もう少し練習すればもっと速く入力できるようになりそうです。
 
ただ、縦画面ではとても快適なのですが 横画面だと画面の大半をSIPが覆ってしまうようになりました。 特にOperaはテキスト入力しようとすると問答無用でSIPを開いてくれるので、肝心の入力エリアが見えなくなってしまいます。
 
横画面時にはSIPそのものを表示させない方法があれば便利だと思うのですが、何かいい方法は無いものでしょうか?
とりあえずこの辺りを読んで SIPの構造を勉強してみます。