Имя: Пароль:
1C
1С v8
Вопросы про COM
, ,
0 KuJIT
 
10.12.15
17:42
Добрый вечер. Давно интересует вопрос, откуда люди берут информацию про COM? Откуда узнают, что, если, мне нужно запустить процесс А, то писать нужно Новый COMОбъект("Аблаб.алаы"). Откуда узнают, какие методы можно и нужно применять. Недавно появилась задача на печать пдф файла. Когда нагуглил работающий вариант, то нефигово удивился. Вот код:


oLocator = Новый COMОбъект("WbemScripting.SWbemLocator");
    oService = oLocator.ConnectServer("", "", "", ""); //Задания от всех пользователей
    
    oService.Security_.impersonationlevel = 3; //получаем необходимые права
    oService.Security_.Privileges.AddAsString("SeLoadDriverPrivilege");
        
    Для каждого Файл Из МассивФайлов Цикл
        Попытка
            WshShell.Run("""" + ПутьAdobeReader + """" + " /N /T " + """" + Файл.ПолноеИмя + """" + ?(ЗначениеЗаполнено(ИмяПринтера), " " + ИмяПринтера, ""), 0);
        Исключение
            Сообщить("Может быть, не найден Акробат");
            ПутьAdobeReader = МастерПоискаАкробата();
            Возврат;
        КонецПопытки;
        
        ЗаданиеДобавлено = Ложь;
        ТекущееВремя = ТекущаяДата();
        Пока Не ЗаданиеДобавлено И ТекущаяДата() < ТекущееВремя + 30 Цикл // 30 секунд на добавление задания
            ОбработкаПрерыванияПользователя();
            Для каждого ЗаданиеПечати Из oService.InstancesOf("Win32_PrintJob") Цикл
                ОбработкаПрерыванияПользователя();
                ЗаданиеДобавлено = ЗаданиеПечати.Document = Файл.Имя;
            КонецЦикла;    
        КонецЦикла;
        
        Если Не ЗаданиеДобавлено Тогда
            Сообщить("Не удалось отправить на печать файл '" + Файл.Имя + "'.", СтатусСообщения.Важное);
        КонецЕсли;
    КонецЦикла;
    
    // Ожидаем завершения печати
    Пока oService.InstancesOf("Win32_PrintJob").Count > 0 Цикл КонецЦикла;
    
    // Получаем имя процесса
    НомерСимвола = Найти(ПутьAdobeReader, "\");
    Пока НомерСимвола > 0 Цикл
        ПутьAdobeReader = Сред(ПутьAdobeReader, НомерСимвола + 1);
        НомерСимвола = Найти(ПутьAdobeReader, "\");
    КонецЦикла;
    // Убиваем процесс
    WshShell.Run("taskkill /f /im " + ПутьAdobeReader, 0);
    



Начал читать текст и понял, что ничего не понял. Так же искал что-то типа "COM Adobe reader" и ничего не получил.

В общем суть вопроса: где бы я мог найти информацию, чтобы написать такой код?
1 H A D G E H O G s
 
10.12.15
17:55
Что тебе тут непонятно?
Акробата просто пускают с командной строки, а WBEM контролирует задания на печать.
2 H A D G E H O G s
 
10.12.15
17:55
WBEM также спокойно контролировал бы задания на печать от Ворда, или Екселя.
3 Гёдза
 
10.12.15
18:13
Это секретная информация передается из уст в уста
4 su_mai
 
10.12.15
18:33
(3) Давай повествуй! Можешь считать, наши уста уже открыты :)
5 Гёдза
 
10.12.15
18:39
(4) так чувак из (0) уже все рассказал
6 sash-ml
 
10.12.15
18:46
Если ДЛЛ есть но методы неизвестны..
Один из вариантов -открываешь мсворд, нажимаешь альт+Ф11, тулз\реверенз и подгружаешь ДЛЛ, потом нажимаешь Ф2 выбираешь только что подгруженную библиотеку и читаешь все про ее методы и свойства.
7 mehfk
 
10.12.15
18:55
(6) Предлагаю попытаться воспроизвести на kernel32.dll
8 Гёдза
 
10.12.15
18:56
(6) проще в гугле спросить
9 Гёдза
 
10.12.15
18:57
(6) а как ты узнаешь какие параметры за что отвечают у функции
10 sash-ml
 
10.12.15
19:00
(7) а kernel32 сделан по технологии COM?
(9) только интуитивно. и то не факт, а дальше (8)
11 mehfk
 
10.12.15
19:04
(10) а) Ты первый сказал "DLL". б) com-сервер может и в ocx и в exe быть
12 su_mai
 
10.12.15
19:12
(6) Ну а если PE Explorer?
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс