user32.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //go:build windows
  2. package yu_win
  3. import "syscall"
  4. var IsClipboardFormatAvailable Address
  5. var OpenClipboard Address
  6. var CloseClipboard Address
  7. var EmptyClipboard Address
  8. var GetClipboardData Address
  9. var SetClipboardData Address
  10. var MessageBoxW Address
  11. func init() {
  12. j_mod, _ := syscall.LoadLibrary("user32.dll")
  13. j_h, _ := syscall.GetProcAddress(j_mod, "IsClipboardFormatAvailable")
  14. IsClipboardFormatAvailable = Address(j_h)
  15. j_h, _ = syscall.GetProcAddress(j_mod, "OpenClipboard")
  16. OpenClipboard = Address(j_h)
  17. j_h, _ = syscall.GetProcAddress(j_mod, "CloseClipboard")
  18. CloseClipboard = Address(j_h)
  19. j_h, _ = syscall.GetProcAddress(j_mod, "EmptyClipboard")
  20. EmptyClipboard = Address(j_h)
  21. j_h, _ = syscall.GetProcAddress(j_mod, "GetClipboardData")
  22. GetClipboardData = Address(j_h)
  23. j_h, _ = syscall.GetProcAddress(j_mod, "SetClipboardData")
  24. SetClipboardData = Address(j_h)
  25. j_h, _ = syscall.GetProcAddress(j_mod, "MessageBoxW")
  26. MessageBoxW = Address(j_h)
  27. }
  28. func MessageBox(title string, text string) {
  29. MessageBoxW.Call(0, S{Unicode, text}, S{Unicode, title}, 0)
  30. }
  31. const (
  32. // 摘自:https://learn.microsoft.com/zh-cn/windows/win32/dataxchg/standard-clipboard-formats
  33. CF_BITMAP = 2 // 位图 (HBITMAP) 的句柄。
  34. CF_DIB = 8 // 包含 BITMAPINFO 结构的内存对象,后跟位图位。
  35. CF_DIBV5 = 17 // 包含 BITMAPV5HEADER 结构的内存对象,后跟位图颜色空间信息和位图位。
  36. CF_DIF = 5 // Software Arts 的数据交换格式。
  37. CF_DSPBITMAP = 0x0082 // 与专用格式关联的位图显示格式。 hMem 参数必须是可以以位图格式显示的数据的句柄,而不是专用格式的数据。
  38. CF_DSPENHMETAFILE = 0x008E // 与专用格式关联的增强型图元文件显示格式。 hMem 参数必须是可以以增强型图元文件格式显示的数据的句柄,而不是专用格式的数据。
  39. CF_DSPMETAFILEPICT = 0x0083 // 与专用格式关联的图元文件图片显示格式。 hMem 参数必须是可以以图元文件图片格式显示的数据的句柄,而不是专用格式的数据。
  40. CF_DSPTEXT = 0x0081 // 与专用格式关联的文本显示格式。 hMem 参数必须是可以以文本格式显示的数据的句柄,而不是专用格式的数据。
  41. CF_ENHMETAFILE = 14 // 增强型图元文件的句柄 (HENHMETAFILE) 。
  42. CF_GDIOBJFIRST = 0x0300 // 应用程序定义的 GDI 对象剪贴板格式的整数值范围的开头。 范围的末尾为 CF_GDIOBJLAST。清空剪贴板时,不会使用 GlobalFree 函数自动删除与此范围内剪贴板格式关联的句柄。 此外,在此范围内使用值时, hMem 参数不是 GDI 对象的句柄,而是由 GlobalAlloc 函数使用 GMEM_MOVEABLE 标志分配的句柄。
  43. CF_GDIOBJLAST = 0x03FF // 请参阅 CF_GDIOBJFIRST。
  44. CF_HDROP = 15 // 类型 HDROP 的句柄,用于标识文件列表。 应用程序可以通过将句柄传递给 DragQueryFile 函数来检索有关文件的信息。
  45. CF_LOCALE = 16 // 数据是 HGLOBAL () 与剪贴板中的文本关联的区域设置标识符 (LCID) 的句柄。 关闭剪贴板时,如果剪贴板包含 CF_TEXT 数据但没有 CF_LOCALE 数据,系统会自动将 CF_LOCALE 格式设置为当前输入语言。 可以使用 CF_LOCALE 格式将不同的区域设置与剪贴板文本相关联。从剪贴板粘贴文本的应用程序可以检索此格式,以确定用于生成文本的字符集。请注意,剪贴板不支持多个字符集中的纯文本。 若要实现此目的,请改用带格式的文本数据类型,例如 RTF。系统使用与 CF_LOCALE 关联的代码页从 CF_TEXT 隐式转换为 CF_UNICODETEXT。 因此,使用正确的代码页表进行转换。
  46. CF_METAFILEPICT = 3 // METAFILEPICT 结构定义的图元文件图片格式的句柄。 通过 DDE 传递 CF_METAFILEPICT 句柄时,负责删除 hMem 的应用程序还应释放 CF_METAFILEPICT 句柄引用的图元文件。
  47. CF_OEMTEXT = 7 // 包含 OEM 字符集中字符的文本格式。 每行以回车符/换行符 (CR-LF) 组合结束。 null 字符表示数据结束。
  48. CF_OWNERDISPLAY = 0x0080 // 所有者显示格式。 剪贴板所有者必须显示和更新剪贴板查看器窗口,并接收 WM_ASKCBFORMATNAME、 WM_HSCROLLCLIPBOARD、 WM_PAINTCLIPBOARD、 WM_SIZECLIPBOARD和 WM_VSCROLLCLIPBOARD 消息。 hMem 参数必须为 NULL。
  49. CF_PALETTE = 9 // 调色板的句柄。 每当应用程序在依赖于或假定调色板的剪贴板中放置数据时,它也应该将调色板放在剪贴板上。如果剪贴板包含 CF_PALETTE (逻辑调色板) 格式的数据,则应用程序应使用 SelectPalette 和 RealizePalette 函数实现 (剪贴板中) 任何其他数据与该逻辑调色板进行比较。显示剪贴板数据时,剪贴板始终使用剪贴板上采用 CF_PALETTE 格式的任何对象作为其当前调色板。
  50. CF_PENDATA = 10 // Microsoft Windows for Pen Computing 的笔扩展的数据。
  51. CF_PRIVATEFIRST = 0x0200 // 专用剪贴板格式的整数值范围的开头。 范围以 CF_PRIVATELAST结尾。 与专用剪贴板格式关联的句柄不会自动释放;剪贴板所有者必须释放此类句柄,通常是为了响应 WM_DESTROYCLIPBOARD 消息。
  52. CF_PRIVATELAST = 0x02FF // 请参阅 CF_PRIVATEFIRST。
  53. CF_RIFF = 11 // 表示的音频数据比以 CF_WAVE 标准波形格式表示的音频数据更为复杂。
  54. CF_SYLK = 4 // Microsoft 符号链接 (SYLK) 格式。
  55. CF_TEXT = 1 // 文本格式。 每行以回车符/换行符 (CR-LF) 组合结束。 null 字符表示数据结束。 将此格式用于 ANSI 文本。
  56. CF_TIFF = 6 // 标记图像文件格式。
  57. CF_UNICODETEXT = 13 // Unicode 文本格式。 每行以回车符/换行符 (CR-LF) 组合结束。 null 字符表示数据结束。
  58. CF_WAVE = 12 // 表示其中一种标准波形的音频数据,例如 11 kHz 或 22 kHz PCM。
  59. )