【发布时间】:2021-08-07 03:00:28
【问题描述】:
即使之前已经提出过这个问题,但答案中提出的代码并没有让我更深入,所以也许有人可以阐明这一点。
我从this 得到了大部分代码,回答了问题。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace TestClassLibrary
{
public class ClassTest
{
public ClassTest()
{
}
public static void GetWindowPath(int handle, out string paths) {
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
var explorer = shellWindows.Cast<SHDocVw.InternetExplorer>().Where(hwnd => hwnd.HWND == handle).FirstOrDefault();
if (explorer != null)
{
string path = new Uri(explorer.LocationURL).LocalPath;
Console.WriteLine("name={0}, path={1}", explorer.LocationName, path);
paths = path;
}
else
{
//Console.WriteLine("name={0}, path={1}", explorer.LocationName, path);
paths = "Test";
}
}
基本上我想要实现的是让这个方法返回对应于句柄的窗口的完整路径。该方法稍后将使用此代码编译成的 .DLL 在外部使用。
我遇到的问题是,由于某种原因 explorer 总是 NULL,因此 不返回路径。
如果有人能对此有所了解,我会很高兴,这样我和可能在这件事上遇到问题的其他人可能知道该怎么做。
【问题讨论】:
-
您的应用会长期做什么?如果您希望它作为上下文菜单等可用,您单击的文件将发送完整路径..因此其中一些可能是不必要的
-
啊,基本上我需要将它实现到我们实际的编程语言Windev中,我可以通过将其加载为.dll来实现。从长远来看,我想实现从程序拖放到资源管理器中,但不是通过 C#,而是通过 Windev。
-
嗯,不是我尝试过的区域.. 但是我想,只要将拖动的项目设置为声明其文件等等,资源管理器就会看到它,就像 vmware 允许你一样从操作系统外部拖放到虚拟机等内部。
-
在实际的软件中,我已经在程序内部实现了资源管理器的拖放操作,但反之则不然。使用当前悬停窗口的资源管理器路径(我可以在Windev中获得句柄),我可以实现相反的拖放操作(程序到资源管理器)
标签: c#