找回密码
 加入
搜索
查看: 2093|回复: 5

关于API的SetWindowPos函数无法置前窗口的问题

[复制链接]
发表于 2009-3-13 20:17:13 | 显示全部楼层 |阅读模式
见代码
#include <WindowsConstants.au3>

$Form1_1 = GUICreate("", 439, 466, -1, -1, -1, $WS_EX_ACCEPTFILES)
HotKeySet("^!c", "show")

While 1
        If GUIGetMsg() = -3 Then Exit
WEnd

Func show()
        _SetParent($Form1_1, "Program Manager")
        _SetWindowPos(WinGetHandle(AutoItWinGetTitle()), 291, 125)
        GUISetState(@SW_SHOW)
EndFunc

Func _SetParent($TitleP, $TitleC)
    If WinExists($TitleP) Then
        If WinExists($TitleC) Then
            $HwndP = WinGetHandle($TitleP)
            $HwndC = WinGetHandle($TitleC)
                        DllCall("user32.dll", "str", "SetParent", "HWnd", $HwndP, "HWnd", $HwndC)
            Return 1
        Else
            Return -1
        EndIf
    Else
        Return -1
    EndIf
EndFunc

Func _SetWindowPos($hWnd, $x, $y)
        Local $cX, $cY
        $hWndInsertAfter = "HWND_TOPMOST"
        $wFlags = 1
        DllCall("user32.dll", "long", "SetWindowPos", "long", $hWnd, "long", $hWndInsertAfter, "long", $x, _
        "long", $y, "long", $cX, "long", $cY, "long", $wFlags)
EndFunc

是因为使用了SetParent还是其它原因?
高手都来支下招!!!
 楼主| 发表于 2009-3-14 14:15:35 | 显示全部楼层
顶起,问题未解决...................
发表于 2009-3-20 02:06:18 | 显示全部楼层
你自己都找到原因了,怎么还没解决?

Program Manager 永远都不能置顶,自己想想,这个要是置顶了,那还了得?
发表于 2009-3-20 02:31:19 | 显示全部楼层
直接winsettop不就行了。Program Manager 是置底好不好。置顶还玩什么呢。
 楼主| 发表于 2009-3-20 18:55:11 | 显示全部楼层
回楼上及楼上的楼上两位,我就是希望在不使用$WS_EX_TOOLWINDOW式样的情况下能做到在应用程序及任务栏隐藏。
BTW:$WS_EX_TOPMOST式样比winsettop要好用多吧.
发表于 2009-3-26 02:33:32 | 显示全部楼层
就算让你把桌面给置顶了,也达不到你要的效果的.
什么样式不重要.想要保持置顶.就用个TIMER 每隔1MS设置一下置顶,很少有窗口能枪得过你了.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-23 05:18 , Processed in 0.079512 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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