1

我正在尝试将外部文件(来自 Windows 文件资源管理器)拖放到ListView控件上。我以前做过,但似乎无法触发这些事件。

我的步骤如下:

  • 创建一个列表视图控件
  • 将视图属性设置为3 - lvwReport
  • 将 OLEDropMode 属性设置为1 -ccOLEDropManual

我以为这就是我所要做的,但我的ListView1_OLEDragDrop事件没有触发。

为了以防万一,我用几个项目填充了 ListView。

我尝试Effect = vbDropEffectCopyListView1_OLEDragOver和中设置,ListView1_OLEGiveFeedback但这似乎也没有效果(这甚至不会改变光标)

注意:我可以在拖出控件时触发 StartDrag 事件

有人可以确认这仍然适用于 Windows 7 吗?

4

2 回答 2

1

它似乎是UIPI(用户界面特权隔离),一种新的安全功能,不允许较低特权的应用程序与较高特权的应用程序交互。它可以被绕过,主要是为了允许 UI 自动化应用程序。要绕过三件事必须做:

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.通过在命令提示符下输入以下内容,使用 Visual Studio 附带的 signtool 使用您的证书对您的程序进行签名:

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

3.在您的 exe 的清单文件中包含一个将 UIaccess 定义设置为 true 的 trustInfo 部分。我使用Make My Manifest做到了这一点:

嗯

现在,应用程序应该能够绕过 UIPI,但前提是从安全位置运行,例如“C:\Program Files\”、“C:\Windows\”或其中任何一个的子目录。

或者,您可以禁用 UAC。

于 2013-03-05T15:48:13.400 回答
0

以管理员身份运行时,拖放到 ListView 上似乎不起作用。

  • 当我在 IDE(设置为以管理员身份运行)中尝试此操作时,它不起作用。
  • 如果我使用我编译的 exe,它可以工作,但如果我以管理员身份运行我编译的 exe(右键单击Run As Admin),它就不起作用。

我不知道为什么它不起作用

于 2013-03-05T12:22:07.783 回答