查看窗口名 调用dll setForegroundWindow
- package main
- import (
- "fmt"
- "log"
- "syscall"
- "unsafe"
- )
- var (
- user32 = syscall.MustLoadDLL("user32.dll")
- procEnumWindows = user32.MustFindProc("EnumWindows")
- procGetWindowTextW = user32.MustFindProc("GetWindowTextW")
- )
- func EnumWindows(enumFunc uintptr, lparam uintptr) (err error) {
- r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(lparam), 0)
- if r1 == 0 {
- if e1 != 0 {
- err = error(e1)
- } else {
- err = syscall.EINVAL
- }
- }
- return
- }
- func GetWindowText(hwnd syscall.Handle, str *uint16, maxCount int32) (len int32, err error) {
- r0, _, e1 := syscall.Syscall(procGetWindowTextW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(str)), uintptr(maxCount))
- len = int32(r0)
- if len == 0 {
- if e1 != 0 {
- err = error(e1)
- } else {
- err = syscall.EINVAL
- }
- }
- return
- }
- func FindWindow(title string) (syscall.Handle, error) {
- var hwnd syscall.Handle
- cb := syscall.NewCallback(func(h syscall.Handle, p uintptr) uintptr {
- b := make([]uint16, 200)
- _, err := GetWindowText(h, &b[0], int32(len(b)))
- if err != nil {
- // ignore the error
- return 1 // continue enumeration
- }
- fmt.Printf("%s\n", syscall.UTF16ToString(b))
- if syscall.UTF16ToString(b) == title {
- // note the window
- hwnd = h
- return 0 // stop enumeration
- }
- return 1 // continue enumeration
- })
- EnumWindows(cb, 0)
- if hwnd == 0 {
- return 0, fmt.Errorf("No window with title '%s' found", title)
- }
- return hwnd, nil
- }
- func main() {
- //const title = "OpenTTD"
- //const title = "FileZilla FTP Client"
- const title = "OpenTTD"
- h, err := FindWindow(title)
- if err != nil {
- log.Fatal(err)
- }
- fmt.Printf("Found '%s' window: handle=0x%x\n", title, h)
- }
Go/Golang Trying to get window information via syscall. (As in EnumWindows, etc.) - Stack Overflow - Google Chrome
任务管理器
OpenTTD 1.3.0
openttd.exe 属性
filezilla.exe 属性
OfficePowerManagerWindow
game_manager [Y:\dev\game_manager] - C:\Go\src\os\exec\exec.go - GoLand
- CandidateWindow
- Mode Indicator
- Mode Indicator
- 电池指示器
- Network Flyout
- Mode Indicator
- Mode Indicator
- go_win_api [Y:\dev\go_win_api] - ...\m.go - GoLand
- OpenTTD 1.3.0
- Found 'OpenTTD 1.3.0' window: handle=0x610d6
- CandidateWindow
- Mode Indicator
- Mode Indicator
- 电池指示器
- Network Flyout
- Mode Indicator
- Mode Indicator
- go_win_api [Y:\dev\go_win_api] - ...\m.go - GoLand
- OpenTTD 1.3.0
- Get Retrun Value Before setForegroundWindow Invoked: %!s(uintptr=1)
- package main
- import (
- "fmt"
- "log"
- "syscall"
- "unsafe"
- )
- var (
- user32 = syscall.MustLoadDLL("user32.dll")
- procEnumWindows = user32.MustFindProc("EnumWindows")
- procGetWindowTextW = user32.MustFindProc("GetWindowTextW")
- user32_b, _ = syscall.LoadLibrary("user32.dll")
- setForegroundWindow, _ = syscall.GetProcAddress(user32_b, "SetForegroundWindow")
- )
- func EnumWindows(enumFunc uintptr, lparam uintptr) (err error) {
- r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(lparam), 0)
- if r1 == 0 {
- if e1 != 0 {
- err = error(e1)
- } else {
- err = syscall.EINVAL
- }
- }
- return
- }
- func GetWindowText(hwnd syscall.Handle, str *uint16, maxCount int32) (len int32, err error) {
- r0, _, e1 := syscall.Syscall(procGetWindowTextW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(str)), uintptr(maxCount))
- len = int32(r0)
- if len == 0 {
- if e1 != 0 {
- err = error(e1)
- } else {
- err = syscall.EINVAL
- }
- }
- return
- }
- func FindWindow(title string) (syscall.Handle, error) {
- var hwnd syscall.Handle
- cb := syscall.NewCallback(func(h syscall.Handle, p uintptr) uintptr {
- b := make([]uint16, 200)
- _, err := GetWindowText(h, &b[0], int32(len(b)))
- if err != nil {
- // ignore the error
- return 1 // continue enumeration
- }
- fmt.Printf("%s\n", syscall.UTF16ToString(b))
- if syscall.UTF16ToString(b) == title {
- // note the window
- hwnd = h
- return 0 // stop enumeration
- }
- return 1 // continue enumeration
- })
- EnumWindows(cb, 0)
- if hwnd == 0 {
- return 0, fmt.Errorf("No window with title '%s' found", title)
- }
- return hwnd, nil
- }
- func IntPtr(n int) uintptr {
- return uintptr(n)
- }
- func abort(funcname string, err syscall.Errno) {
- panic(funcname + " failed: " + err.Error())
- }
- func main() {
- //const title = "OpenTTD"
- //const title = "FileZilla FTP Client"
- const title = "OpenTTD 1.3.0"
- h, err := FindWindow(title)
- if err != nil {
- log.Fatal(err)
- }
- fmt.Printf("Found '%s' window: handle=0x%x\n", title, h)
- h, err = FindWindow(title)
- if err != nil {
- log.Fatal(err)
- }
- ret, _, callErr := syscall.Syscall(setForegroundWindow, 1, uintptr(h), IntPtr(0), IntPtr(0))
- if callErr != 0 {
- abort("Call setForegroundWindow", callErr)
- }
- fmt.Printf("Get Retrun Value Before setForegroundWindow Invoked: %s\n", ret)
- }
https://github.com/golang/go/wiki/WindowsDLLs
查看窗口名 调用dll setForegroundWindow的更多相关文章
- php调用dll经验小结
最近做一个网站,需要频繁使用远程数据,数据接口已经做好.在做转换的时候遇到了性能上的问题:开始打算用php来实现转换,苦苦查了数天,都没有找到直接操作字节的方法.虽然可以使用 pack() 方法将各个 ...
- 摘: VS2010 C++ 调用 DLL (C++编写)
一.为什么需要dll 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用. 比较常见的例子是各种应用程序框架,如ATL. ...
- C#程序实现动态调用DLL的研究(转)
摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...
- 在VC中创建并调用DLL
转自:http://express.ruanko.com/ruanko-express_45/technologyexchange6.html 一.DLL简介 1.什么是DLL? 动态链接库英文为DL ...
- 在 C++Builder 工程里调用 DLL 函数
调用 Visual C++ DLL 给 C++Builder 程序员提出了一些独特的挑战.在我们试图解决 Visual C++ 生成的 DLL 之前,回顾一下如何调用一个 C++Builder 创建的 ...
- VB6.0调用DLL
目录 第1章 VB6.0调用DLL 1 1 VC++编写DLL 1 1.1 使用__stdcall 1 1.2 使用 .DEF 文件 1 2 简单数据类型 2 2.1 传 ...
- 在VS2012中采用C++中调用DLL中的函数 (4)
这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人 ...
- 在C++中调用DLL中的函数 (3)
1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等 ...
- 在C++中调用DLL中的函数 (2)
应用程序使用DLL可以采用两种方式: 一种是隐式链接,另一种是显式链接.在使用DLL之前首先要知道DLL中函数的结构信息. Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin. ...
随机推荐
- 关于Git的一些常规操作
最近刚换了新的办公电脑,Git有重新安装了一遍,很多步骤久了不操作就忘了,又是好一顿折腾,于是这次就顺便记下来了. 不错的Git教程: https://www.liaoxuefeng.com/wiki ...
- ipython快捷键
IPython Notebook有两种不同的键盘输入模式(编辑模式和命令模式). 编辑模式:允许你输入代码或者文本到一个单元格(cell这里我译作单元格)内,并且单元格外面有灰色的选中框(注:Jupy ...
- [LeetCode]313. Super Ugly Number超级丑数,丑数系列看这一道就行了
丑数系列的题看这一道就可以了 /* 和ugly number2差不多,不过这次的质因子多了,所以用数组来表示质因子的target坐标 target坐标指的是这个质因子此次要乘的前任丑数是谁 */ pu ...
- CentOS 8 安装mysql8.0.21
1.使用dnf安装mysql(遇到暂停按y)dnf install @mysql 2.安装完成使用下面命令启动MySQL服务systemctl enable --now mysqld 3.查看服务是否 ...
- 高性能MySQL学习总结二----常见数据类型选择及优化
一.数据类型的选择 MySQL的数据类型有很多种,选择正确的数据类型对于获得高性能特别地重要,如何选择合适的数据类型呢?主要遵从以下三个原则: 1.更小的通常情况下性能更好 一般情况下,应该尽量使用可 ...
- 使用 SOS 对 Linux 中运行的 .NET Core 进行问题诊断
目录 说明 准备一个方便的学习环境 2.x 配置内容 3.x 配置内容 工具介绍 lldb sos plugin 1. attach 到进程上进行调试 2. 分析core dump文件 SOS 案例分 ...
- SSM整合详解
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- spring boot 部署到tomcat
网上很多文章描述过,当我按步骤做时会抛各种错误,最后记录下我的做法(成功发布到本地 Tomcat9 ): 1.将项目的启动类Application.java继承SpringBootServletIni ...
- java使用正则的例子
package com.accord.util; import java.util.ArrayList; import java.util.List; import java.util.regex.M ...
- 不吹不黑,jupyter lab 3.0客观使用体验
1 简介 jupyter lab于近期发布了其具有里程碑意义的3.0版本,随之带来的一些重要新特性,想必广大读者朋友已在各大公众号所翻译转载的jupyter lab团队官方介绍文章中知晓了很多. 图1 ...