Автоматизация PGP Desktop

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
akm-2005
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 04.03.2016 (Пт) 11:05

Автоматизация PGP Desktop

Сообщение akm-2005 » 14.03.2016 (Пн) 13:43

Уважаемые, есть вопрос. Имеется PGP Desktop версии 10.2.0 сборки 1672, pgp-диск, созданный с его помощью, и VB6.

Задачи - автоматизировать из VB6 процессы:
1) mount-инга этого диска без ввода пароля в диалоговом окне,
2) unmount-инга только этого диска (а не всех смонтированных).

Пока выходит криво. Работает только урезанное решение обеих задач:
Код: Выделить всё
                               
' MOUNT
' Для pgp нет нормальной командной строки, поэтому для mount конкретного диска придется вызывать окно ввода пароля
Set objShellApp = CreateObject("Shell.Application")
ret = objShellApp.ShellExecute("C:\PGP\PGPDisk50.pgd", "", "", "open", 1)  ' выводит диалоговое окно для пароля, к которому "не подступиться" из VB6
Set objShellApp = Nothing
...
' UNMOUNT
' Для unmount всех (по одному не получилось!) pgp-дисков получилось воспользоваться ТОЛЬКО этой командой
' (горячая клавиша ctrl+shift+u, назначенная в опциях PGP Desktop)
Set WsShell = CreateObject("WScript.Shell")
WsShell.SendKeys "^+U"
Set WsShell = Nothing

На данный момент не удались попытки:
1) использовать командную строку (и через консоль, и из VB6 через ShellExecute) для ввода пароля при монтировании, для размонтирования,
2) использовать FindWindow, GetWindow, SetWindowText для адресного вписывания пароля в контрол диалогового окна,
2) использовать SendKeys, keybd_event для эмулирования ввода пароля нажатием на клавиши клавиатуры (диалоговое окно пароля, судя по инфе Spy++, очень "стойкое").

Подскажите пжст код, который сработает в этих 2 случаях для решения указанных двух задач. Спасибо.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Автоматизация PGP Desktop

Сообщение alibek » 14.03.2016 (Пн) 16:04

Использовать в подобных утилитах эмуляцию клавиатуры не стоит.
Если в PGP есть подобная функция, доступная через API или ключи командной строки — значит нужно использовать эти способы.
Если ее нет — значит это сделать нельзя.
Lasciate ogni speranza, voi ch'entrate.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Автоматизация PGP Desktop

Сообщение ger_kar » 15.03.2016 (Вт) 6:36

А FindWindow, GetWindow вообще ничего не находят?
Бороться и искать, найти и перепрятать

akm-2005
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Автоматизация PGP Desktop

Сообщение akm-2005 » 15.03.2016 (Вт) 10:21

alibek, спасибо за ответ. PGP перестал поддерживать командную строку после 6 версии. Та, что есть сейчас - PGP Command Line - это серверное приложение.
PGP SDK не содержит описания процедур работы с дисками, только с мылом/файлами...
Я все-таки надеюсь, что консольное управление есть, просто не документировано.
Возможно, кто-то продвинулся вглубь PGP Desktop дальше меня, и знает - какие консольные команды есть... На pgpru.com не смог найти ничего обнадеживающего пока.

Но и по второму направлению - работе с pgp- диском "извне" - тоже стараюсь что-то найти.
ger_kar, FindWindow и GetWindow все находят (и окно, и поле ввода пароля), но отправить туда что-то не получается!
Spy++ показывает, что диалоговое окно (класс "#32770 (Диалоговое окно)") в момент ввода с клавиатуры любого символа пароля (буквы или цифры) получает следующее:

00040884 S message: 0x040C [Пользовательские: WM_USER+12] wParam: 00030B4 lParam: 00000000
00040884 R message: 0x040C [Пользовательские: WM_USER+12] lResult: 00000001
00040884 S message: 0x040C [Пользовательские: WM_USER+12] wParam: 00030B4 lParam: 00000000
00040884 R message: 0x040C [Пользовательские: WM_USER+12] lResult: 00000001

и так на каждый (любой!) символ. Окно поля/контрола ввода (класс "RichEdit20A") вообще не получает клавиатурных событий.
Хотелось бы понять - как можно отправить в окно свои символы.
Помогите пжст. Спасибо.

UPD Обнаружил, что поле ввода при нажатии на клавиатуре кнопки получает сообщение WM_GETDLGCODE c wParam = виртуальному коду нажатой клавиши.
Все это здорово, но как бы отправить окну это сообщение?
Попробовал отправить SendMessage с параметрами, скопированными из подсмотренных Spy++ сообщений:
Код: Выделить всё
Const WM_GETDLGCODE = &H87
MsgBox SendMessage(lhwnd1, WM_GETDLGCODE, &H4A, &H33DF20)
, Spy++ регистрирует обработку сообщения (показывает те же данные, только lParam почему-то 33DF5C, а не 33DF20, как тут), но в поле пароля ничего не меняется...
Возможно, WM_GETDLGCODE тут не поможет из-за этого: "The WM_GETDLGCODE message and the returned values are useful only with user-defined dialog box controls or standard controls modified by subclassing."?
Помогите пжст.

akm-2005
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Автоматизация PGP Desktop

Сообщение akm-2005 » 15.03.2016 (Вт) 14:28

Получилось отправлять символы в окно с помощью GenerateKeyboardEvent.

Просьба помочь с unmount-ингом диска.
У файла .pgd после монтирования диска меняется контекстное меню - вместо "PGP Desktop - Mount disk" появляется "PGP Desktop - Unmount disk". Может, кто-то знает, как вызвать из VB6 этот элемент контекстного меню?
В Shell.Application через objFolderItem.Verbs видно только стандартные команды...
Через монитор процессов вижу, что при унмоунтинге диска активничает процесс PGPmnApp.exe... Но через консоль к нему не подступиться - не понимает никаких команд...((

akm-2005
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Автоматизация PGP Desktop

Сообщение akm-2005 » 15.03.2016 (Вт) 15:45

И еще нашел (может, кому-то полезным будет).
Вот тут и тут увидел команду для PGPmnApp.exe: PGP_CODE_MNTUNMNT_DISK.
Проверил из консоли, команда "C:\Program Files (x86)\PGP Corporation\PGP Desktop\PGPmnAPP.exe" PGP_CODE_MNTUNMNT_DISK "путь к файлу\файл.pgd" монтирует или размонтирует диск (в зависимости от его состояния на данный момент).

Подскажите, люди добрые, как этим воспользоваться в VB6 - нужно не просто дать команду, но и получить ответ, чтобы убедиться в выполнении.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Автоматизация PGP Desktop

Сообщение alibek » 15.03.2016 (Вт) 16:20

С помощью API CreateProcess.
Что-то типа такого: viewtopic.php?f=51&t=37117&hilit=createprocess
Lasciate ogni speranza, voi ch'entrate.

akm-2005
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 04.03.2016 (Пт) 11:05

Re: Автоматизация PGP Desktop

Сообщение akm-2005 » 18.03.2016 (Пт) 9:37

Спасибо.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 62

    TopList  
cron