Приветствую вас, знатоки эксель. Помогите с решением проблемы.
Как заставить макрос - при открытии файла - либо открывать файл 1.mp3 (не в эксель, а в любой сторонней программе) если он еще не запущен? Но если этот файл уже запущен и проигрывается в Windows - то макрос не должен производить никаких действий. То есть видимо макрос - должен как-то определять наличие или отсутствие запущенного файла в операционной системе - по его пути в каталоге.
Приветствую вас, знатоки эксель. Помогите с решением проблемы.
Как заставить макрос - при открытии файла - либо открывать файл 1.mp3 (не в эксель, а в любой сторонней программе) если он еще не запущен? Но если этот файл уже запущен и проигрывается в Windows - то макрос не должен производить никаких действий. То есть видимо макрос - должен как-то определять наличие или отсутствие запущенного файла в операционной системе - по его пути в каталоге.cerber412
Не уложится задача в VBA. Исходя из примера, мультимедийные файлы не блокируются при воспроизведении, то есть просто проверить не использует ли кто этот файл, не получится. Также как и получить из процессов, не ипользует ли один из них искомый файл, тоже не просто, если возможно ваще.
Можно схитрить, и открывать файлы не с "локального диска", а по сети (\\localhost\c$\1\1.mp3), тогда можно получить список файлов , ну и обработать его, правда при этом надо иметь привелегии администратора. Пример вывода списка открытых ресурсов [vba]
Код
Set objConnection = GetObject("WinNT://localhost/LanmanServer") Set colResources = objConnection.Resources For Each objResource In colResources debug.print objResource = objResource.Path Next
[/vba]
cerber412,
Не уложится задача в VBA. Исходя из примера, мультимедийные файлы не блокируются при воспроизведении, то есть просто проверить не использует ли кто этот файл, не получится. Также как и получить из процессов, не ипользует ли один из них искомый файл, тоже не просто, если возможно ваще.
Можно схитрить, и открывать файлы не с "локального диска", а по сети (\\localhost\c$\1\1.mp3), тогда можно получить список файлов , ну и обработать его, правда при этом надо иметь привелегии администратора. Пример вывода списка открытых ресурсов [vba]
Код
Set objConnection = GetObject("WinNT://localhost/LanmanServer") Set colResources = objConnection.Resources For Each objResource In colResources debug.print objResource = objResource.Path Next
Так пойдет? (ниже только управляющий макрос) [vba]
Код
Public Sub Processe() Set d = CreateObject("scripting.Dictionary") winOutputType.winHandleClassTitle = 5 GetWinInfo 0&, 0, winOutputType.winHandleClassTitle
' Чтобы увидеть список процессов [a5].Resize(d.Count) = Application.Transpose(d.keys) [b5].Resize(d.Count) = Application.Transpose(d.items)
'Проверка на наличие процесса в списке: If InStr(1, Join(d.items, vbLf), "Сюда то что ищем", vbTextCompare) = 0 Then 'If InStr(1, Join(d.items, vbLf), "Барс", vbTextCompare) = 0 Then PlayMP3 MsgBox "Done" Else MsgBox "File is already running" End If End Sub
[/vba] как работать: Запускаем файл На листе 1 в ячейку А1 - пишем полный путь. Запускаем макрос Processe - Он запустит файл, и выгрузит список всех процессов на лист Потом находим нужное имя в столбце В - и вставляем его вместо фразы Сюда то что ищем. Сохраняем файл Все
Так пойдет? (ниже только управляющий макрос) [vba]
Код
Public Sub Processe() Set d = CreateObject("scripting.Dictionary") winOutputType.winHandleClassTitle = 5 GetWinInfo 0&, 0, winOutputType.winHandleClassTitle
' Чтобы увидеть список процессов [a5].Resize(d.Count) = Application.Transpose(d.keys) [b5].Resize(d.Count) = Application.Transpose(d.items)
'Проверка на наличие процесса в списке: If InStr(1, Join(d.items, vbLf), "Сюда то что ищем", vbTextCompare) = 0 Then 'If InStr(1, Join(d.items, vbLf), "Барс", vbTextCompare) = 0 Then PlayMP3 MsgBox "Done" Else MsgBox "File is already running" End If End Sub
[/vba] как работать: Запускаем файл На листе 1 в ячейку А1 - пишем полный путь. Запускаем макрос Processe - Он запустит файл, и выгрузит список всех процессов на лист Потом находим нужное имя в столбце В - и вставляем его вместо фразы Сюда то что ищем. Сохраняем файл Все
(не в эксель, а в любой сторонней программе) если он еще не запущен?
Так Вы сначала попробуйте - потом пишите . Проверяется название всех процессов не только книг. А Excel - запускает файл в программе по умолчанию, например у меня VLC. Смотрится название окна, любого процесса.
(не в эксель, а в любой сторонней программе) если он еще не запущен?
Так Вы сначала попробуйте - потом пишите . Проверяется название всех процессов не только книг. А Excel - запускает файл в программе по умолчанию, например у меня VLC. Смотрится название окна, любого процесса.SLAVICK
Так с процессами и у мегя проблем нет. WMI выдает, но вот то какой файл исполняется, я не увидел ни у себя ни у вас. Может не внимательно смотрел тогда прошу простить.
Так с процессами и у мегя проблем нет. WMI выдает, но вот то какой файл исполняется, я не увидел ни у себя ни у вас. Может не внимательно смотрел тогда прошу простить.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
но вот то какой файл исполняется, я не увидел ни у себя ни у вас
а я увидел. фишка в том что у меня в коде - считывается название окна. Так вот файл назван ссс.mp3 а на самом деле отображается (к примеру) БАРС .... туманы... - разницу улавливаете?
но вот то какой файл исполняется, я не увидел ни у себя ни у вас
а я увидел. фишка в том что у меня в коде - считывается название окна. Так вот файл назван ссс.mp3 а на самом деле отображается (к примеру) БАРС .... туманы... - разницу улавливаете?SLAVICK
За идею. 5, за универсальность оценку снижаю :-). Не все проигрывателм показывают то что играют. на 10ке по умолчанию Groove Music и он ничего не кажет. Вот я ничего и не увидел касательно файла.
SLAVICK,
За идею. 5, за универсальность оценку снижаю :-). Не все проигрывателм показывают то что играют. на 10ке по умолчанию Groove Music и он ничего не кажет. Вот я ничего и не увидел касательно файла.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Вторник, 03.01.2017, 22:48
Ну да, это неправильные пчелы, они несут неправильный мед :-)
Если cerber412 удовлетворен, то я просто предупредил, что метод не всегда сработает, но возможно в их условиях все ок и сейчас и в дальнейшем. Разве что тема скорее к вопросам по VBA.
SLAVICK,
Ну да, это неправильные пчелы, они несут неправильный мед :-)
Если cerber412 удовлетворен, то я просто предупредил, что метод не всегда сработает, но возможно в их условиях все ок и сейчас и в дальнейшем. Разве что тема скорее к вопросам по VBA.bmv98rus
Замечательный Временно просто медведь , процентов на 20.