-
自己测试一下:
option explicit
private declare function getwindowtext lib "user32" alias "getwindowtexta" (byval hwnd as long, byval lpstring as string, byval cch as long) as long
private declare function findwindow lib "user32" alias "findwindowa" (byval lpclassname as string, byval lpwindowname as string) as long
dim myhwnd as long, title as string
private sub command1_click()
myhwnd = findwindow(vbnullstring, title)
if myhwnd = 0 then
msgbox "首先打开文件:" & title
exit sub
end if
print title, myhwnd
end sub
private sub command2_click()
dim s as string, pid
s = space(256)
if myhwnd > 0 then
getwindowtext myhwnd, s, len(s)
print myhwnd, s
elsemsgbox "首先获取流程"
end if
end sub
private sub form_load()
title = "-记事本"
end sub
-
private declare function enumwindows lib "" (byval lpenumfunc as long, byval lparam as long) as long
首先枚举所有窗口。
然后私有声明函数 enumwindows lib"" (byval lpenumfunc as long, byval lparam as long) as long
private declare function getwindowthreadprocessid lib "" (byval hwnd as long, byref lpdwprocessid as long) as long
确定窗口所属的进程。
生成集合。
最后,可以通过索引显示它。
-
直接使用 findwindow(0,"窗口标题"你可以得到窗口句柄,你不需要通过winmgmts,那个东西不好用,服务停止,它不起作用,findwindow是一个api,你可以在任何情况下使用它。
-
使用 api 获取,getWindowThreadProcessId ihwnd,pid 获取进程 ID
获取进程句柄示例:
-
已知的进程名称或 PID,则无法准确定位表单句柄。
这是因为:一旦程序启动,系统只会为其分配一个 PID,而一个程序通常有多个窗口。 因此,如果想从PID向后找到相应的窗口,它并不是唯一的,并且已经在实践中得到了证明,而这方面的研究只能导致死胡同。
此问题的解决方案是枚举所有窗口句柄,然后获取相应的进程名称或 pid,如果它符合您的条件,则可以执行此操作。
-
这个问题写得含糊不清。 API 获取具有指定名称的窗口的句柄:declare function findwindow lib"user32" alias "findwindowa"(byval lpclassname as string, byval lpwindowname as string) 作为 long***api 使指定句柄的窗口聚焦:
declare function setforegroundwindow lib "user32"(byval hwnd 只要)只要***具体用法可以查阅msdn,不知道我是否理解。
-
这部分只能在模块中使用。
否则,系统将无法获取正确的地址。
-
人才! 我花了两个月的时间来尝试 API 函数
private declare function findwindows lib "user32" alias "findwindowa" (byval lpclassname as string, byval lpwindowname as string) as long >>>More
下面是一个 VB6 程序的示例,就足够了:
程序运行后,会弹出两个输入框,要求用户分别输入整数 a 和 b。 然后,根据输入的 A 和 B 值,分别判断它们。 >>>More