找回密码
 加入
搜索
查看: 2778|回复: 6

[AU3基础] 激活窗口与活动窗口有何区别?[已解决]

[复制链接]
发表于 2016-9-29 09:32:26 | 显示全部楼层 |阅读模式
本帖最后由 cashiba 于 2017-3-18 09:41 编辑
获取窗口的状态: WinGetState("标题"[, "文本"])
成功: 返回一个指示窗口状态的值. 使用 BitAND() 将多个状态值相加检查所需窗口的状态:
     $WIN_STATE_EXISTS (1) = 窗口存在
      $WIN_STATE_VISIBLE (2) = 窗口可见
      $WIN_STATE_ENABLED (4) = 窗口激活
     $WIN_STATE_ACTIVE (8) = 窗口处于活动状态
     $WIN_STATE_MINIMIZED (16) = 窗口最小化
      $WIN_STATE_MAXIMIZED (32) = 窗口最大化
失败: 返回 0, @error 设置为 1, 未找到目标窗口.
以前以为激活窗口是最顶端窗口,只有一个......
看到这个帖子 【Bitand 的作用是什么? http://www.autoitx.com/post.php? ... fid=4&tid=53449】 后,顺便检测了一下:
#include <MsgBoxConstants.au3>
#include <Array.au3>
Example()
Func Example()
   Local $aList = WinList()
   $j=0
   For $i = 1 To $aList[0][0]
        If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]),8) Then
            $j=$j+1
        EndIf
    Next
MsgBox($MB_SYSTEMMODAL, "", "检测到的窗口数 = " & $j)
;_ArrayDisplay($aList, UBound($aList))
EndFunc
活动窗口,只有一个,就是scite编辑器窗口
#include <MsgBoxConstants.au3>
#include <Array.au3>
Example()
Func Example()
   Local $aList = WinList()
   $j=0
   For $i = 1 To $aList[0][0]
        If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]),4) Then
            $j=$j+1
        EndIf
    Next
MsgBox($MB_SYSTEMMODAL, "", "检测到的窗口数 = " & $j)
;_ArrayDisplay($aList, UBound($aList))
EndFunc
这个检测到激活窗口,若干个.....

然后,检测顶层窗口:
#include <WinAPI.au3>
Example()
Func Example()
    Local $aWindows
    $aWindows = _WinAPI_EnumWindowsTop()
   MsgBox($MB_SYSTEMMODAL, "", "顶层窗口数 = " & $aWindows[0][0])
EndFunc
顶层窗口数也有若干....

求解惑:
1、上面的代码写法有木有问题?
2、若代码没有错误,那就是对激活窗口与活动窗口的概念搞反了?
3、Top窗口就是顶层窗口吧,如何获取最顶端的那个窗口的标题?
 楼主| 发表于 2016-9-29 09:39:09 | 显示全部楼层
[quote][/quote]
这个error是什么意思?
是说帖子发的有问题?
以前发帖的时候都没注意到....

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-9-29 09:54:38 | 显示全部楼层
这个error是什么意思?
是说帖子发的有问题?
以前发帖的时候都没注意到....
cashiba 发表于 2016-9-29 09:39


论坛的搜索词...........
 楼主| 发表于 2016-9-29 10:22:22 | 显示全部楼层
论坛的搜索词...........
131738 发表于 2016-9-29 09:54
还以为帖子有毛病呢....
 楼主| 发表于 2016-9-29 10:27:08 | 显示全部楼层
顶端窗口是指这个窗口总是处于别的窗口的上方,即使他未处于激活状态。这样的窗口具有 WS_EX_TOPMOST 样式。

激活窗口通常叫活动窗口,是指能接收消息的窗口,就是说,当你按下键盘上的键,或者移动了鼠标,或者点击了鼠标上的键,系统应该把这些事件通知哪一个窗口就是看哪一个窗口是活动窗口。

看到这个解释,晕了....
 楼主| 发表于 2016-9-29 10:29:28 | 显示全部楼层
激活窗口与活动窗口,英文写法是什么呢?AvtivatedWindow与ActiveWindow?
 楼主| 发表于 2016-9-29 10:36:48 | 显示全部楼层
网上看到一段,跟Au3的语法有点相似. ....
#include<afxwin.h>  
void hide(void)  
{  
    HWND hwnd;  
    hwnd=FindWindow(TEXT("ConsoleWindowClass"),NULL);  
    if(hwnd)  
    {  
        ShowOwnedPopups(hwnd,SW_HIDE);  
        ShowWindow(hwnd,SW_HIDE);  
    }  
}  

BOOL ShowWindow(HWND hWnd, int nCmdShow);
hWnd:指窗口句柄。
nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。
SW_HIDE:隐藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。
SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。
SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。
SW_SHOWMAXIMIZED:激活窗口并将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其最小化。
SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然维持激活状态。
SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-21 00:01 , Processed in 0.082787 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表