ceoguang 发表于 2009-3-13 20:17:13

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

见代码
#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还是其它原因?
高手都来支下招!!!

ceoguang 发表于 2009-3-14 14:15:35

顶起,问题未解决...................

akmm88 发表于 2009-3-20 02:06:18

你自己都找到原因了,怎么还没解决?

Program Manager 永远都不能置顶,自己想想,这个要是置顶了,那还了得?

sanhen 发表于 2009-3-20 02:31:19

直接winsettop不就行了。Program Manager 是置底好不好。置顶还玩什么呢。

ceoguang 发表于 2009-3-20 18:55:11

回楼上及楼上的楼上两位,我就是希望在不使用$WS_EX_TOOLWINDOW式样的情况下能做到在应用程序及任务栏隐藏。
BTW:$WS_EX_TOPMOST式样比winsettop要好用多吧.

akmm88 发表于 2009-3-26 02:33:32

就算让你把桌面给置顶了,也达不到你要的效果的.
什么样式不重要.想要保持置顶.就用个TIMER 每隔1MS设置一下置顶,很少有窗口能枪得过你了.
页: [1]
查看完整版本: 关于API的SetWindowPos函数无法置前窗口的问题