2013-03-04 212 views
1

我试图从外部文件(从Windows文件管理器)拖到ListView控件上。我之前做过这件事,但似乎无法让事件发生。将外部文件拖放到VB6上ListView控件

我的步骤如下:

  • 创建ListView控件
  • 设置视图属性3 - lvwReport
  • 将OLEDropMode属性来1 -ccOLEDropManual

我认为这是所有我不得不这样做,但我的ListView1_OLEDragDrop事件不会触发。

我填充了一些项目的ListView以防万一。

我尝试设置在ListView1_OLEDragOverEffect = vbDropEffectCopyListView1_OLEGiveFeedback但这似乎没有影响或者(这也不会改变光标)

注:我能得到的startDrag事件拖出何时启的控制

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

+0

我可以确认它的工作原理。我所做的只是将listview1.oledropmode设置为ccOLEdropmanual,并且oledrapdrop事件确实触发。我在尝试添加'MS Windows Common Controls 6.0'时遇到了一个奇怪的错误,并且无法添加组件,但我只是重新注册了ocx文件(C:\ Windows \ SysWOW64 \ MSCOMCTL.ocx)错误离开了。 – Motes 2013-03-04 22:19:05

+0

@motes - 感谢,参照我的回答,你可以尝试以管理员身份运行并查看它是否仍然激活? – 2013-03-05 12:22:51

回答

0

看起来,以管理员身份运行时,拖放到ListView不起作用。

  • 当我尝试这个在IDE(它被设置为以管理员身份运行),这是行不通的。
  • 如果我使用我编译的exe文件,它可以正常工作,但是如果我将我编译的exe文件作为管理员运行(右键单击Run As Admin),则不起作用。

我不知道为什么不工作但

+0

我相信这是一个“安全功能”。 – 2013-03-05 14:34:31

+0

@MarkHurd - 当然,如果它是一个安全功能,你会期望它能够反过来工作? – 2013-03-05 15:44:15

+1

Explorer以中等完整性级别运行,管理很高,因此Windows操作系统不相信Window的Explorer对您的程序执行的操作。我认为资源管理器以中等完整性运行,以阻止正常的管理员用户删除重要的东西,或使恶意软件更难以使用资源管理器来控制系统,等等。 – Motes 2013-03-05 15:52:32

1

这似乎是UIPI (User Interface Privilege Isolation),一个新的安全功能,它不会允许低特权的应用程序具有更高的privliege应用程序接口。它可以被绕过,主要是为了允许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" 

然后导入证书: Select Certificate Store

2。注册程序与认证文件与signtool,附带了Visual Studio中,通过输入一个命令提示符下输入:

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

包括在清单设置为true UIaccess定义一个trustInfo节文件为您的exe文件。我这样做是使用Make My Manifest

MMM

现在,应用程序应该能够绕过UIPI,但只能从一个安全的位置运行时,如 “C:\ Program Files文件\”,“C:\ Windows \“或任一个子目录。

或者,您可以禁用UAC。