w-zero3日和

星羽がW-ZERO3、W-ZERO3[es]、その他モバイル端末を設定した時の覚え書きや自作アプリの公開など。

ソース公開企画第3弾 TextCopy

2007年06月06日 | 自作アプリのソース
TextCopyのソースの整理が終わったので公開させていただきます。

テキストがコピー出来たかどうかの確認も出来る TextCopy

【ダウンロード】
  • TextCopyのソース(823KB)

    ◆IMEのオン/オフ◆
    TextCopyではキー入力をエミュレートするという方法でクリップボードへのコピーを実現しているため、最初にIMEをオフし、最後にIMEをオンに戻す必要があります。
    IMEのオン/オフを行うにはImmSetopenStatusを使います。
    ImmSetOpenStatus(NULL, FALSE) // IMEオフ
    ImmSetOpenStatus(NULL, TRUE) // IMEオン

    MSDN Library:ImmSetOpenStatus

    ATOKのオン/オフを行うには、さらにレジストリの書き換え、常駐監視も必要となってくるのですが、それはAtokChangerのソースを公開させていただいた時にご説明致します。

    ◆キー入力のエミュレート◆
    先ほども書いたようにTextCopyではキー入力をエミュレートすることでクリップボードへのコピーを行っているのですが、それを実現する関数がkeybd_eventです。
    例えば、
    keybd_event(0x11, 0, 0, 0); // down
    keybd_event(0x43, 0, 0, 0); // down
    keybd_event(0x43, 0, KEYEVENTF_KEYUP, 0); // up
    keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0); // up

    これでCTRLキーとCキーを押した状態、つまり「コピー」が出来ます。
    MSDN Library:keybd_event

    keybd_eventは第1引数にエミュレートしたいキーコード、第3引数にどの状態をエミュレートするかを指定します。
    0x11は「CTRL」、0x43は「C」のキーコードを表しています。
    各キーコードはこちらのページが参考になります。
    こちらのページに書かれてあるのはWindowsの場合なので、WindowsMobileの場合と少し異なる部分もあります。
    また、Gzhさんがキーコード調査用ツールを公開して下さっていますので、そちらで調べるのもいいと思います。(私もよく利用させてもらってます)
    NICQUE Freeware:PQz_CHECK

    キーの場合もマウスと同様に「押し込む→離す」で1動作となりますので、1回キーをエミュレートするためにはdownとupの2行必要になります。
    keybd_event(0x11, 0, 0, 0); // down
    keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0); // up


    今回の場合は「CTRL+C」キーのエミュレートをしているわけですが、その場合にどのような順番でキーコードが発行されているかをPQz_CHECKで見てみると、

    (最初の0x11はCTRLキーを押した時のものなので、その次にCキーを押した時に表示されたものがCTRL+Cキーとして発行されたキーコードです)
    という感じになるので、この通りにkeybd_eventでキーコードを発行させることにより、「CTRL+C」をエミュレートすることが出来ます。

    ◆クリップボードの操作◆
    クリップボードを操作する前にはOpenClipboard、操作する前にはEmptyClipboardで中身を空にして、操作し終えたら必ずCloseClipboardでクリップボードを閉じて下さい。
    今回はキーエミュレートでクリップボードに内容をコピーしているので、それ程神経質になることはありませんが、ちゃんとCloseClipboardをしないとシステムに不具合が生じる可能性はあると思います。
    MSDN Library:OpenClipboard
    MSDN Library:EmptyClipboard
    MSDN Library:CloseClipboard

    また、キーエミュレートを利用しないで、自分のアプリ内で利用した文字列などをクリップボードにコピーする場合には、文字列をクリップボードに格納する分のメモリを確保する必要が出てくるため、利用し終えた後に、利用したメモリの開放やCloseClipboardで閉じるのを忘れてしまうと、メモリリークを起こしますので、本格的にクリップボードを操作する際は十分ご注意下さい。


  • 最新の画像もっと見る