【Golang】调用syscall调用windows dll弹窗
196 字
1 分钟
【Golang】调用syscall调用windows dll弹窗

package mainimport ( "fmt" "syscall" "time" "unsafe")
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 abort(funcname string, err syscall.Errno) { panic(funcname + " failed: " + err.Error())}
var ( user32, _ = syscall.LoadLibrary("user32.dll") messageBox, _ = syscall.GetProcAddress(user32, "MessageBoxW"))
func IntPtr(n int) uintptr { return uintptr(n)}
func StrPtr(s string) uintptr { return uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s)))}
func MessageBox(caption, text string, style uintptr) (result int) { ret, _, callErr := syscall.Syscall9(messageBox, 4, 0, StrPtr(text), StrPtr(caption), style, 0, 0, 0, 0, 0) if callErr != 0 { abort("Call MessageBox", callErr) } result = int(ret) return}
func ShowMessage2(title, text string) { user32 := syscall.NewLazyDLL("user32.dll") MessageBoxW := user32.NewProc("MessageBoxW") MessageBoxW.Call(IntPtr(0), StrPtr(text), StrPtr(title), IntPtr(0))}
func main() { defer syscall.FreeLibrary(user32)
num := MessageBox("Title1", "test1", MB_YESNOCANCEL) fmt.Printf("Get Retrun Value Before MessageBox %d\n", num) ShowMessage2("Title2", "test2") time.Sleep(3 * time.Second)}
func init() { fmt.Print("start...\n")}支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
【Golang】Golang在Windows上获取管理员权限
Golang笔记2019-04-11
2
【Golang】GO项目结构
Golang笔记2019-06-25
3
【Golang】使用CGO交叉编译
Golang笔记2020-04-08
4
【Golang】命令行传递参数
Golang笔记2018-09-13
5
【Golang】1.18泛型初步理解
Golang笔记2022-04-18
随机文章随机推荐















加载更多…