[Go] Go语言MessageBox示例 →→→→→进入此内容的聊天室

来自 , 2021-01-07, 写在 Go, 查看 108 次.
URL http://www.code666.cn/view/3e441eec
  1. package main
  2.  
  3. import (
  4.        "syscall"
  5.        "unsafe"
  6.        "fmt"
  7. )
  8.  
  9.  
  10. func abort(funcname string, err int) {
  11.        panic(funcname + " failed: " + syscall.Errno(err).Error())
  12. }
  13.  
  14. var (
  15.        kernel32, _ = syscall.LoadLibrary("kernel32.dll")
  16.        getModuleHandle, _ = syscall.GetProcAddress(kernel32, "GetModuleHandleW")
  17.        
  18.        user32, _ = syscall.LoadLibrary("user32.dll")
  19.        messageBox, _ = syscall.GetProcAddress(user32, "MessageBoxW")
  20. )
  21.  
  22.  
  23. const (
  24.        MB_OK                      = 0x00000000
  25.        MB_OKCANCEL                = 0x00000001
  26.        MB_ABORTRETRYIGNORE        = 0x00000002
  27.        MB_YESNOCANCEL             = 0x00000003
  28.        MB_YESNO                   = 0x00000004
  29.        MB_RETRYCANCEL             = 0x00000005
  30.        MB_CANCELTRYCONTINUE       = 0x00000006
  31.        MB_ICONHAND                = 0x00000010
  32.        MB_ICONQUESTION            = 0x00000020
  33.        MB_ICONEXCLAMATION         = 0x00000030
  34.        MB_ICONASTERISK            = 0x00000040
  35.        MB_USERICON                = 0x00000080
  36.        MB_ICONWARNING             = MB_ICONEXCLAMATION
  37.        MB_ICONERROR               = MB_ICONHAND
  38.        MB_ICONINFORMATION         = MB_ICONASTERISK
  39.        MB_ICONSTOP                = MB_ICONHAND
  40.  
  41.        MB_DEFBUTTON1              = 0x00000000
  42.        MB_DEFBUTTON2              = 0x00000100
  43.        MB_DEFBUTTON3              = 0x00000200
  44.        MB_DEFBUTTON4              = 0x00000300
  45. )
  46.  
  47. func MessageBox(caption, text string, style uintptr) (result int) {
  48.        // var hwnd HWND
  49.        ret, _, callErr := syscall.Syscall6(uintptr(messageBox), 4,
  50.                0, // HWND
  51.                uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))), // Text
  52.                uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(caption))), // Caption
  53.                style, // type
  54.                0,
  55.                0)
  56.        if callErr != 0 {
  57.                abort("Call MessageBox", int(callErr))
  58.        }
  59.        result = int(ret)
  60.        return
  61. }
  62.  
  63. func main() {
  64.        defer syscall.FreeLibrary(kernel32)
  65.        defer syscall.FreeLibrary(user32)
  66.        
  67.        fmt.Printf("Retern: %d\n", MessageBox("Done Title", "This test is Done.", MB_YESNOCANCEL))
  68. }
  69.  
  70. func init() {
  71.        fmt.Print("Starting Up\n")
  72. }
  73.  
  74. //go/5581

回复 " Go语言MessageBox示例"

这儿你可以回复上面这条便签

captcha