Я пытаюсь обернуть свою голову о том, как сделать, чтобы создать калнету DLL 8 DLL для создания индивидуального Infotip на Explorer для определенного расширения (.t1k). < /p>
Я знаю, что Stronchshell - очень мощная библиотека, позволяющая вам облегчить этот процесс и на самом деле, чтобы сделать его так, но с ней: ультразмею: p> p> p> p> p> p> p> p> press < /bree containt ate Come, но с ней: ультразмея < /bree. /> Проект, с которым я должен работать, должен быть .net, а не .netframework, поскольку строка, возвращаемая GetInfotip, генерируется обработкой некоторых данных из другой библиотеки .NET. < /li>
Хотя здесь есть решение, мне неясно, насколько он является надежным, как другой разработчик в том, что указал в этом, я получу тот же предупреждение, что и то же предупреждение, что я задаю, что это связано с этим методом. /> < /ul>
Stronkshell 2.7.2 'была восстановлена с использованием' .netframework, version = v4.6.1, .netframework, version = v4.6.2, .netframework, version = v4.7, .netframework, version = v4.7.1, .netframework, version = v4.7, .netframework, version = v.47.1, .netframework, version = v4.7, .netframe .Netframework, version = v4.8.1 'вместо целевой структуры проекта' net8.0-windows7.0 < /p>
< /blockquote>
Вот что я попробовал вместо этого:
Я сделал тестовый проект, где .csproj-это следующее: < /p>
Library
net8.0-windows
true
T1000ShellEx
enable
enable
x64
< /code>
и единственный файл .cs внутри проекта выглядит следующим образом: < /p>
using System.Runtime.InteropServices;
namespace T1000ShellEx
{
[ComVisible(true)]
[Guid("E2B9C5B6-5C92-4D1B-85E6-2F80B72F6E28")]
[ClassInterface(ClassInterfaceType.None)]
public sealed class T1KInfoTipHandler : IQueryInfo
{
public int GetInfoTip(uint dwFlags, out string ppwszTip)
{
try
{
ppwszTip = "IT WORKS";
return 0;
}
catch
{
ppwszTip = "ERROR";
return 0;
}
}
public int GetInfoFlags(out uint pdwFlags)
{
pdwFlags = 0;
return 0;
}
}
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("00021500-0000-0000-C000-000000000046")]
public partial interface IQueryInfo
{
[PreserveSig]
int GetInfoTip(uint dwFlags, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszTip);
[PreserveSig]
int GetInfoFlags(out uint pdwFlags);
}
}
< /code>
после компиляции я получаю t1000shellex.comhost.dll, который, если он передаст в Regsvr32, будет успешно зарегистрировать мой dll.
Я также вручную добавил эти ключи реестра, которые, Afaik, должны сообщить исследователю, что он должен вызвать мой DLL, когда мыша проходит через файл T1K: < /p>
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\\.t1k] @="T1000 Project file"
[HKEY_CLASSES_ROOT\T1000 Project file] @="T1000 Project file"
[HKEY_CLASSES_ROOT\T1000 Project file\ShellEx]
[HKEY_CLASSES_ROOT\T1000 Project file\ShellEx\\{00021500-0000-0000-C000-000000000046}] @="{e2b9c5b6-5c92-4d1b-85e6-2f80b72f6e28}"
[HKEY_CLASSES_ROOT\T1000ShellEx.T1KInfoTipHandler] @="T1000ShellEx.T1KInfoTipHandler"
[HKEY_CLASSES_ROOT\T1000ShellEx.T1KInfoTipHandler\CLSID] @="{E2B9C5B6-5C92-4D1B-85E6-2F80B72F6E28}"
< /code>
Я затем перезагружаю Explorer, и это то, что я получаю от Procmon: < /p>
11:05:14,4831430 explorer.exe 10524 QueryOpen C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll FAST IO DISALLOWED
11:05:14,4833315 explorer.exe 10524 CreateFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:05:14,4834235 explorer.exe 10524 QueryBasicInformationFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS CreationTime: 11/06/2025 09:31:13, LastAccessTime: 11/06/2025 11:04:44, LastWriteTime: 15/04/2025 17:38:20, ChangeTime: 14/05/2025 08:30:28, FileAttributes: A
11:05:14,4834805 explorer.exe 10524 CloseFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS
11:05:14,4835557 explorer.exe 10524 IRP_MJ_CLOSE C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS
11:05:14,4838781 explorer.exe 10524 CreateFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS Desired Access: Read Data/List Directory, Execute/Traverse, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, Delete, AllocationSize: n/a, OpenResult: Opened
11:05:14,4845276 explorer.exe 10524 QueryBasicInformationFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS CreationTime: 11/06/2025 09:31:13, LastAccessTime: 11/06/2025 11:04:44, LastWriteTime: 15/04/2025 17:38:20, ChangeTime: 14/05/2025 08:30:28, FileAttributes: A
11:05:14,4845679 explorer.exe 10524 QueryStandardInformationFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS AllocationSize: 184.320, EndOfFile: 180.736, NumberOfLinks: 1, DeletePending: False, Directory: False
11:05:14,4846088 explorer.exe 10524 ReadFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS Offset: 0, Length: 4.096
11:05:14,4847433 explorer.exe 10524 CreateFileMapping C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll FILE LOCKED WITH ONLY READERS SyncType: SyncTypeCreateSection, PageProtection: PAGE_EXECUTE|PAGE_NOCACHE
11:05:14,4873787 explorer.exe 10524 FASTIO_RELEASE_FOR_SECTION_SYNCHRONIZATION C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS
11:05:14,4875033 explorer.exe 10524 CreateFileMapping C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS SyncType: SyncTypeOther
11:05:14,4875472 explorer.exe 10524 FASTIO_RELEASE_FOR_SECTION_SYNCHRONIZATION C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS
11:05:14,4877895 explorer.exe 10524 Load Image C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS Image Base: 0x7ffbd2bc0000, Image Size: 0x30000
11:05:14,4883264 explorer.exe 10524 CloseFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS
11:05:19,8975202 explorer.exe 10524 QueryOpen C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll FAST IO DISALLOWED
11:05:19,8976489 explorer.exe 10524 CreateFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
11:05:19,8977046 explorer.exe 10524 QueryNetworkOpenInformationFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS CreationTime: 11/06/2025 09:31:13, LastAccessTime: 11/06/2025 11:05:14, LastWriteTime: 15/04/2025 17:38:20, ChangeTime: 14/05/2025 08:30:28, AllocationSize: 01/01/1601 02:00:00, EndOfFile: 01/01/1601 02:00:00, FileAttributes: A
11:05:19,8977331 explorer.exe 10524 CloseFile C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS
11:05:19,8977695 explorer.exe 10524 IRP_MJ_CLOSE C:\Users\TheUser\Desktop\ConsoleApp1\ConsoleApp1\bin\Release\net8.0-windows\T1000ShellEx.comhost.dll SUCCESS
< /code>
Таким образом, DLL, кажется, загружается, но затем я всегда получаю Infotip «по умолчанию» вместо «это работает» или даже «ошибка» < /p>
, честно устаревших или не завершенных ответов, но я, безусловно, не эксперт по COM, так что, возможно, решение проще, чем я думаю.
Заранее!
Подробнее здесь: https://stackoverflow.com/questions/796 ... om-hosting
Custom Explorer Infotip с использованием .net 8 Com Hosting ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение