Что нового

Сворачивание вызванного окна в трей

Visors

Новичок
Сообщения
58
Репутация
0
Версия AutoIt: 3.3.14.2

Описание:
Я открываю случайный файл C:\1\ в программе C:\Program Files\Paint.NET\PaintDotNet.exe
Подскажите, пожалуйста - как автоитом тут же свернуть открытое окно - в трей ?

Примечания:
Код открытия случайного файла из папки у меня есть.
Код:
#include <file.au3>
$sPath = 'C:\1'
$aFiles = _FileListToArray($sPath)
$iRandomFile = Random(1, $aFiles[0], 1)
$iRun=Run( 'C:\Program Files\Paint.NET\PaintDotNet.exe  '& $sPath&'\'&$aFiles[$iRandomFile])


Вопрос в том, как свернуть открывающееся окно - в трей ?
(Название процесса в диспетчере задач - PaintDotNet.exe)
 
A

Alofa

Гость
Код:
$iRun = Run('C:\Program Files\Paint.NET\PaintDotNet.exe  "' & $sPath & '\' & $aFiles[$iRandomFile] & '"', '', @SW_MINIMIZE)
 
Автор
V

Visors

Новичок
Сообщения
58
Репутация
0
Alofa , не работает.

Программа PaintDotNet.exe открывается на весь экран, и в трей - не сворачивается.

(пробовал вместо PaintDotNet.exe - запустить notepad.exe. В этом случае код - просто сворачивает notepad - оставляя его отображение на панели задач. Но в трей - тоже не сворачивает)
 

NickSpirit

Знающий
Сообщения
44
Репутация
5
А иконка Вашей программы вообще в трее присутствует? Просто если её там нет то я не знаю способа как ее туда добавить. А вот если есть может быть есть смысл попробовать использовать
Код:
@SW_HIDE


Но не факт что поможет.


Добавлено:
Сообщение автоматически объединено:

Кстати вот в этой теме вроде бы как описан способ помещения окна в трей
http://autoit-script.ru/index.php?topic=324.0
 
Автор
V

Visors

Новичок
Сообщения
58
Репутация
0
NickSpirit , замена @SW_MINIMIZE на @SW_HIDE - не работает.

По ссылке приведен скрипт, который сворачивает в трей некое окно под названием GUI (для этого надо дополнительно щелкать мышкой по кнопке сворачивания открывшегося окна).
Код:
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <Constants.au3>
;

Opt("TrayMenuMode", 1)
Opt("TrayOnEventMode", 1)

$hGUI = GUICreate("Minimize to Tray Example", 300, 200)

$RestoreItem = TrayCreateItem("Restore")
TrayItemSetOnEvent(-1, "_RestoreFromTray_Proc")

TraySetOnEvent($TRAY_EVENT_PRIMARYUP, "_RestoreFromTray_Proc")
TraySetClick(16)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $GUI_EVENT_MINIMIZE
            GUISetState(@SW_HIDE)
            TraySetState(1)
    EndSwitch
WEnd

Func _RestoreFromTray_Proc()
    If BitAND(WinGetState($hGUI), 2) = 2 Then Return
    
    TraySetState(2)
    GUISetState(@SW_SHOW)
    GUISetState(@SW_RESTORE)
EndFunc


Но у меня же сворачиваться должен процесс под названием PaintDotNet.exe
Куда поставить в этом коде значение PaintDotNet.exe ?
 

NickSpirit

Знающий
Сообщения
44
Репутация
5
Попробуйте так.

Код:
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <file.au3>
Opt("WinTitleMatchMode",2)
Opt("TrayMenuMode", 1)
Opt("TrayOnEventMode", 1)
HotKeySet("{End}","_Exit")
$sPath = 'C:\1'
$aFiles = _FileListToArray($sPath)
$iRandomFile = Random(1, $aFiles[0], 1)
$iRun=Run( 'C:\Program Files\Paint.NET\PaintDotNet.exe  '& $sPath&'\'&$aFiles[$iRandomFile])
WinActivate("paint")
WinWaitActive("paint")
$hWindow=WinGetHandle("paint")

Global $sCurrent_Title = ""
_MinimizeWindow_Proc()
$RestoreItem = TrayCreateItem("Restore")
TrayItemSetOnEvent(-1, "_RestoreFromTray_Proc")
TraySetOnEvent($TRAY_EVENT_PRIMARYUP, "_RestoreFromTray_Proc")
While 1
	Sleep(100)
WEnd

 Func _Exit()
	Exit 0
 EndFunc

Func _RestoreFromTray_Proc()
	If BitAND(WinGetState($hWindow), 2) = 2 Then Return
	TraySetState(2)
	WinSetState($hWindow,"",@SW_SHOW)
	WinSetState($hWindow,"",@SW_RESTORE)
	WinSetState($hWindow,"",@SW_MAXIMIZE)
EndFunc

Func _MinimizeWindow_Proc()
    If $sCurrent_Title <> "" Then
        Opt("TrayIconHide", 1)
        WinSetState($sCurrent_Title, "", @SW_SHOW)
        WinActivate($sCurrent_Title)
        $sCurrent_Title = ""
        Return
    EndIf

    $sCurrent_Title = WinGetTitle($hWindow)
    If $sCurrent_Title = "" Then Return

    Opt("TrayIconHide", 0)
    WinSetState($sCurrent_Title, "", @SW_HIDE)
    TraySetToolTip($sCurrent_Title)
EndFunc
 
Автор
V

Visors

Новичок
Сообщения
58
Репутация
0
NickSpirit, теперь заработало.
Спасибо за ответ.
 
Верх