儘管之前已經提出過這個問題,但是在答案中提出的代碼並沒有讓我更進一步,所以也許有人可以闡明這一點。通過C中的句柄檢索資源管理器窗口的完整路徑#
我從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。
我遇到的問題是由於某種原因,資源管理器始終爲NULL,因此 不返回路徑。
如果有人能夠對此有所瞭解,我會很高興,以便我和其他可能在此問題上遇到問題的人可能知道該怎麼做。
提供哪些將您的應用程序做更長遠的路?如果你希望它可以作爲上下文菜單等,你點擊的文件將發送完整的路徑..因此,這可能是不必要的一些 – BugFinder
啊,基本上我需要實現它到我們的實際編程語言,Windev,我可以通過將其加載爲.dll來實現。長遠來說,我想實現從程序拖放到資源管理器,但不是通過C#,而是通過Windev。 – FBC
嗯,不是我嘗試過的區域..然而,我會想象,只要被拖動的項目被設置爲聲明其文件等,explorer就會看到它,就像vmware允許你從os之外拖放到vm等內部。 – BugFinder