2022/09/02
クリップボードを扱うスクリプトを公開します
Windows10のコマンドプロンプトでclip.exeというコマンドがありますが、いやらしい事にクリップボードにデータを書き込む事が出来ても読み込む事が出来ません。
PowerShellではクリップボードの読み書き出来ますが、PowerShellのスクリプトを実行出来るようにするのは恐ろしくて出来ないし、PowerShellでプログラミンングを行うぐらいなら死んだほうがましだと思う人もいらっしゃるでしょう。
そこで、いつものように老爺心を発揮し、恐らくRuby2.x全てでクリップボードをファイル経由で読み書き出来ると思われるスクリプトを公開しますので、恐れを知らない人はこちらのスクリプトをご自由にお使いください。
尚、このスクリプトを使って後悔するような事が起きても私は何の責任も持てませんので、利用は完全自己責任でお願いしますが、動作がおかしい場合はコメントで連絡していただければ、出来るだけ誠意を持って対応したいと思います。因みに、Ruby2.xをWindowsPCにインストールしていない人は、確認は出来ていないですが、
の2.xの最新版(64bit版or32bit版)を完全自己責任でインストールして試してください。
require 'Win32API'
Win32API.new('user32','OpenClipboard',['I'],'I').Call(0)
handle=Win32API.new('user32','GetClipboardData',['I'],'I').Call(1)
if handle.to_i>0
cdata=Win32API.new('kernel32','GlobalLock',['I'],'P').Call(handle)
wdata=cdata.to_s.force_encoding("Windows-31J").encode("UTF-8").delete("\r")
Win32API.new('kernel32','GlobalUnlock',['I'],'I').Call(handle)
Win32API.new('user32','CloseClipboard',[]).Call()
else wdata="";end
File.open(ARGV[0],"w"){|f|f.write(wdata)}
exit(0)
#UTF-8のファイルを読み込んでクリップボードに書き込み,第1引数はファイル名(setclip.rb)
require 'Win32API'
Win32API.new('user32','OpenClipboard',['I'],'I').Call(0)
File.open(ARGV[0]){|f|$fdata=f.read}
sdata=$fdata.force_encoding("UTF-8").encode("Windows-31J")
handle=Win32API.new('kernel32','GlobalAlloc','II','I').call(0x42,sdata.bytesize+1)
cdata=Win32API.new('kernel32','GlobalLock',['I'],'P').call(handle)
Win32API.new('msvcrt','strcpy','IP','I').call(cdata,sdata)
Win32API.new('user32','EmptyClipboard',[]).call()
Win32API.new('user32','SetClipboardData','II','I').call(1,handle)
Win32API.new('user32','CloseClipboard',[]).Call()
require 'Win32API'
Win32API.new('user32','OpenClipboard',['I'],'I').Call(0)
File.open(ARGV[0]){|f|$fdata=f.read}
sdata=$fdata.force_encoding("UTF-8").encode("Windows-31J")
handle=Win32API.new('kernel32','GlobalAlloc','II','I').call(0x42,sdata.bytesize+1)
cdata=Win32API.new('kernel32','GlobalLock',['I'],'P').call(handle)
Win32API.new('msvcrt','strcpy','IP','I').call(cdata,sdata)
Win32API.new('user32','EmptyClipboard',[]).call()
Win32API.new('user32','SetClipboardData','II','I').call(1,handle)
Win32API.new('user32','CloseClipboard',[]).Call()
exit(0)
追記:
クリップボードを扱うスクリプトを公開します(2)も見てください。
追記2:
UTF-8からWindows-31Jへの変換で一部の文字コードでエラーが発生する事が分かりましたので、もしこのスクリプトを使われる人は、
を参考にして手直ししてください。
追記3:
Ruby2.6系ではRuby2.6.6までしかこのスクリプトは機能しないようなので、このスクリプトを使用される方は、Ruby2.6.6の64bit版でお試しください。- 関連記事
-
- 私の車のオイル交換法について
- その手にはノラヌコさんがその手に乗りました(泣)
- HDDのPCでRedmineの起動を高速化する方法
- RedmineをWindowsPCにインストールする方法
- マウスのチャタリングが簡単に直りました!!
- PCのCPUのグリスを塗り直しました!!
- クリップボードを扱うスクリプトを公開します(2)
- クリップボードを扱うスクリプトを公開します
- The Matrix Resurrectionsは面白かったっすよ!!
- その手にはノラヌコさん?
- YAMAHA NS10MMの音質アップについて(3)
- HDD搭載のWindows10PCの高速化について
- YAMAHA NS10MMの音質アップについて(2)
- YAMAHA NS10MMの音質アップについて
- Equalizer APOを試して見ました
コメント