Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Открытие фото программой по-умолчанию и размещение его в определенном месте экрана (http://forum.oszone.net/showthread.php?t=328292)

visors 12-07-2017 17:37 2750942

Открытие фото программой по-умолчанию и размещение его в определенном месте экрана
 
Добрый вечер.
Помогите решить проблему.

Хотел заставить скрипт Автоит - открывать фото-файлы jpg - программой по-умолчанию и размещать его в определенном месте экрана (задав размеры окна этой программы).
По идее я хотел, чтобы программа открывала фото-файл, затем размещала его в определенной части монитора, затем устанавливала определенные размеры окна.
(Адрес папки с файлами C:\111111 )
(Координаты расположения программы: 100,200 (примерно левый верхний угол).
(Размеры окна (программы по-умолчанию) 200х150. )

Подскажите - как подправить код, чтобы он открывал файлы jpg - как я описал ?

Код:

#include <File.au3>
#include <WinAPIReg.au3>
#include <WinAPIProc.au3>

Local $sDir = 'C:\111111' ; Папка
Local $sFileType = '*.jpg' ; Расширение файла для поиска
Local $aPos[4] = [100, 200, 200, 150] ; Координаты окна программы
Local $hWnd, $aFiles, $sRunProgram, $iPID, $hTimer, $aProgWindows, $sRunFile

$aFiles = _FileListToArrayRec($sDir, $sFileType, $FLTA_FILES, $FLTAR_NORECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
If @error Then Exit -1

$sRunFile = $aFiles[0] > 1 ? $aFiles[Random(1, $aFiles[0], 1)] : $aFiles[1]

$sRunProgram = _WinAPI_AssocQueryString(StringRight($sRunFile, 4), $ASSOCSTR_EXECUTABLE) ; Редактор по умолчанию, ассоциированный в ОС с данным типом
If @error Or StringRight($sRunProgram, 4) = '.dll' Then Exit -2

$iPID = Run('"' & $sRunProgram & '" "' & $sRunFile & '"')
If Not $iPID Then Exit -3

$hTimer = TimerInit()
Do ;
    $aProgWindows = _WinAPI_EnumProcessWindows($iPID)
    If Not @error Then
        For $i = 1 To $aProgWindows[0][0]
            If WinActive($aProgWindows[$i][0]) Then
                $hWnd = $aProgWindows[$i][0]
                $aProgWindows = ''
                ExitLoop 2
            EndIf
        Next
        Sleep(200)
    EndIf
Until TimerDiff($hTimer) > 5000 ; Ждем ~ 5 секунд
If Not $hWnd Then Exit -4

WinMove($hWnd, '', Default, Default, $aPos[2], $aPos[3])
If Not WinMove($hWnd, '', $aPos[0], $aPos[1]) Then Exit -5


oz84 20-09-2017 22:10 2765823

visors, почему не ShellExecute()? То же самое, только ОС всё сама сделает. В случае, если JPEG открываются стандартным средством просмотра, имя файла без расширения будет в начале заголовка окна:
Код:

$sRunFile = $aFiles[0] > 1 ? $aFiles[Random(1, $aFiles[0], 1)] : $aFiles[1]

ShellExecute($sRunFile)
If @error Then Exit -2

$hWnd = WinWait(StringRight(StringRegExpReplace($sRunFile, '^.*\\', ''), 4), '', 5)
If $hWnd = 0 Then Exit -3

If WinMove($hWnd, '', $aPos[0], $aPos[1], $aPos[2], $aPos[3]) = 0 Then Exit -4



Время: 08:50.

Время: 08:50.
© OSzone.net 2001-