module Clipboard::Windows
Constants
- CF_TEXT
- CF_UNICODETEXT
- GMEM_MOVEABLE
Public Instance Methods
clear(**)
click to toggle source
# File lib/clipboard/windows.rb, line 62 def clear(**) User32.empty if User32.open(nil) true ensure User32.close end
copy(data_to_copy, **)
click to toggle source
# File lib/clipboard/windows.rb, line 70 def copy(data_to_copy, **) if User32.open(nil) User32.empty data = data_to_copy.encode(Encoding::UTF_16LE) # TODO: catch bad encodings data << 0 handler = Kernel32.alloc( GMEM_MOVEABLE, data.bytesize ) pointer_to_data = Kernel32.lock( handler ) begin pointer_to_data.write_string( data ) ensure Kernel32.unlock( handler ) end User32.set( CF_UNICODETEXT, handler ) else # don't touch anything Utils.popen "clip", data_to_copy # depends on clip (available by default since Vista) end true ensure User32.close end
paste(_ = nil, **)
click to toggle source
see www.codeproject.com/KB/clipboard/archerclipboard1.aspx
# File lib/clipboard/windows.rb, line 46 def paste(_ = nil, **) return String.new unless User32.open(nil) hclip = User32.get( CF_UNICODETEXT ) return String.new if hclip.null? pointer_to_data = Kernel32.lock( hclip ) # Windows Unicode is ended by two null bytes, so get the whole string size = Kernel32.size( hclip ) data = pointer_to_data.read_string( size - 2 ) data.force_encoding(Encoding::UTF_16LE) ensure Kernel32.unlock(hclip) if hclip && !hclip.null? User32.close end