双击打开避免一闪而逝敲回车,命令行自动忽略敲回车,你值得拥有。

jan-bar · · 633 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

废话不多说直接上代码,很多人在写程序时双击打开都会一闪而逝,因此都会在程序执行最后加上获取输入的代码。但是命令行时又不想再敲一次回车。下面代码就能解决你的烦恼,原理就是判断父进程是否为cmd.exe,如果不是则说明不是命令行打开,则加上获取输入回车。 ```go package main import ( "fmt" "syscall" "unsafe" ) func main() { if name, err := getParentProcessName(); err == nil && name != "cmd.exe" { defer fmt.Scanln() // 不是命令行时避免一闪而逝 } fmt.Println("hello word!") } func getParentProcessName() (string, error) { snapshot, err := syscall.CreateToolhelp32Snapshot(syscall.TH32CS_SNAPPROCESS, 0) if err != nil { return "", err } defer syscall.CloseHandle(snapshot) var procEntry syscall.ProcessEntry32 procEntry.Size = uint32(unsafe.Sizeof(procEntry)) if err = syscall.Process32First(snapshot, &procEntry); err != nil { return "", err } var ( pid = uint32(syscall.Getpid()) pName = make(map[uint32]string, 32) parentId = uint32(1<<32 - 1) ) for { pName[procEntry.ProcessID] = syscall.UTF16ToString(procEntry.ExeFile[:]) if procEntry.ProcessID == pid { parentId = procEntry.ParentProcessID } if s, ok := pName[parentId]; ok { return s, nil } err = syscall.Process32Next(snapshot, &procEntry) if err != nil { return "", err } } } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

633 次点击  ∙  1 赞  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传