- в браузере нажимается кнопка "скачать torrent"
- затем автоматически открывается и получает фокус дочернее окно "Добавить торрент" программы µTorrent
- после закрытия окна "Добавить торрент" фокус может быть сразу направлен либо в главное окно программы µTorrent, либо в браузер
имеются 2 версии одного скрипта. в ранней версии фокус направлялся в браузер, в поздней - в µTorrent
планируется использование поздней версии
что и как именно нужно в ней изменить, чтобы фокус направлялся в браузер?
ранняя версия:
поздняя версия:
не имея должных знаний, я попытался методом тыка добиться, чтобы фокус направлялся в браузер, но безуспешно:
(скрипт взят из этой темы)
- затем автоматически открывается и получает фокус дочернее окно "Добавить торрент" программы µTorrent
- после закрытия окна "Добавить торрент" фокус может быть сразу направлен либо в главное окно программы µTorrent, либо в браузер
имеются 2 версии одного скрипта. в ранней версии фокус направлялся в браузер, в поздней - в µTorrent
планируется использование поздней версии
что и как именно нужно в ней изменить, чтобы фокус направлялся в браузер?
ранняя версия:
Код:
#include <GuiListView.au3>
#include <GuiButton.au3>
#include <Misc.au3>
Global $hWnd, $sINIFile = @ScriptDir & '\uTFilter.ini', $sTitle = '[CLASS:#32770;REGEXPTITLE:(Добав([А-яЁё]|\h)+?торр?ент)|(Add New Torrent)]'
Global $sLVCntrl = '[CLASS:SysListView32; INSTANCE:1]', $sButtOK = '[CLASS:Button; ID:20]'
HotKeySet('{ESC}', '_Exit') ; Выход из скрипта при нажатии 'ESC'
$sINIParam = IniRead($sINIFile, 'Filter', 'Extension', False)
If Not $sINIParam Then Exit MsgBox(16, @ScriptName, '"uTFilter.ini" не найден!')
While 1
$hWnd = WinActivate($sTitle)
If $hWnd Then
$hLVCntrl = ControlGetHandle($hWnd, '', $sLVCntrl)
$iCount = ControlListView($hWnd, '', $hLVCntrl, 'GetItemCount') - 1
Dim $aLVItems[$iCount + 1]
_GUICtrlListView_BeginUpdate($hLVCntrl)
_GUICtrlListView_InsertColumn($hLVCntrl, 1, 'Расширение', -1)
For $i = 0 To $iCount
$sText = ControlListView($hWnd, '', $hLVCntrl, 'GetText', $i, 0)
If StringRegExp($sText, '(?i)\.(' & $sINIParam & ')$') Then
$aLVItems[$i] = ''
_GUICtrlListView_SetItemChecked($hLVCntrl, $i, False)
Else
$aLVItems[$i] = $sText
If Not _GUICtrlListView_GetItemChecked($hLVCntrl, $i) Then _GUICtrlListView_SetItemChecked($hLVCntrl, $i, True)
_GUICtrlListView_SetItemText($hLVCntrl, $i, StringUpper(StringRegExpReplace($sText, '.+(\..*?)$', '${1}')), 1)
EndIf
Next
For $i = $iCount To 0 Step -1
If Not $aLVItems[$i] Then _GUICtrlListView_DeleteItem($hLVCntrl, $i)
Next
_GUICtrlListView_EndUpdate($hLVCntrl)
If Not _MyButton() Then ContinueLoop
For $i = 0 To $iCount
If $aLVItems[$i] And Not _GUICtrlListView_GetItemChecked($hLVCntrl, _GUICtrlListView_FindText($hLVCntrl, $aLVItems[$i])) Then $aLVItems[$i] = ''
Next
_GUICtrlListView_DeleteAllItems($hLVCntrl)
For $i = 0 To $iCount
_GUICtrlListView_AddItem($hLVCntrl, $aLVItems[$i])
If $aLVItems[$i] Then _GUICtrlListView_SetItemChecked($hLVCntrl, $i)
Next
ControlShow($hWnd, '', $sButtOK)
ControlFocus($hWnd, '', $sButtOK)
ControlClick($hWnd, '', $sButtOK)
If Not WinWaitClose($hWnd, '', 3) Then WinClose($hWnd)
Else
Sleep(250)
EndIf
WEnd
Func _MyButton()
Local $aiPos, $iPosPrevX, $iPosPrevY, $hButton, $aWndList
$aiPos = ControlGetPos($hWnd, '', $sButtOK)
If @error Then Return 0
$iPosPrevX = $aiPos[0]
$iPosPrevY = $aiPos[1]
$hButton = _GUICtrlButton_Create($hWnd, 'OK', $aiPos[0], $aiPos[1], $aiPos[2], $aiPos[3])
ControlHide($hWnd, '', $sButtOK)
ControlDisable($hWnd, '', $sButtOK)
ControlFocus($hWnd, '', $hButton)
While Sleep(10)
If Not WinExists($hWnd) Then Return 0
$aWndList = WinList($sTitle)
If $aWndList[0][0] > 1 Then
WinClose($aWndList[1][1])
SoundPlay(@WindowsDir & '\media\Windows Ding.wav')
WinActivate($hWnd)
EndIf
If _GUICtrlButton_GetState($hButton) = 0x0026C Then ExitLoop
If WinActive($hWnd) And _IsPressed('0D') Then ExitLoop
$aiPos = ControlGetPos($hWnd, '', $sButtOK)
If @error Then Return 0
If $iPosPrevX <> $aiPos[0] Or $iPosPrevY <> $aiPos[1] Then ControlMove($hWnd, '', $hButton, $aiPos[0], $aiPos[1])
WEnd
WinSetState($hWnd, '', @SW_HIDE)
Return (_GUICtrlButton_Destroy($hButton)) ? 1 : 0
EndFunc ;==>_MyButton
Func _Exit()
If $hWnd Then WinClose($hWnd)
Exit
EndFunc ;==>_Exit
поздняя версия:
Код:
#include <GuiListView.au3>
#include <GuiButton.au3>
#include <Misc.au3>
Global $hWnd, $hLVCntrl, $hButtOK
Global $sINIFile = @ScriptDir & '\uTFilter.ini'
Global $sTitle = '[CLASS:#32770;REGEXPTITLE:(Добав([А-яЁё]|\h)+?торр?ент)|(Add New Torrent)]'
Global $sLVCntrl = '[CLASS:SysListView32; INSTANCE:1]'
Global $sButtOK = '[CLASS:Button; ID:20]'
Global $Process = 'utorrent.exe'
Global $vINIParam = IniReadSection($sINIFile, 'Filter')
If @error Then Exit MsgBox(16, @ScriptName, 'Ошибка чтения "uTFilter.ini"!')
If $vINIParam[3][1] Then
HotKeySet($vINIParam[3][1], '_CBStateSwitch')
$vINIParam[3][1] = True
EndIf
While ProcessExists($Process)
$hWnd = WinActivate($sTitle)
If $hWnd Then
$hTimer = TimerInit()
If $vINIParam[4][1] Then WinSetTrans($hWnd, '', $vINIParam[4][1])
$hLVCntrl = ControlGetHandle($hWnd, '', $sLVCntrl)
$iCount = ControlListView($hWnd, '', $hLVCntrl, 'GetItemCount') - 1
Dim $aLVItems[$iCount + 1]
_GUICtrlListView_BeginUpdate($hLVCntrl)
If $vINIParam[2][1] == 0 Then _GUICtrlListView_SetItemChecked($hLVCntrl, -1, False)
For $i = $iCount To 0 Step -1
$sText = ControlListView($hWnd, '', $hLVCntrl, 'GetText', $i, 0)
If StringRegExp($sText, '(?i)\.(' & $vINIParam[1][1] & ')$') Then
$aLVItems[$i] = ''
_GUICtrlListView_DeleteItem($hLVCntrl, $i)
Else
$aLVItems[$i] = $sText
EndIf
Next
_GUICtrlListView_EndUpdate($hLVCntrl)
$hButtOK = ControlGetHandle($hWnd, '', $sButtOK)
If Not _MyButton() Then ContinueLoop
For $i = 0 To $iCount
If $aLVItems[$i] And Not _GUICtrlListView_GetItemChecked($hLVCntrl, _GUICtrlListView_FindText($hLVCntrl, $aLVItems[$i])) Then $aLVItems[$i] = ''
Next
_GUICtrlListView_BeginUpdate($hLVCntrl)
_GUICtrlListView_DeleteAllItems($hLVCntrl)
For $i = 0 To $iCount
_GUICtrlListView_AddItem($hLVCntrl, $aLVItems[$i])
If $aLVItems[$i] Then _GUICtrlListView_SetItemChecked($hLVCntrl, $i)
Next
ControlFocus($hWnd, '', $hButtOK)
ControlClick($hWnd, '', $hButtOK)
If Not WinWaitClose($hWnd, '', 3) Then WinClose($hWnd)
Else
Sleep(200)
EndIf
WEnd
Func _MyButton()
Local $aiPos, $sControl, $iPosPrevX, $iPosPrevY, $hButton, $aWndList
$aiPos = ControlGetPos($hWnd, '', $hButtOK)
$sControl = ControlGetFocus($hWnd)
If @error Then Return 0
$iPosPrevX = $aiPos[0]
$iPosPrevY = $aiPos[1]
$hButton = _GUICtrlButton_Create($hWnd, 'OK', $aiPos[0], $aiPos[1], $aiPos[2], $aiPos[3])
ControlHide($hWnd, '', $hButtOK)
ControlDisable($hWnd, '', $hButtOK)
ControlFocus($hWnd, '', $sControl)
While Sleep(10)
If Not WinExists($hWnd) Then Return 0
$aWndList = WinList($sTitle)
If $aWndList[0][0] > 1 Then
WinClose($aWndList[1][1])
WinActivate($hWnd)
EndIf
If _GUICtrlButton_GetState($hButton) = 0x0026C Then ExitLoop
If WinActive($hWnd) And _IsPressed('0D') Then ExitLoop
$aiPos = ControlGetPos($hWnd, '', $hButtOK)
If @error Then Return 0
If $iPosPrevX <> $aiPos[0] Or $iPosPrevY <> $aiPos[1] Then ControlMove($hWnd, '', $hButton, $aiPos[0], $aiPos[1])
WEnd
Return ControlEnable($hWnd, '', $hButtOK)
EndFunc ;==>_MyButton
Func _CBStateSwitch()
If Not WinActive($hWnd) Then Return
$vINIParam[3][1] = Not $vINIParam[3][1]
_GUICtrlListView_SetItemChecked($hLVCntrl, -1, $vINIParam[3][1])
EndFunc ;==>_CBStateSwitch
не имея должных знаний, я попытался методом тыка добиться, чтобы фокус направлялся в браузер, но безуспешно:
Код:
#include <WinAPI.au3>
#include <GuiListView.au3>
#include <GuiButton.au3>
#include <Misc.au3>
Global $hWnd, $hLVCntrl, $hButtOK, $hWndFF
Global $sINIFile = @ScriptDir & '\uTFilter.ini'
Global $sTitle = '[CLASS:#32770;REGEXPTITLE:(Добав([А-яЁё]|\h)+?торр?ент)|(Add New Torrent)]'
Global $sTitle2 = '[CLASS:#MozillaWindowClass;TITLE:Mozilla Firefox]'
Global $sLVCntrl = '[CLASS:SysListView32; INSTANCE:1]'
Global $sButtOK = '[CLASS:Button; ID:20]'
Global $Process = 'utorrent.exe'
Global $vINIParam = IniReadSection($sINIFile, 'Filter')
If @error Then Exit MsgBox(16, @ScriptName, 'Ошибка чтения "uTFilter.ini"!')
If $vINIParam[3][1] Then
HotKeySet($vINIParam[3][1], '_CBStateSwitch')
$vINIParam[3][1] = True
EndIf
While ProcessExists($Process)
$hWnd = WinActivate($sTitle)
$hWndFF = WinActivate($sTitle2)
If $hWnd Then
$hTimer = TimerInit()
If $vINIParam[4][1] Then WinSetTrans($hWnd, '', $vINIParam[4][1])
$hLVCntrl = ControlGetHandle($hWnd, '', $sLVCntrl)
$iCount = ControlListView($hWnd, '', $hLVCntrl, 'GetItemCount') - 1
Dim $aLVItems[$iCount + 1]
_GUICtrlListView_BeginUpdate($hLVCntrl)
If $vINIParam[2][1] == 0 Then _GUICtrlListView_SetItemChecked($hLVCntrl, -1, False)
For $i = $iCount To 0 Step -1
$sText = ControlListView($hWnd, '', $hLVCntrl, 'GetText', $i, 0)
If StringRegExp($sText, '(?i)\.(' & $vINIParam[1][1] & ')$') Then
$aLVItems[$i] = ''
_GUICtrlListView_DeleteItem($hLVCntrl, $i)
Else
$aLVItems[$i] = $sText
EndIf
Next
_GUICtrlListView_EndUpdate($hLVCntrl)
$hButtOK = ControlGetHandle($hWnd, '', $sButtOK)
If Not _MyButton() Then ContinueLoop
$hWinProcess = _WinAPI_GetParent($hWndFF)
For $i = 0 To $iCount
If $aLVItems[$i] And Not _GUICtrlListView_GetItemChecked($hLVCntrl, _GUICtrlListView_FindText($hLVCntrl, $aLVItems[$i])) Then $aLVItems[$i] = ''
Next
_GUICtrlListView_BeginUpdate($hLVCntrl)
_GUICtrlListView_DeleteAllItems($hLVCntrl)
For $i = 0 To $iCount
_GUICtrlListView_AddItem($hLVCntrl, $aLVItems[$i])
If $aLVItems[$i] Then _GUICtrlListView_SetItemChecked($hLVCntrl, $i)
Next
ControlFocus($hWnd, '', $hButtOK)
ControlClick($hWnd, '', $hButtOK)
If Not WinWaitClose($hWnd, '', 3) Then WinClose($hWnd)
WinActivate($hWinProcess)
Else
Sleep(200)
EndIf
WEnd
Func _MyButton()
Local $aiPos, $sControl, $iPosPrevX, $iPosPrevY, $hButton, $aWndList
$aiPos = ControlGetPos($hWnd, '', $hButtOK)
$sControl = ControlGetFocus($hWnd)
If @error Then Return 0
$iPosPrevX = $aiPos[0]
$iPosPrevY = $aiPos[1]
$hButton = _GUICtrlButton_Create($hWnd, 'OK', $aiPos[0], $aiPos[1], $aiPos[2], $aiPos[3])
ControlHide($hWnd, '', $hButtOK)
ControlDisable($hWnd, '', $hButtOK)
ControlFocus($hWnd, '', $sControl)
While Sleep(10)
If Not WinExists($hWnd) Then Return 0
$aWndList = WinList($sTitle)
If $aWndList[0][0] > 1 Then
WinClose($aWndList[1][1])
WinActivate($hWndFF)
EndIf
If _GUICtrlButton_GetState($hButton) = 0x0026C Then ExitLoop
If WinActive($hWnd) And _IsPressed('0D') Then ExitLoop
$aiPos = ControlGetPos($hWnd, '', $hButtOK)
If @error Then Return 0
If $iPosPrevX <> $aiPos[0] Or $iPosPrevY <> $aiPos[1] Then ControlMove($hWnd, '', $hButton, $aiPos[0], $aiPos[1])
WEnd
Return ControlEnable($hWnd, '', $hButtOK)
EndFunc ;==>_MyButton
Func _CBStateSwitch()
If Not WinActive($hWnd) Then Return
$vINIParam[3][1] = Not $vINIParam[3][1]
_GUICtrlListView_SetItemChecked($hLVCntrl, -1, $vINIParam[3][1])
EndFunc ;==>_CBStateSwitch