みやもとです。
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 で取得できてます。どこかで操作をミスってるということは
> ないでしょうか?
>
> 特にクリップボードからの取り出しをどういうアプリでどのような操作で
> 行っているのか気になります。
>
> --
> 木村浩一
>
>
>