みやもとです。

RubyはActiveScriptRuby1.8.6で、
1.8.6にはクリップボードライブラリがない?ようなので
http://homepage1.nifty.com/a_nakata/ruby/のclipbrd.rbを使用しています。

SJIS→EUC変換はKconvライブラリで変換して、clipbrd.rbの
  def SetText(text)
    if (text == nil) || (text == "")
      return
    end
    if $OpenClipboard.Call(0) != 0
      $EmptyClipboard.Call();
      len = $lstrlen.Call(text);
      hmem = $GlobalAlloc.Call(GMEM_DDESHARE, len+1);
      pmem = $GlobalLockI.Call(hmem);
      $lstrcpyIP.Call(pmem, text);
      $SetClipboardData.Call(CF_TEXT, hmem);
      $GlobalUnlock.Call(hmem);
      $CloseClipboard.Call;
    end
  end
end
関数に引数渡ししています。

クリップボードからの取り出しは
Windows用フリーのテキストエディタに右クリックの貼り付けメニューで
取り出しています。


----- Original Message ----- 
From: "KIMURA Koichi" <kimura.koichi / canon.co.jp>
To: "ruby mailing list" <ruby-list / ruby-lang.org>
Sent: Wednesday, June 04, 2008 2:57 PM
Subject: [ruby-list:45003] Re: EUC文字列のWindowsクリップボード書き込みについて


> 木村です。
>
> On Wed, 4 Jun 2008 12:59:19 +0900
> "Miyamoto Hiroaki" <miyamoto.hiroak / jp.fujitsu.com> wrote:
>
>> みやもとと申します。
>>
>> Excelのデータを元にUnixファイルを作成するため、
>> SJIS→EUC変換した文字列をWindowsクリップボード書き込みしたいのですが
>> CF_TEXTフォーマットで、SetClipboardDataすると文字化けします。
>
> 具体的にどういうコードで行ったのか見せてもらえますか?
>
> Cで、
>
> #include <stdio.h>
> #define WINDOWS_LEAN_AND_MEAN
> #include <windows.h>
>
> int
> main()
> {
>
>    if (IsClipboardFormatAvailable(CF_TEXT)) {
>        HANDLE hData;
>        char *pszData;
>
>        OpenClipboard(NULL);
>        hData = GetClipboardData(CF_TEXT);
>        pszData = (char *)GlobalLock(hData);
>        puts(pszData);
>        GlobalUnlock(hData);
>        CloseClipboard();
>
>    }
>    return 0;
> }
>
> こういうのをでっち上げておいて、
>
> echo こんにちは|nkf -e|putclip
>
> のようにしてクリップボードに送り込んだのを取り出してみても
> ちゃんとEUC-JP で取得できてます。どこかで操作をミスってるということは
> ないでしょうか?
>
> 特にクリップボードからの取り出しをどういうアプリでどのような操作で
> 行っているのか気になります。
>
> -- 
> 木村浩一
>
>
>