Я работаю над возвращением точного пути к текущему Active Directory, на котором сосредоточился пользователь, затем я нашел некоторый код, хотя ни один из них, кажется, не работает правильно и имеет ошибки. Но этот код, кажется, работает ... в любом случае я хочу вернуть упомянутый путь (который в этом коде называется currDirectory
; когда я изменяю тип void на строковый тип в этом коде и использую return currDirectory
, я получаю ошибку
Возврат из анонимной функции, преобразованной в пустой делегат, не может вернуть значение
Может ли кто-нибудь изменить этот код, чтобы он мог возвращать currDirectory
в виде строки?
class Class2
{
public static void Main()
{
RefreshWindow();
}
public static string RefreshWindow()
{
Guid CLSID_ShellApplication = new Guid("13709620-C279-11CE-A49E-444553540000");
Type shellApplicationType = Type.GetTypeFromCLSID(CLSID_ShellApplication, true);
object shellApplication = Activator.CreateInstance(shellApplicationType);
object windows = shellApplicationType.InvokeMember("Windows", System.Reflection.BindingFlags.InvokeMethod, null, shellApplication, new object[] { });
Type windowsType = windows.GetType();
object count = windowsType.InvokeMember("Count", System.Reflection.BindingFlags.GetProperty, null, windows, null);
Parallel.For(0, (int)count, i =>
{
object item = windowsType.InvokeMember("Item", System.Reflection.BindingFlags.InvokeMethod, null, windows, new object[] { i });
Type itemType = item.GetType();
string itemName = (string)itemType.InvokeMember("Name", System.Reflection.BindingFlags.GetProperty, null, item, null);
if (itemName == "Windows Explorer" || itemName == "File Explorer")
{
string currDirectory = HttpUtility.HtmlEncode((string)itemType.InvokeMember("LocationURL", System.Reflection.BindingFlags.GetProperty, null, item, null)).Replace("///", @"\").Replace("/", @"\").Replace("%20", " ").Replace(@"file:\", "");
Console.WriteLine(currDirectory);
Console.Read();
return currDirectory;
}
});
}
}