panic: Failed to find ShellExecuteA procedure in user32.dll: The specified proce dure could not be found.
时间: 2024-02-29 16:54:11 浏览: 126
user32.dll
如果 `ShellExecuteA` 函数在你的系统上也不可用,那么你可以尝试使用 `CreateProcess` 函数来打开一个浏览器并访问指定的网址。代码如下所示:
```go
package main
import (
"syscall"
"unsafe"
)
func main() {
url := "https://www.example.com"
user32 := syscall.MustLoadDLL("user32.dll")
MessageBox := user32.MustFindProc("MessageBoxW")
kernel32 := syscall.MustLoadDLL("kernel32.dll")
CreateProcess := kernel32.MustFindProc("CreateProcessW")
// 打开一个弹窗
MessageBox.Call(0,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("Message"))),
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("Title"))),
0)
// 打开浏览器并访问网址
var si = new(syscall.StartupInfo)
var pi = new(syscall.ProcessInformation)
err := CreateProcess.Call(
0,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("cmd.exe /c start "+url))),
0,
0,
false,
syscall.CREATE_DEFAULT_ERROR_MODE,
0,
0,
uintptr(unsafe.Pointer(si)),
uintptr(unsafe.Pointer(pi)),
).Error()
if err != nil && err.Error() != "The operation completed successfully." {
panic(err)
}
}
```
这段代码中,我们使用 `CreateProcess` 函数来创建一个新的进程,并在新进程中运行 `cmd.exe` 命令来打开指定的网址。我们使用 `syscall.StartupInfo` 和 `syscall.ProcessInformation` 结构体来指定新进程的属性,例如工作目录和标准输入输出流等。
阅读全文