背景:
win开机自动启动了XXX程序,由于win也是多进程运行,在启动过程中,光标可能不在启动进程上,启动进程又想给你提示表示我启动了,就会出现醒目的颜色
解决办法:
模拟alt+tab键逐个把窗口显示出来
go代码:
package main
import (
"syscall"
"time"
)
var (
user32 = syscall.NewLazyDLL("user32.dll")
procKeybdEvent = user32.NewProc("keybd_event")
procEnumWindows = user32.NewProc("EnumWindows")
procGetWindowThreadProcessId = user32.NewProc("GetWindowThreadProcessId")
)
const (
KEYEVENTF_KEYUP = 0x0002 // 键释放标志
VK_MENU = 0x12 // Alt 键的虚拟键码
VK_TAB = 0x09 // Tab 键的虚拟键码
)
var windowCount int
func main() {
// 统计打开窗口数量
windowCount = countOpenWindows()
// 重复10次
for i := 1; i <= 30 && i <= windowCount; i++ {
simulateAltTab(i) // 按下 i 次 Tab 键
time.Sleep(1000 * time.Millisecond) // 等待3秒
}
}
func countOpenWindows() int {
count := 0
procEnumWindows.Call(syscall.NewCallback(func(hwnd syscall.Handle, lParam uintptr) uintptr {
count++
return 1 // 继续枚举
}), 0)
return count
}
func simulateAltTab(tabCount int) {
// 按下 Alt 键
procKeybdEvent.Call(uintptr(VK_MENU), 0, 0, 0)
// 按下 Tab 键指定次数
for j := 0; j < tabCount; j++ {
procKeybdEvent.Call(uintptr(VK_TAB), 0, 0, 0) // 按下 Tab 键
procKeybdEvent.Call(uintptr(VK_TAB), 0, KEYEVENTF_KEYUP, 0) // 释放 Tab 键
time.Sleep(100 * time.Millisecond) // 等待100毫秒
}
// 释放 Alt 键
procKeybdEvent.Call(uintptr(VK_MENU), 0, KEYEVENTF_KEYUP, 0)
// 等待一段时间,确保窗口切换完成
time.Sleep(500 * time.Millisecond) // 等待0.5秒
}