none
Открыть диалог SaveFile Win7 RRS feed

  • Вопрос

  • Добрый день,уважаемые участники форума!

    Подскажите пожалуйста как в Windows 7/Windows Server 2008 на VBS (x86) вызвать стандартный диалог Save\Save As.

    Реально долго искал и пробовал.

    В Xp можно было использовать:

    Set myvar = CreateObject("SAFRCFileDlg.FileSave")
    myvar.FileType = "Recipe File"
    myvar.FileName = HMIRuntime.Tags("RecipeSelected").Read
    myvar.OpenFileSaveDlg

    Точно не работает

    Другой вариант:

    Set ObjFSO = CreateObject("UserAccounts.CommonDialog")

    ObjFSO.Filter = "Recipe Files|*.csv|Text Documents|*.txt|All Files|*.*"
    ObjFSO.FilterIndex = 1
    ObjFSO.InitialDir = "c:\"
    ObjFSO.Owner = "WinCC-Runtime - "
    IntResult = ObjFSO.ShowOpen

    Слышал, что нужно регистрировать какой-то ocx компонент, но какой конкретно не знаю.

    Приведите пожалуйста пример рабочего скрипта и настройки ОС, которые необходимо сделать.

    Заранее спасибо!

     

Ответы

  • ну тогда это вполне неплохой workaround! В конечном счете, от этого диалога внутри скрипта требуется лишь путь, по которому будет сохранен результирующий файл. А если спросить этот путь можно за пределами скрипта, то стоит попробовать. Самописный ли будет этот диалог, или может Ваша среда использует интерфейсы самой ОС, - не так важно, в скрипт все равно будет попадать уже проста строка пути.
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    Модератор
  • Посмотрите второй вариант http://www.robvanderwoude.com/vbstech_ui_fileopen.php


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    Модератор

Все ответы

  • Используйте PowerShell и класс  SaveFileDialog

     

    $SaveFileD = new-object System.Windows.Forms.SaveFileDialog
    $SaveFileD.Filter = "All files (*.*)|*.*"
    $SaveFileD.Title = "Save to a file"
    if ($SaveFileD.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK)
    {
    $FileName = $SaveFileD.FileName
    }
    

     

    Отвечающий
  • Большое спасибо за ответ!

    Дело в том, что я вызываю скрипт из SCADA-системы WinCC(SIEMENS) и мне непонятно, что объявляется через $, в любом случае этот синтаксис не поддерживается, так же как и As при объявлении Dim.

    Этот скрипт реально переписать через CreateObject??

     

     

  • про осх компоненту вроде вот тут пишут (про 7ку в последнем посте), но там тоже чтото не выходит с самим скриптом... не знай, надо смотреть.
  • Спасибо, это читал. Зарегистрировал comdlg32.ocx -успешно,comdlg32.dll-плохо,как описано в посте. Соответственно по нажатию на кнопку ничего не происходит.

     

     

  • Есть вот такое решение

    Dim Appshell, AppFolder
     
     Set Appshell = CreateObject("Shell.Application")
     Set Appfolder = Appshell.BrowseForFolder(0,"", &H0001, 17)

     

    Но, вызвается Folder Browsing, м.б. можно, изменив какие то параметры, открывать Save Dialog?

     

    Спасибо!

  • Есть вот такое решение

    Dim Appshell, AppFolder
     
     Set Appshell = CreateObject("Shell.Application")
     Set Appfolder = Appshell.BrowseForFolder(0,"", &H0001, 17)

     

    Но, вызвается Folder Browsing, м.б. можно, изменив какие то параметры, открывать Save Dialog?

    Нет. Метод BrowseForFolder предназначен только для выбора папки.
  • Igor Yumatov, по-видимому, никакого официального решения этой проблемы найти не удастся. Встречаются какие-то трюки с манипулированием лицензиями и использованием IE для таких целей, но это как-то... Может имеется какая-то возможность запрашивать путь к сохраняемому файлу из среды Вашего приложения, а в скрипт передавать в качестве параметра?
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    Модератор
  • Да это вполне возможно. Вы имеете ввиду сделать самописный диалог?
  • ну тогда это вполне неплохой workaround! В конечном счете, от этого диалога внутри скрипта требуется лишь путь, по которому будет сохранен результирующий файл. А если спросить этот путь можно за пределами скрипта, то стоит попробовать. Самописный ли будет этот диалог, или может Ваша среда использует интерфейсы самой ОС, - не так важно, в скрипт все равно будет попадать уже проста строка пути.
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    Модератор
  • Посмотрите второй вариант http://www.robvanderwoude.com/vbstech_ui_fileopen.php


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    Модератор
  • sie, полностью согласен, как раз по ссылке и можно увидеть, что привычные варианты, работающие в Windows XP и Windows Server 2003, не будут работать в Windows 7 и Windows Server 2008; только вариант с IE может прокатить, ну или пользоваться возможностями собственной среды, исполняющей скрипт.
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    Модератор