boyhong 发表于 2011-4-3 18:28:46

[已解决]如何修改一个第三方窗口的控件状态?

本帖最后由 boyhong 于 2011-4-3 21:01 编辑

如下,通过PID来获取窗口句柄,我下午闲来无事就在想,是不是接着可以来改这个窗口上的控件呢?
但几经试验,均无效,比如使用:GUICtrlSetData是不成功的。。。有办法来改么?我记得原来咱坛子上有人发过,但我在坛子上找了一个小时也没有找到。。。。
希望大家帮忙,感谢。


$iPid=Run("calc.exe",@SystemDir,@SW_MINIMIZE) ;似乎有些可以最小化运行,有些不行,比如画图程序就可以这样来最小化运行,但计算器不成
$iPid=_ProcessGetHWnd($iPid) ;通过PID来获取窗口句柄
WinSetTitle($iPid, "", "test");修改目标窗口标题
WinSetState ($iPid, "",@SW_SHOW)
;下边比如要将计算器窗口上的 “= ”键@SW_HIDE掉,或者改为其它任何字符。。。。谢谢


Func _ProcessGetHWnd($iPid, $iOption = 1, $sTitle = "", $iTimeout = 2000)
    Local $aReturn = [], $aWin, $hTimer = TimerInit()
   
    While 1
      
      ; Get list of windows
      $aWin = WinList($sTitle)
      
      ; Searches thru all windows
      For $i = 1 To $aWin
            
            ; Found a window owned by the given PID
            If $iPid = WinGetProcess($aWin[$i]) Then
               
                ; Option 0 or 1 used
                If $iOption = 1 OR ($iOption = 0 And $aWin[$i] <> "") Then
                  Return $aWin[$i]
               
                ; Option 2 is used
                ElseIf $iOption = 2 Then
                  ReDim $aReturn
                  $aReturn += 1
                  $aReturn[$aReturn] = $aWin[$i]
                  $aReturn[$aReturn] = $aWin[$i]
                EndIf
            EndIf
      Next
      
      ; If option 2 is used and there was matches then the list is returned
      If $iOption = 2 And $aReturn > 0 Then Return $aReturn
      
      ; If timed out then give up
      If TimerDiff($hTimer) > $iTimeout Then ExitLoop
      
      ; Waits before new attempt
      Sleep(Opt("WinWaitDelay"))
    WEnd
   
   
    ; No matches
    SetError(1)
    Return 0
EndFunc   ;==>_ProcessGetHWnd

xxoojoeooxx 发表于 2011-4-3 18:31:54

本帖最后由 xxoojoeooxx 于 2011-4-3 21:35 编辑

去HELP索引中Control开头的都看一便

boyhong 发表于 2011-4-3 21:00:57

去HELP索引中Control开头的都看一变
xxoojoeooxx 发表于 2011-4-3 18:31 http://www.autoitx.com/images/common/back.gif

感谢您,已搞定这个控件隐藏,如下,但就是RUN这个计算器的时候,却不能最小化运行,所以出现窗口会闪一下,有点那个啥。。。能再帮忙看一下么?

$iPid=Run("calc.exe",@SystemDir,@SW_MINIMIZE) ;似乎有些可以最小化运行,有些不行,比如画图程序就可以这样来最小化运行,但计算器不成
$iPid=_ProcessGetHWnd($iPid) ;通过PID来获取窗口句柄
WinSetTitle($iPid, "", "test");修改目标窗口标题
WinSetState ($iPid, "",@SW_SHOW)
;下边比如要将计算器窗口上的 “= ”键@SW_HIDE掉,或者改为其它任何字符。。。。谢谢
ControlHide ($iPid, "",112)
ControlHide ($iPid, "",92)

Func _ProcessGetHWnd($iPid, $iOption = 1, $sTitle = "", $iTimeout = 2000)
    Local $aReturn = [], $aWin, $hTimer = TimerInit()
   
    While 1
      
      ; Get list of windows
      $aWin = WinList($sTitle)
      
      ; Searches thru all windows
      For $i = 1 To $aWin
            
            ; Found a window owned by the given PID
            If $iPid = WinGetProcess($aWin[$i]) Then
               
                ; Option 0 or 1 used
                If $iOption = 1 OR ($iOption = 0 And $aWin[$i] <> "") Then
                  Return $aWin[$i]
               
                ; Option 2 is used
                ElseIf $iOption = 2 Then
                  ReDim $aReturn
                  $aReturn += 1
                  $aReturn[$aReturn] = $aWin[$i]
                  $aReturn[$aReturn] = $aWin[$i]
                EndIf
            EndIf
      Next
      
      ; If option 2 is used and there was matches then the list is returned
      If $iOption = 2 And $aReturn > 0 Then Return $aReturn
      
      ; If timed out then give up
      If TimerDiff($hTimer) > $iTimeout Then ExitLoop
      
      ; Waits before new attempt
      Sleep(Opt("WinWaitDelay"))
    WEnd
   
   
    ; No matches
    SetError(1)
    Return 0
EndFunc   ;==>_ProcessGetHWnd

xxoojoeooxx 发表于 2011-4-3 21:38:09

回复 3# boyhong


WinSetTrans 设透明度0 或 1
之後再WinSetState ($iPid, "",@SW_SHOW)
页: [1]
查看完整版本: [已解决]如何修改一个第三方窗口的控件状态?