再议-Golang语言MessageBox用法实例
时间:2022-05-05
本文章向大家介绍再议-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: %dn", MessageBox("Done Title", "This test is Done.", MB_YESNOCANCEL))
}
func init() {
fmt.Print("Starting Upn")
}
- 27.反射,类加载器,设计模式,jdk新特性
- SDP(6):分布式数据库运算环境- Cassandra-Engine
- 配置dg broker的问题分析及修复(r6笔记第84天)
- SDP(5):ScalikeJDBC- JDBC-Engine:Streaming
- SDP(4):ScalikeJDBC- JDBC-Engine:Updating
- SDP(3):ScalikeJDBC- JDBC-Engine:Fetching
- SDP(2):ScalikeJDBC-Connection Pool Configuration
- 使用外部表关联MySQL数据到Oracle(r6笔记第100天)
- 使用selenium模块模拟浏览器爬去网页,并进行点击定位内容笔记
- python 报错'gbk' codec can't encode character 'ue5d1' in position 0:
- python文件打开方式详解——a、a+、r+、w+区别
- 三封报警邮件的分析(r6笔记第95天)
- HCTF2017 部分 Web 出题思路详解
- 基于springboot+kotlin+gradle构建的框架的坑
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言犯罪率回归模型报告Regression model on crimerate report
- leetcode树之从根到叶的二进制数之和
- 超冗余机器人运动控制:蛇形机器人 & 8自由度平面机械臂
- Linux Ubuntu / CentOS / MacOS 等系统安装使用 MTR 以及阅读分析 MTR 报告教程
- Helm3部署安装
- Vue核心知识:computed、methods和watch的区别
- 基于keras平台CNN神经网络模型的服装识别分析
- springboot结合mysql配置
- 3分钟短文:Laravel模板,也支持一般编程语言的语法结构了
- Qt音视频开发26-ffmpeg播放器
- 手把手教你 javap 反编译分解代码,授人以鱼不如授人以渔
- LoRa终端设备ASR6505之段式LCD
- redis源码之list结构的实现
- redis源码之dict
- LoRa终端设备ASR6505之ADC采样