找回密码
 加入
搜索
查看: 12597|回复: 17

[系统综合] 【已解决】求助,如何使AUTO与外部文本文档同时显示和同时最小化?

 火.. [复制链接]
发表于 2012-10-7 03:37:01 | 显示全部楼层 |阅读模式
本帖最后由 fenhanxue 于 2012-10-8 21:28 编辑

编了个auto文件,实现了与一个已经打开的文本文档的以下互动功能:
1)最小化文本文档时,auto也一起最小化
2)回复最小化的文本文档时,auto也一起仅仅靠在文档的右边缘

但是发现我的代码还有以下问题,就是我设想的,是auto能够和文本文档同时显示和同时最小化,但是当有其他程序也运行的时候,若恢复最小化的文本文档,auto会有一部分被其他的已激活的程序遮挡住:(具体问题如截图所示)
















从晚上22点一直纠结到现在,翻阅说明书还是找不到头绪,求助大神帮忙:,万分感激拉

以下是小妹的代码:
Dim $i, $b, $a
Dim $List[3], $ok[4], $positon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WindowsConstants.au3>
 
$positon = WinGetPos("新建 - 记事本", "")
If Not @error Then
        
        $Form1 = GUICreate("Form1", 362, 269, $positon[0] + $positon[2] + 3, $positon[1] + 4)
        $Input1 = GUICtrlCreateInput("Input1", 8, 8, 137, 50)
        $List[1] = GUICtrlCreateList("", 160, 0, 193, 152)
        GUICtrlSetData($List[1], "123")
        GUICtrlSetData($List[1], "345")
        GUICtrlSetData($List[1], "789")
        $List[2] = GUICtrlCreateList("", 160, 160, 193, 153)
        GUICtrlSetData($List[2], "bhg")
        GUICtrlSetData($List[2], "llj")
        GUICtrlSetData($List[2], "87u")
        $ok[1] = GUICtrlCreateButton("ok1", 20, 80, 30, 30)
        $ok[2] = GUICtrlCreateButton("ok2", 20, 150, 30, 30)
        $ok[3] = GUICtrlCreateButton("ok3", 20, 200, 30, 30)
 
 
        ;GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
        GUISetState()
EndIf
While 1
        $nMsg = GUIGetMsg()
 
        Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
                $status = WinGetState("新建 - 记事本", "")
        ;MsgBox(0,0,$status)
        If BitAnd($status, 16) Then ;最小化
                        WinSetState($Form1,"",@SW_MINIMIZE)
        ElseIf BitAnd($status, 8) Then 
                        $array=WinGetPos("新建 - 记事本")
                        WinMove("Form1","",$array[0]+$array[2],$array[1])
                        WinSetOnTop("Form1","",1)
                    WinSetState($Form1,"",@SW_RESTORE)
        EndIf
WEnd
        

本帖子中包含更多资源

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

×
发表于 2012-10-7 08:47:07 | 显示全部楼层
没看懂问题
三个窗口,还是二个窗口?
想哪个窗口跟着哪个窗口同时激活?
发表于 2012-10-7 09:42:35 | 显示全部楼层
我是来看看的。原来楼主是MM啊
发表于 2012-10-7 10:50:27 | 显示全部楼层
Dim $i, $b, $a
Dim $List[3], $ok[4], $positon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WindowsConstants.au3>

Run("notepad.exe")
WinWait("[CLASS:Notepad]")

$hNotehwnd = WinGetHandle("[CLASS:Notepad]")
$positon = WinGetPos("[CLASS:Notepad]", "")

If Not @error Then        
        $Form1 = GUICreate("Form1", 362, 269, $positon[2], 0, -1, $WS_EX_MDICHILD, $hNotehwnd)
        $Input1 = GUICtrlCreateInput("Input1", 8, 8, 137, 50)
        $List[1] = GUICtrlCreateList("", 160, 0, 193, 152)
        GUICtrlSetData($List[1], "123")
        GUICtrlSetData($List[1], "345")
        GUICtrlSetData($List[1], "789")
        $List[2] = GUICtrlCreateList("", 160, 160, 193, 153)
        GUICtrlSetData($List[2], "bhg")
        GUICtrlSetData($List[2], "llj")
        GUICtrlSetData($List[2], "87u")
        $ok[1] = GUICtrlCreateButton("ok1", 20, 80, 30, 30)
        $ok[2] = GUICtrlCreateButton("ok2", 20, 150, 30, 30)
        $ok[3] = GUICtrlCreateButton("ok3", 20, 200, 30, 30)
        ;GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
        GUISetState()
        WinMove($Form1,"",$positon[0]+$positon[2]+5,$positon[1]+5)
EndIf

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        WinClose($hNotehwnd)
                        Exit
        EndSwitch
        $status = WinGetState($hNotehwnd, "")
        If @error Then Exit
;~         ;MsgBox(0,0,$status)
        If BitAnd($status, 8) Then 
                $array=WinGetPos($hNotehwnd)
                WinMove($Form1,"",$array[0]+$array[2]+5,$array[1]+5)
        EndIf
WEnd
        
 楼主| 发表于 2012-10-7 12:07:20 | 显示全部楼层
回复 2# seniors


就是想 form这个窗口,跟着文本窗口被激活
发表于 2012-10-7 15:47:18 | 显示全部楼层
不知道4楼代码成功不,如果不成功那在本来的基础上增加不是激活窗口不置顶应该行了。
发表于 2012-10-7 15:47:22 | 显示全部楼层
不知道4楼代码成功不,如果不成功那在本来的基础上增加不是激活窗口不置顶应该行了。
发表于 2012-10-7 21:55:50 | 显示全部楼层
Dim $i, $b, $a
Dim $List[3], $ok[4], $positon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WindowsConstants.au3>

$positon = WinGetPos("[CLASS:Notepad]", "")
If Not @error Then
        
        $Form1 = GUICreate("Form1", 362, 269, $positon[0] + $positon[2] + 3, $positon[1] + 4)
        $Input1 = GUICtrlCreateInput("Input1", 8, 8, 137, 50)
        $List[1] = GUICtrlCreateList("", 160, 0, 193, 152)
        GUICtrlSetData($List[1], "123")
        GUICtrlSetData($List[1], "345")
        GUICtrlSetData($List[1], "789")
        $List[2] = GUICtrlCreateList("", 160, 160, 193, 153)
        GUICtrlSetData($List[2], "bhg")
        GUICtrlSetData($List[2], "llj")
        GUICtrlSetData($List[2], "87u")
        $ok[1] = GUICtrlCreateButton("ok1", 20, 80, 30, 30)
        $ok[2] = GUICtrlCreateButton("ok2", 20, 150, 30, 30)
        $ok[3] = GUICtrlCreateButton("ok3", 20, 200, 30, 30)


        ;GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
        GUISetState()
EndIf
While 1
        $nMsg = GUIGetMsg()

        Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
                $status = WinGetState("[CLASS:Notepad]", "")
        ;MsgBox(0,0,$status)
        If BitAnd($status, 16) Then ;最小化
                        WinSetState($Form1,"",@SW_MINIMIZE)
        ElseIf BitAnd($status, 8) Then 
                        $array=WinGetPos("[CLASS:Notepad]")
                        WinMove("Form1","",$array[0]+$array[2],$array[1])
                        ;WinSetOnTop("Form1","",1)
                    WinSetState($Form1,"",@SW_RESTORE)
                EndIf
                If WinActive("[CLASS:Notepad]") Then 
                        WinSetOnTop("Form1","",1)
                Else
                        WinSetOnTop("Form1","",0)
                EndIf
                
                                
WEnd
        
回复 1# fenhanxue
发表于 2012-10-7 21:57:54 | 显示全部楼层
回复 1# fenhanxue
原来楼主是MM,论坛里可是稀罕的哟,呵呵~~!
 楼主| 发表于 2012-10-7 23:49:58 | 显示全部楼层
回复 9# xms77


    小妹初学,发现好多不会哦,难弄死拉,
    幸亏有亲们的帮忙指点哈
发表于 2012-10-8 19:32:23 | 显示全部楼层
。。。。国宝。。。。路过
 楼主| 发表于 2012-10-8 21:26:55 | 显示全部楼层
回复 11# sliqi


    哈哈,正在慢慢学习呢~
 楼主| 发表于 2012-10-8 21:27:44 | 显示全部楼层
回复 4# 298311657


    3Q~
 楼主| 发表于 2012-10-8 21:28:04 | 显示全部楼层
然后刚刚突然灵光一现,摸索出了一个很小白的方法,就是:

当 note激活时,先用winsetontop强制gui窗口ontop,然后马上又用winsetontop取消ONtop的属性,发现居然同时显隐拉

感觉好小白~
发表于 2012-10-11 14:37:24 | 显示全部楼层
看楼主是MM...觉得咱都来了不说两句对不起咱自己..你可以先将AU3窗口置顶,再将文本置顶,不知道要的是不是这个效果
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 21:31 , Processed in 0.097067 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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