前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >再议-Golang语言MessageBox用法实例

再议-Golang语言MessageBox用法实例

作者头像
李海彬
发布2018-03-21 11:22:54
2.3K0
发布2018-03-21 11:22:54
举报
文章被收录于专栏:Golang语言社区Golang语言社区

曾几何时,大多数人最先接触电脑的时候,windows是我们第一次的尝试遨游网络世界的媒介;作为IT民工加屌丝的我也是一样。现在从C++转换到GO语言,自己也同样会做些小软件,但是现在的GO并没有提供第三方包,以前有个开发包win的;但是现在网路已经找不到踪迹了,所以就打算自己实现下,编程除了工作就是爱好了,既然你我喜欢他,就把他做好尽量完美。

以下代码是windows的API的调用思路,共参考,后面我会做个QQ刷屏的软件,因为windows用MFC我实现过,之前发布到了VC驿站的原创文章如图:

QQ都是我的,那都是N多年前的事情了,我做过很多软件和视频教程。

代码语言:javascript
复制
package main

import (

       "syscall"

       "unsafe"

       "fmt"

)

func abort(funcname string, err int) {

       panic(funcname + " failed: " + syscall.Errno(err).Error())

}

var (

       kernel32, _ = syscall.LoadLibrary("kernel32.dll")

       getModuleHandle, _ = syscall.GetProcAddress(kernel32, "GetModuleHandleW")

       user32, _ = syscall.LoadLibrary("user32.dll")

       messageBox, _ = syscall.GetProcAddress(user32, "MessageBoxW")

)

const (

       MB_OK                      = 0x00000000

       MB_OKCANCEL                = 0x00000001

       MB_ABORTRETRYIGNORE        = 0x00000002

       MB_YESNOCANCEL             = 0x00000003

       MB_YESNO                   = 0x00000004

       MB_RETRYCANCEL             = 0x00000005

       MB_CANCELTRYCONTINUE       = 0x00000006

       MB_ICONHAND                = 0x00000010

       MB_ICONQUESTION            = 0x00000020

       MB_ICONEXCLAMATION         = 0x00000030

       MB_ICONASTERISK            = 0x00000040

       MB_USERICON                = 0x00000080

       MB_ICONWARNING             = MB_ICONEXCLAMATION

       MB_ICONERROR               = MB_ICONHAND

       MB_ICONINFORMATION         = MB_ICONASTERISK

       MB_ICONSTOP                = MB_ICONHAND

       MB_DEFBUTTON1              = 0x00000000

       MB_DEFBUTTON2              = 0x00000100

       MB_DEFBUTTON3              = 0x00000200

       MB_DEFBUTTON4              = 0x00000300

)

func MessageBox(caption, text string, style uintptr) (result int) {

       // var hwnd HWND

       ret, _, callErr := syscall.Syscall6(uintptr(messageBox), 4,

               0, // HWND

               uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))), // Text

               uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(caption))), // Caption

               style, // type

               0,

               0)

       if callErr != 0 {

               abort("Call MessageBox", int(callErr))

       }

       result = int(ret)

       return

}

func main() {

       defer syscall.FreeLibrary(kernel32)

       defer syscall.FreeLibrary(user32)

       fmt.Printf("Retern: %d\n", MessageBox("Done Title", "This test is Done.", MB_YESNOCANCEL))

}

func init() {

       fmt.Print("Starting Up\n")

}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档