# 参考: https://github.com/janlelis/clip ... lipboard/windows.rb
module Clipboard
# kernel32
# (hMem: HGLOBAL) -> LPVOID
@GlobalLock = Win32API.new("kernel32", "GlobalLock",%(p), %(p))
@GlobalUnlock = Win32API.new("kernel32", "GlobalUnlock",%(l), %(l))
@GlobalSize = Win32API.new("kernel32", "GlobalSize",%(l), %(l))
@WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
@GetACP = Win32API.new("kernel32", "GetACP", %(v), %(i))
# Maps a character string to a UTF-16 (wide character) string. The character string is not necessarily from a multibyte character set.
@MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
@CopyMemory = Win32API.new('msvcrt', 'memcpy', %(p, p, l), %(p)) #Win32API.new('kernel32', 'CopyMemory', %(p, p, l), %(v))
# user32
# (hWndNewOwner: HWND) -> BOOL
@OpenCLipboard = Win32API.new("user32", "OpenClipboard",%(l), %(l))
@CloseClipboard = Win32API.new("user32", "CloseClipboard",'', %(l))
# (uFormat: UINT) -> HANDLE
@GetClipboardData = Win32API.new("user32", "GetClipboardData",%(i), %(l))
@FindWindow = Win32API.new("user32", "FindWindow", 'pp', 'i')
CF_TEXT = 1
CF_UNICODETEXT = 13 # UTF-16
CP_UTF8 = 65001
CP_ACP = 0
#CP_MACCP = 2
CP_THREAD_ACP = 3
CP_GBK = 936
# CF_UNICODETEXT -> WideCharToMultiByte
def self.GetContent(limit=3*6)
begin
if @OpenCLipboard.call(0) != 0
hClip = @GetClipboardData.call(CF_UNICODETEXT)
if hClip && hClip != 0
pData = @GlobalLock.call(hClip)
size = @GlobalSize.call(hClip)
#@CopyMemory.call(buf, pData, size)
#acp = @GetACP.call()
#p acp
#p CP_THREAD_ACP
#utf16Len = @MultiByteToWideChar.call(CP_ACP, 0, pData, size, nil, 0)
#p utf16Len
#utf16Str = "\0" * (limit * 2)
#@MultiByteToWideChar.call(CP_ACP, 0, pData, size, utf16Str, limit)
str = "\0" * (limit < size/2 ? limit : size)
@WideCharToMultiByte.call (CP_UTF8, 0, pData, size/2, str, limit, nil, nil)
#str.delete!("\0")
p str
@GlobalUnlock.call(hClip)
end
@CloseClipboard.call()
end
return str || ""
#rescue
# return nil
end
end
end
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |