Страницы: 1
RSS
Подписание файла электронно цифровой подписью
 
Всем доброго времени суток..может кто сталкивался с проблемкой подписания файлов электронно-цифровой подписью (ЭЦП). Ключ в таблетке.  
Задача. Необходимо подписать файл (имя файла может быть любым *.xls) который находиться в C:\temp    
 
меню для подписания ЭЦП, отображается в контекстном меню когда щелкаешь правой кнопкой мыши на файле (Подписать ЭЦП)  
 
Может у кого есть варианты решения данной задачки?
 
Если честно, то почти ничего не понятно из задачки. Да и похоже, что она не совсем про эксель.
 
В общем файл создается из книги Excel, далее открывается директория куда он сохраняется, и выводится контекстное меню подписание данного файла электронной подписью.  
 
Прикладываешь кнопку, файл подписывается и отправляется далее для работы.  
Т.Е. необходимо запустить приложение подписания файла после того как он сохранился в директории.
 
Excel F1 shell
 
или так  
http://vbex.ru/index.php/VBA/Excel/Access/Word/Windows_API/Shell#Starting_Another_Application  
Sub RunCharMap()  
   On Error Resume Next  
   Program = "notepad.exe"  
   TaskID = Shell(Program, 1)  
   If Err <> 0 Then  
       MsgBox "Cannot start " & Program, vbCritical, "Error"  
   End If  
End Sub
 
slav, все отлично работает , но есть один нюанс , у программы  которая подписывает  подписью нет .exe файла. Запускается из командной строки.  
Пробовал делать через Shell и ключ реестра HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\Cifral    
но не получилось. Помогите , может кто сталкивался с данной проблемой. Плиииз
 
{quote}{login=khab}{date=11.02.2011 05:25}{thema=}{post}slav, все отлично работает , но есть один нюанс , у программы  которая подписывает  подписью нет .exe файла. Запускается из командной строки.  
Пробовал делать через Shell и ключ реестра HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\Cifral    
но не получилось. Помогите , может кто сталкивался с данной проблемой. Плиииз{/post}{/quote}  
 
Cifral -  программа для подписания файла ПРИНЦИП РАБОТЫ(правой кнопкой мыши щелкаешь на файле, выбираешь в меню "Подписать файл" высвечивается окно ПРИЛОЖИТЕ КНОПКУ)
 
{quote}{login=khab}{date=11.02.2011 05:28}{thema=Re: }{post}{quote}{login=khab}{date=11.02.2011 05:25}{thema=}{post}з{/post}{/quote}правой кнопкой мыши щелкаешь на файле, выбираешь в меню "Подписать файл" высвечивается окно ПРИЛОЖИТЕ КНОПКУ){/post}{/quote}  
А к Excel это имеет КАКОЕ отношение? То, что Вы кликаете на файл Excel?
 
Это я описал принцип работы самой программы.  
А отношение к Excel, такое , что запуск приложения должен производится из кода VBA.
 
{quote}{login=}{date=12.02.2011 03:15}{thema=}{post}А отношение к Excel, такое , что запуск приложения должен производится из кода VBA.{/post}{/quote}  
:-) Не убедили - VBA используется не только в Excel. Например Word, другие приложения.
 
Я пытаюсь запустить приложение (без EXE файла) из файла Excel. И как это правильно сделать? Что надо обязательно доказать что  это  принадлежность к Excel?!?
 
Да шутит Юрий. У нас нет вашего "не .exe" файла и ключа-таблетки нет. И по фотографии мы не умеем гадать. Мож там из dll запускается функция АПИ. Тогда нужно знать ее название и синтаксис вызова.
Я сам - дурнее всякого примера! ...
 
{quote}{login=khab}{date=12.02.2011 04:28}{thema=}{post}Я пытаюсь запустить приложение (без EXE файла) из файла Excel. И как это правильно сделать? Что надо обязательно доказать что  это  принадлежность к Excel?!?{/post}{/quote}  
Ваша прога позволяет ставить ЦЭП из открытого и на открытый в данный момент файл - в конкретном случае на файл XL? Если нет,то причем здесь XL, т.к. в своем большинстве подобные проги (ЕМНИП) срабатывают по клику ПКМ на  неактивном/закрытом файле в проводнике или обозревателе файлов самой запущенной программы ЦЭП...
 
Файл обязательно должен быть закрытый .  ЭЦП  подписывается через ПКМ на НЕактивном файле XLS , выпадает окно "Приложите ЭЦП". Вот как сделать чтобы после закрытия файла xls, выводилось окно "приложите ЭЦП" применимое именно к  этому файлу
 
нашел  на сайте производителя информацию для запуска из командной строки.  
Для вызова подписывания файла ИМЯ_ФАЙЛА:    
rundll32.exe C:\SberSign\WinSign.dll,SignFile ИМЯ_ФАЙЛА  
Помогите правильно запустить  через SHELL?
 
Попробуйте так:  
Call Shell("rundll32.exe C:\SberSign\WinSign.dll,SignFile ИМЯ_ФАЙЛА ", 1)  
Проверить нет возможности
 
{quote}{login=Юрий М}{date=14.02.2011 11:58}{thema=}{post}Попробуйте так:  
Call Shell("rundll32.exe C:\SberSign\WinSign.dll,SignFile ИМЯ_ФАЙЛА ", 1)  
Проверить нет возможности{/post}{/quote}  
 
Пишет ошибку "не найден указанный модуль С:\sberSign"    
Хотя путь верный, и драйвера все находятся в нем.  
Попробовал вместа имени файла путь прописать, все равно ругается.в чем проблема может быть?  
Еще прочитал что как-то через код реестра можно запустить?? кто-нибудь в курсе?
 
Если исходить из этого: "правой кнопкой мыши щелкаешь на файле, выбираешь в меню "Подписать файл" высвечивается окно ПРИЛОЖИТЕ КНОПКУ", то получается, что приложение у Вас УЖЕ запущено. Посмотрите в процессах. Тогда нет необходимости запускать его снова.
 
оно закрывается каждый раз когда кнопку прикладываешь и файл подписался.  
что бы подписать другой файл надо снова вызывать меню ПКМ.
 
Ну выложите где-нить Ваш WinSign.dll(если он больше 100кб). А мы попробуем чет придумать. Иначе этой теме конца не будет.
Я сам - дурнее всякого примера! ...
 
Сам нашел в инете. Вот так не ругается:  
Public Sub www()  
Call Shell("rundll32.exe C:\SberSign\WinSign.dll,c:\list.xls", 1)  
End Sub
Я сам - дурнее всякого примера! ...
 
Завтра проверю, отпишусь.
 
Теперь ругается на файл который прописываю  на диске С:  "не найден файл".хотя все в наличии присутствует.  
Через ключ реестра можно как нибудь замутить?
 
Все сделал. Рабочий код под версию программы 5.4.4 Программа Sbersign  
 
Public Sub www()  
Call Shell("rundll32.exe C:\SberSign\WinSign.dll,SignFile c:\rt01.xls", 1)  
End Sub  
 
 
есть небольшой нюанс. КАК СДЕЛАТЬ ЧТОБЫ ПОДПИСЫВАЛИСЬ ВСЕ ФАЙЛЫ .XLS  в директории С:\  
*,%,$  ничего не помагает. Help ......!!!!
 
1.Получить список всех файлов *.xls из директории.  
2.В Public Sub www() организовать цикл по этим файлам.  
3.В цикл вложить то что у Вас уже есть Call Shell(.......) (если это работает).
 
Public Sub www()  
   Dim MyPath$, MyName$  
   MyPath = "c:\"  
   MyName = Dir(MyPath & "\*.xls")  
   Do While MyName <> ""  
       Call Shell("rundll32.exe C:\SberSign\WinSign.dll,SignFile c:\" & MyName, 1)  
       MyName = Dir  
   Loop  
End Sub
Я сам - дурнее всякого примера! ...
 
Вы лишили Человека радости познания. :)
 
Мне эта тема осточертела. Может хоть так закончится.
Я сам - дурнее всякого примера! ...
 
Не надо так нервничать.. Тема закрыта. Всем  огромное спасибо за участие.
 
Уважаемый автор темы, можете поделится свой версией этой dll ?  
У меня предложенный вариант не работает, но и версия у меня 5.1.2
Страницы: 1
Читают тему
Наверх