Что нового

Как запустит Windows Explorer с приоритетом On Top

StarEdik

Новичок
Сообщения
365
Репутация
4
Надо запускать Windows Explorer с приоритетом On Top.
Но так не получается
Код:
ShellExecute('explorer.exe', @ScriptDir)
;Run("Explorer.exe /select," & @ScriptDir)

If WinWaitActive('[CLASS:ExploreWClass]', '', 5) then 
  WinSetOnTop("[CLASS:ExploreWClass]","",1)
EndIf
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 712
Окон с таким классом может быть несколько. Укажите название окна, например (для Windows 7):

Код:
[CLASS:CabinetWClass;TITLE:Desktop]
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 402
Yashied [?]
Окон с таким классом может быть несколько
Можно было бы по PID получить заголовок:

Код:
$iPID = Run("Explorer.exe " & @ScriptDir)

$hWin = _ProcessGetWindow($iPID)
$iTimer = TimerInit()

While Not IsHWnd($hWin)
	$hWin = _ProcessGetWindow($iPID)
	
	Sleep(10)
	
	If TimerDiff($iTimer) >= 5000 Then
		ExitLoop
	EndIf
WEnd

If IsHWnd($hWin) Then
	WinSetOnTop($hWin, "", 1)
EndIf

Func _ProcessGetWindow($iPID)
	Local $aWinList = WinList()
	
	For $i = 1 To $aWinList[0][0]
		If $aWinList[$i][0] <> "" And BitAND(WinGetState($aWinList[$i][1]), 2) And WinGetProcess($aWinList[$i][1]) = $iPID Then
			Return $aWinList[$i][1]
		EndIf
	Next
	
	Return SetError(1, 0, 0)
EndFunc


Но что то оно не работает с explorer.

А вот зато по названию папки можно попробовать:

Код:
Run("Explorer.exe " & @ScriptDir)
$sTitle = StringRegExpReplace(@ScriptDir, "^.*\\", "")

$hWin = WinWait('[REGEXPCLASS:(Cabinet|Explore)WClass;REGEXPTITLE:.*\Q' & $sTitle & '\E.*]', '', 5)

If $hWin Then 
  WinSetOnTop($hWin, "", 1)
EndIf
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
CreatoR
Спасибо .2-ое отличное решение.
А вот и еще пример от snoitaleR
Код:
Run("Explorer.exe "&@ScriptDir)
WinWait("[Class:CabinetWClass]")
WinSetOnTop("[Class:CabinetWClass]","",1)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 402
StarEdik [?]
вот и еще пример
Оно может не сработать в WinXP, или на папке-проводнике (хотя не уверен что такое есть в Win7).
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
CreatoR
Проверил предложанный мне скрипт snoitaleR на ХР, все ОК.
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
С помощью скрипта CreatoR запустил несколько папку-проводников с приоритетом On Top.
Как можно закрыт всех проводников запушенных скриптом с помощью закрытия одного из них.
Например.Запустили 3 проводника из скрипта с приоритетом OnTop. Закрываем одну из них , остальные две тоже закрываются .
Этот пример проводников работает на ХР, Windows 7 не пробовал.
Код:
_WinAPI_GetWorkingArea()
Func _WinAPI_GetWorkingArea() ; http://azjio.ucoz.ru/publ/vychislenie_koordinat_dochernego_okna/6-1-0-29
 Local Const $SPI_GETWORKAREA = 48
 Local $stRECT = DllStructCreate("long; long; long; long")
 Local $SPIRet = DllCall("User32.dll", "int", "SystemParametersInfo", "uint", $SPI_GETWORKAREA, "uint", 0, "ptr", DllStructGetPtr($stRECT), "uint", 0)
 If @error Then Return 0
 If $SPIRet[0] = 0 Then Return 0
 Local $sLeftArea = DllStructGetData($stRECT, 1)
 Local $sTopArea = DllStructGetData($stRECT, 2)
 Local $sRightArea = DllStructGetData($stRECT, 3)
 Local $sBottomArea = DllStructGetData($stRECT, 4)
 Local $aRet[4] = [$sLeftArea, $sTopArea, $sRightArea, $sBottomArea]
 Global $x = @DesktopWidth /5
 Global $y = (@DesktopHeight - (@DesktopHeight - $sBottomArea))/3
 ;$x = @DesktopWidth /5
;$y = (@DesktopHeight-30)/3; 30 -Высота панеля задач (приблизительно)
 Return $aRet
EndFunc


Run("Explorer.exe " & @ProgramFilesDir)
$sTitle = StringRegExpReplace(@ProgramFilesDir, "^.*\\", "")
$hWin = WinWait('[REGEXPCLASS:(Cabinet|Explore)WClass;REGEXPTITLE:.*\Q' & $sTitle & '\E.*]', '', 5)

If $hWin Then
	WinMove ($sTitle, "", @DesktopWidth - $x, 0, $x, $y)
	WinSetOnTop($hWin, "", 1)
EndIf

Sleep(100)
Run("Explorer.exe " & @TempDir)
$sTitle2 = StringRegExpReplace(@TempDir, "^.*\\", "")
$hWin2 = WinWait('[REGEXPCLASS:(Cabinet|Explore)WClass;REGEXPTITLE:.*\Q' & $sTitle2 & '\E.*]', '', 5)

If $hWin2 Then
	WinMove ($sTitle2, "", @DesktopWidth - $x, $y, $x, $y)
	WinSetOnTop($hWin2, "", 1)
EndIf

Sleep(100)
Run("Explorer.exe " & @DesktopDir)
$sTitle3 = StringRegExpReplace(@DesktopDir, "^.*\\", "")
$hWin3 = WinWait('[REGEXPCLASS:(Cabinet|Explore)WClass;REGEXPTITLE:.*\Q' & $sTitle3 & '\E.*]', '', 5)

If $hWin3 Then
	WinMove ($sTitle3, "", @DesktopWidth - $x, $y * 2, $x, $y)
	WinSetOnTop($hWin3, "", 1)
EndIf
 
Верх