sanmoking 发表于 2010-7-30 11:02:46

求高手出现,实现如此【超级置顶】的方法

本帖最后由 sanmoking 于 2010-7-31 23:58 编辑


上图是窗体正常的置顶状态(就那个notepad2的窗体)再怎么置顶都挡不住后面窗口的菜单项,本人用au3自带的置顶功能,用顽固不化提供的dll的方法,也只能达到这样的效果。



现在求能达到上述画面的方法(au3能实现的,且占用资源很小的),超级置顶的方法,能挡住菜单项的方法。谢谢。


刚才发现该函数和最佳答案的函数是一样的效果,_WinAPI_BringWindowToTop($Form1)


这是最后一个问题,已解决,完成的程序将在源码区公布,谢谢大家参与。。。
完成的程序见【鼠标傀儡】

akmm88 发表于 2010-7-30 11:02:47

不多说,上源#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.6.1
Author:         myName

Script Function:
        Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#Include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("我就是这么犀利,谁能挡住我?还有谁?", 623,200, 192, 114)
GUISetState(@SW_SHOW)

While 1
      $hw=_WinAPI_GetForegroundWindow()
                If $hw<>$Form1 Then
                        _WinAPI_SetWindowPos($hw, -2, 0, 0, 0, 0, 3)
                  
                EndIf
                _WinAPI_SetWindowPos($Form1, -1, 0, 0, 0, 0, 3)
                $nMsg = GUIGetMsg()
      Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

      EndSwitch
WEnd

xsjtxy 发表于 2010-7-30 13:28:34

本帖最后由 xsjtxy 于 2010-7-30 14:18 编辑


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 623, 449, 192, 114,$WS_EX_APPWINDOW,$WS_EX_TOPMOST)
GUISetState(@SW_SHOW)


While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

sanmoking 发表于 2010-7-30 13:46:26

本帖最后由 sanmoking 于 2010-7-30 13:47 编辑

回复 2# xsjtxy

大侠试过了么。我想要的是前置窗口能盖过菜单条。

goodchap 发表于 2010-7-30 16:01:50

学习了 继续努力

tryhi 发表于 2010-7-31 00:20:37

楼主真是有钱人……

大绯狼 发表于 2010-7-31 00:39:18

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        WinSetOnTop ( "Form1", "", 1 )
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd歪脑筋?

sanmoking 发表于 2010-7-31 01:52:39

回复 6# 大绯狼

你的例子是可以的,可是我的窗口无效。
$Form1 = GUICreate("傀儡鼠标", $Width, $Height, $a, $b, $WS_POPUP, BitOR($WS_EX_TRANSPARENT,$WS_EX_LAYERED,$WS_EX_TOPMOST), WinGetHandle(AutoItWinGetTitle()))

ceoguang 发表于 2010-7-31 02:54:01

都透明了你还能看见?

78391493 发表于 2010-7-31 07:47:20

WinSetOnTop("Form1", "", 1)要学习精髓,重点是这一行循环执行。。。

auto 发表于 2010-7-31 10:24:26

歪脑筋?
大绯狼 发表于 2010-7-31 00:39 http://www.autoitx.com/images/common/back.gif


    这个窗体有时有其它置顶层出现,会闪一下

Ie的弹出窗口就可以一直置顶,而且不会闪

xsjtxy 发表于 2010-7-31 10:31:14

很有创意啊。不错。值得学习
很多时候我们就是缺少给思想转个弯的灵感

akmm88 发表于 2010-7-31 11:04:47

歪脑筋?
大绯狼 发表于 2010-7-31 00:39 http://www.autoitx.com/images/common/back.gif


   楼主给钱
你这段也挡不住我.

3mile 发表于 2010-7-31 11:28:21

回复 13# akmm88
无意战争,只是纯技术讨论。#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.6.1
Author:         myName

Script Function:
      Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#Include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("还是循环置顶?", 623,200, 192, 114)
GUISetState(@SW_SHOW)

While 1
                _WinAPI_SetWindowPos($Form1, -1, 0, 0, 0, 0, 3);前面的去掉,只有这句有用
                $nMsg = GUIGetMsg()
      Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

      EndSwitch
WEnd

akmm88 发表于 2010-7-31 11:54:43

_WinAPI_SetWindowPos($hw, -2, 0, 0, 0, 0, 3)
这个有没有用,要看实际场合,环境不同就不同.总体是有用的,必须的.
不用循环,普通窗口能做得到?
直接写屏,或DX也许能.那就不是个普通窗口了
页: [1] 2
查看完整版本: 求高手出现,实现如此【超级置顶】的方法