旧的拖放代码不再适用于Windows 7

时间:2011-04-11 18:28:08

标签: c# winforms drag-and-drop

我有一些代码允许我将超链接从网页拖放到窗体上,然后将URL和标题分开并将它们放在两个不同的文本框中。

这适用于Windows XP,但在Windows 7上它不再有效。我不确定区别在哪里。

object data = e.Data.GetData("UniformResourceLocator");

数据将始终为null,但是当我使用

 string[] fmts = e.Data.GetFormats();
其中一个fmts将永远是UniformResourceLocator,还有一堆其他的东西,我似乎无法从中获取任何数据。如果有人有资源指引我或者我会非常感激的东西,这对我来说真的很困惑。

感谢。

更新:添加了以前用于工作的方法代码

  string hyperLinkUrl = null;
        string hyperLinkText = null;

            hyperLinkUrl = e.Data.GetData(typeof(string)) as string;
            // some browser deliver url and text
            // in UniformResourceLocator (Firebird)
            string[] tokens = null;
            if (hyperLinkUrl != null)
            {
               tokens = hyperLinkUrl.Split('\n');
            }
            if (tokens != null && tokens.Length > 1)
            {
                hyperLinkUrl = tokens[0];
                hyperLinkText = tokens[1];
            }
            // we have to read FILEGROUPDESCRIPTOR to get the text (IE)
            else
            {             

                System.IO.Stream ioStream =
                (System.IO.Stream)e.Data.GetData("FileGroupDescriptor");
                byte[] contents = new Byte[512];
                try
                {
                    ioStream.Read(contents, 0, 512);
                }
                catch (Exception x)
                {

                }    
                ioStream.Close();
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                //The magic number 76 is the size of that part of the
                //FILEGROUPDESCRIPTOR structure before
                // the filename starts - cribbed
                //from another usenet post.
                for (int i = 76; contents[i] != 0; i++)
                {
                    sb.Append((char)contents[i]);
                }
                if (!sb.ToString(sb.Length - 4, 4).ToLower().Equals(".url"))
                {
                    throw new Exception("filename does not end in '.url'");
                }
                hyperLinkText = sb.ToString(0, sb.Length - 4);
            }
            tbLinkTitle.Text = hyperLinkText;
            tbLinkAddress.Text = hyperLinkUrl;

1 个答案:

答案 0 :(得分:4)

  

从网页拖放超链接

该页面不会在低完整性的网络浏览器中运行(例如IE保护模式),不是吗?拖放在完整性级别上不起作用。

如果使用icacls将可执行文件的完整性级别设置为低,会发生什么?如果拖放开始工作,这就是问题所在。