专栏首页Golang语言社区再议-Golang语言MessageBox用法实例

再议-Golang语言MessageBox用法实例

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

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

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

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")

}

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Golang中Interface类型详解

    本文章翻译自《Let's learn Go》的“Interfaces: the awesomesauce of Go”一节 原文地址:http://go-bo...

    李海彬
  • Golang中Interface类型详解

    文 | Zuozuohao 共 14470 字,阅读需 36 分钟 本文章翻译自《Let's learn Go》的“Interfaces: the awesom...

    李海彬
  • Golang中Interface类型详解

    本文章翻译自《Let's learn Go》的“Interfaces: the awesomesauce of Go”一节 原文地址:http://go-boo...

    李海彬
  • 【项目实战】自监控-05-弹窗交互

    系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3....

    zishendianxia
  • 聊聊HotSpot VM的Native Memory Tracking

    本文主要研究一下HotSpot VM的Native Memory Tracking

    codecraft
  • 在裸机与虚拟机上运行容器:性能和优点

    根据最近的研究,Docker正在像野火一样蔓延,特别是在企业中,它的采用率从2015年的13%上升到了27%以上;另有35%的公司计划使用Docker。根据这些...

    首席架构师智库
  • 磁盘读写速率测试

    逻辑层业务机器上如果有数据落地处理,可能会考虑的一个因素就是磁盘读写性能是否能满足要求,于是有必要进行测量。本文将介绍一些具体的测试操作。

    吕力
  • 基于JavaAgent的全链路监控四《JVM内存与GC信息》

    案例简述 除了监控java方法的执行耗时,我们还需要获取应用实例的jvm内存与gc信息,以实时把控我们的服务器性能是否在安全范围。监控jvm内存与gc信息是非常...

    小傅哥
  • 聊聊jvm的StringTable及SymbolTable

    codecraft
  • westos_exam_3

    执行lab-resetvm还原虚拟机,以下所有操作均在虚拟机上完成: 1. 按以下条件定制kickstart文件test.cfg,并使用apache发布: ...

    py3study

扫码关注云+社区

领取腾讯云代金券