Перетащите внешний файл в элемент управления VB6 ListView

Я пытаюсь сбросить внешний файл (из проводника Windows) на ListView контроль. Я делал это раньше, но, похоже, не могу добиться событий.

Мои шаги следующие:

  • Создать элемент управления ListView
  • Установите для свойства View значение 3 - lvwReport
  • Установите для свойства OLEDropMode значение 1 -ccOLEDropManual

Я думал, что это было все, что я должен был сделать, но мой ListView1_OLEDragDrop событие не срабатывает.

Я заполнил ListView парой элементов на всякий случай.

Я пытался установить Effect = vbDropEffectCopy в ListView1_OLEDragOver и ListView1_OLEGiveFeedback но это, похоже, не имеет никакого эффекта (это даже не меняет курсор)

Примечание. Я могу получить событие StartDrag, которое будет запускаться при перетаскивании элемента управления.

Может кто-нибудь подтвердить, что это все еще работает на Windows 7?

2 ответа

Решение

Похоже, что перетаскивание на ListView не работает при запуске от имени администратора.

  • Когда я пытаюсь это сделать в IDE (которая настроена на запуск от имени администратора), это не работает.
  • Если я использую свой скомпилированный exe-файл, он работает, но если я запускаю свой скомпилированный exe-файл от имени администратора (щелкните правой кнопкой мыши) Run As Admin) это не работает.

Я не знаю, почему это не работает, однако

Похоже, это UIPI (изоляция привилегий пользовательского интерфейса), новая функция безопасности, которая не позволяет приложениям с более низкими привилегиями взаимодействовать с приложениями с более высокими привилегиями. Его можно обойти, главным образом, для учета приложений автоматизации пользовательского интерфейса. Чтобы обойти три вещи должны быть сделаны:

1. Создайте файл pfx и импортируйте его в качестве доверенного корневого центра сертификации.

Чтобы создать файл pfx, загрузите Openssl и из командной строки запустите:

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

Затем,

openssl pkcs12 -export -out mycert.pfx -in mycert.pem -name "My Certificate"

Затем импортируйте сертификат:Выберите магазин сертификатов

2. Подпишите вашу программу сертификатом с помощью signtool, поставляемого с Visual Studio, введя в командной строке следующее:

signtool sign /t http://timestamp.digicert.com /f "c:\path\to\mycert.pfx" /p pfxpassword "c:\path\to\file.exe"

3. Включите раздел trustInfo с определением UIaccess, установленным в true, в файл манифеста для вашего exe-файла. Я сделал это с помощью Make My Manifest:

MMM

Теперь приложение должно иметь возможность обходить UIPI, но только при запуске из безопасного места, такого как "C:\Program Files\", "C:\Windows\" или из любого подкаталога.

Кроме того, вы можете просто отключить UAC.

Другие вопросы по тегам