Имя: Пароль:
1C
 
не могу выполнить код VBScript из 1С
0 ksa-nsk
 
30.03.17
17:05
Всех приветствую, хочу при нажатии кнопки принтскрин в 1С сохранить изображение в файл. Нашел скрипт на VBS (https://support.microsoft.com/ru-ru/help/818410/how-to-save-a-graphic-from-the-clipboard-to-a-file-by-using-visual-basic-.net-or-visual-basic-2005), но как-то не могу выполнить в 1С, мой код:

Процедура ПриОтжатииКнопкиКлавиатуры(Конт,код, _а, _ш, _к, Символ, ФСО) //  44 - принтскрин
    Если код = 44 Тогда
        Попытка
            ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
            ScrptCtrl.Language="VBScript";
            ScrptCtrl.AddCode("
            |    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            |        If Not System.Windows.Forms.Clipboard.GetDataObject() Is Nothing Then
            |            Dim oDataObj As IDataObject = System.Windows.Forms.Clipboard.GetDataObject()
            |            If oDataObj.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap) Then
            |                Dim oImgObj As System.Drawing.Image = oDataObj.GetData(DataFormats.Bitmap, True)
            |                oImgObj.Save("+ """" + "c:\Test.bmp" + """" + ", System.Drawing.Imaging.ImageFormat.Bmp)
            |            End If
            |        End If
            |    End Sub
            |");
            //Текст=СокрЛП(ScrptCtrl.Run("Button1_Click"));
            //ScrptCtrl.Call("Button1_Click");
            ScrptCtrl.Run("Button1_Click");
        Исключение
            Сообщить(ОписаниеОшибки());
            Возврат;
        КонецПопытки;
КонецЕсли;
КонецПроцедуры()
1 Волшебник
 
модератор
30.03.17
17:05
что пишет?
2 ksa-nsk
 
30.03.17
17:47
Ошибка компиляции Microsoft VBScript: Предполагается наличие ')'

хотя скобки все нормально стоят.
Комментарил тело кода, по ходу ругается на первую строку, где объявляется функция VBS
3 пипец
 
30.03.17
17:52
4 ksa-nsk
 
30.03.17
18:03
нет, я ссылку приложил, мне надо по кновке PrntScrn изображение в файл сохранить. Сама процедура с сайта микрософт, а вот интегрировать ее в 1С - затык какой-то со скобкой((
5 Flip
 
30.03.17
18:06
(0) Можно попробовать в экселе создать макрос, запихнуть туда код на VB и выполнить его, если есть синтаксические ошибки то в VB-шном дебагере они будут показаны.
6 Смотрящий
 
30.03.17
18:07
КонецПроцедуры() - не торкает ?
7 Волшебник
 
модератор
30.03.17
18:18
(4) Попробуй просто создать файл vbs и проверить код
8 Вафель
 
30.03.17
18:21
а может нужно процедуру со скобками вызывать?
9 Вафель
 
30.03.17
18:21
Button1_Click()
10 etc
 
30.03.17
18:25
у тебя с кавычками беда.
11 etc
 
30.03.17
18:26
а может и нет
12 youalex
 
30.03.17
18:51
(0) > Нашел скрипт на VBS
VB <> VBS
13 Zhuravlik
 
30.03.17
19:04
14 Torquader
 
31.03.17
02:11
Это чего за хрень ?
Dim oDataObj As IDataObject = System.Windows.Forms.Clipboard.GetDataObject()
Так ни в Vb ни в VbScript не пишут.

Далее, в VbScript, в отличие от Vb нет типов вообще, то есть As и что после него просто удалить.
Ну и Dim заменить на Set.

Может быть, что-то и получится.

Потом, где мы хотим это получать ?
System.Windows.Forms.Clipboard.GetDataObject()
Это, как бы, NET-овская фича.
15 Web00001
 
31.03.17
06:13
16 ksa-nsk
 
31.03.17
10:24
(15) хороши велики, только не едет (скачать готовые обработки возможности нет). В принципе, весь код ниже, но вчем затык не догоняю((. Может Текст надо как-то по-другому в шел передавать?

Процедура ПриОтжатииКнопкиКлавиатуры(код, _а, _ш, _к)
    Если код = 44 Тогда
        ИмяФайла = "D:\screenshot.jpg";
        
        oShell = CreateObject("WSCript.shell");
        Текст = """& {[void][Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms');"
        + "$size = [Windows.Forms.SystemInformation]::VirtualScreen;"
        + "$bitmap = new-object Drawing.Bitmap $size.width, $size.height;"
        + "$graphics = [Drawing.Graphics]::FromImage($bitmap);"
        + "$graphics.CopyFromScreen($size.location,[Drawing.Point]::Empty, $size.size);"
        + "$graphics.Dispose();"
        + "$bitmap.Save('"+ИмяФайла+"');"
        + "$bitmap.Dispose()}""";        
        
        oShell.Run(Текст);
    КонецЕсли;
КонецПроцедуры
17 Вафель
 
31.03.17
10:29
если хочешь юзать .нет, то есть тут одна библиотечка
18 ksa-nsk
 
31.03.17
10:33
(17) да без разницы, что юзать, только без доп. установки на комп. задача в принципе простая - по нажатию кнопки принтскрин сохранить изображение в файл. Код вроде рабочий, но только как его выполнить в 1С не допираю.
19 Вафель
 
31.03.17
10:35
(18) если с проводника запустить то отрабатывает?
20 ksa-nsk
 
31.03.17
10:41
запихнул в командный файл
wscript.exe {[void][Reflecti.....

вылетает с ошибкой "Отсутствует исполняющее ядро для расширения имени файла .Forms);$size"
21 Вафель
 
31.03.17
10:44
(20) откуда ты тогда знаешь, что код рабочий?
22 ksa-nsk
 
31.03.17
10:44
Интересно, а у кого-нибудь такой код выполняется без ошибок? Если да, буду у себя копать...
23 ksa-nsk
 
31.03.17
11:00
(21) этот код везде один
http://catalog.mista.ru/public/353853/
http://sysadmins.ru/topic396231.html
http://1c.ppt.ru/public/353853/
только как правильно скрипт запустить в шеле не указано, может какой бубен еще нужен(
24 Вафель
 
31.03.17
11:02
так это же PowerShell, а не vbscript
25 Вафель
 
31.03.17
11:04
а vbscript используется только для запуска пауэршелл скрипта
26 Вафель
 
31.03.17
11:04
хотя можно и через ЗапуститьПриложение
27 DrZombi
 
гуру
31.03.17
11:07
(0) На сервере не взлетит :)
28 Ёпрст
 
31.03.17
11:11
(0)
если картинка нужна только окна 1с, то так, например, тупо формексом + метод ПолучитьКартинку



Процедура ПолучитьКартинку(Карт)
// процедура вызывается из объекта Картинка, расположенного на печатной форме
       Перем Лево,Верх,Ширина,Высота;
       ФормаРасш = СоздатьОбъект("РасширениеФормы");
       АтрТекст = СоздатьОбъект("АтрибутФормы");
       АтрТекст.УстановитьАтрибут(Форма,"Табл");
       АтрТекст.ПолучитьКоординаты(Лево,Верх,Ширина,Высота);
       Карт.УстановитьКартинку(ФормаРасш.ПолучитьКартинку(Лево,Верх,Ширина,Высота));
КонецПроцедуры
29 Вафель
 
31.03.17
11:17
пауэршелл скрипты запускаются так
Powershell -File ./systemInfo.ps1
30 eklmn
 
гуру
31.03.17
14:49
(0) что за бред вообще? )) как можно заниматься тупым копи-пастом?
При чем тут VBS, если это код VB?
Пример показан для размышления, что это функция якобы висит на кнопке Button1 и сохраняет в файл из буфера при нажатии.
даже если ты назовешь правильно главную функцию
Public Sub Main()
то все равно работать так не будет

примерно это, но надо компилить в exe-файл в самой Visual Studio

Public Sub Main(args() As string)
            If Not System.Windows.Forms.Clipboard.GetDataObject() Is Nothing Then
                Dim oDataObj As IDataObject = System.Windows.Forms.Clipboard.GetDataObject()
                If oDataObj.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap) Then
                    Dim oImgObj As System.Drawing.Image = oDataObj.GetData(DataFormats.Bitmap, True)
                    'To Save as Bitmap
                    oImgObj.Save("c:\Test.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
                    'To Save as Jpeg
                    oImgObj.Save("c:\Test.jpeg", System.Drawing.Imaging.ImageFormat.Jpeg)
                    'To Save as Gif
                    oImgObj.Save("c:\Test.gif", System.Drawing.Imaging.ImageFormat.Gif)
                End If
            End If

End Sub