我想写一个简单的Windows shell扩展来添加到上下文菜单,而C#是我最近使用的语言.它是shell扩展的一个不错的选择吗?接口是否易于使用?是否有额外的开销导致菜单弹出更慢?
任何人都有良好的入门指针?
我需要获取在Windows资源管理器中选择的当前文件集合.我从这里找到了以下代码.
不过,我不在那里.首先,它GetForegroundWindow来自哪里?另一方面,编译器在线上抱怨
var shell = new Shell32.Shell();
Run Code Online (Sandbox Code Playgroud)
话
"无法找到类型或命名空间名称'Shell32'(您是否缺少using指令或程序集引用?)".我已经添加了SHDocVw作为参考,但我仍然无法通过编译器.有人可以帮我完成这个吗?
IntPtr handle = GetForegroundWindow();
ArrayList selected = new ArrayList();
var shell = new Shell32.Shell();
foreach(SHDocVw.InternetExplorer window in shell.Windows()) {
if (window.HWND == (int)handle)
{
Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)window.Document).SelectedItems();
foreach(Shell32.FolderItem item in items)
{
selected.Add(item.Path);
}
}
}
Run Code Online (Sandbox Code Playgroud) 嘿伙计们,我试图获取用户正在使用的文件夹的选定文件.我有以下代码已经运行,但只在桌面文件上:
private string selectedFiles()
{
// get the handle of the desktop listview
IntPtr vHandle = WinApiWrapper.FindWindow("Progman", "Program Manager");
vHandle = WinApiWrapper.FindWindowEx(vHandle, IntPtr.Zero, "SHELLDLL_DefView", null);
vHandle = WinApiWrapper.FindWindowEx(vHandle, IntPtr.Zero, "SysListView32", "FolderView");
//IntPtr vHandle = WinApiWrapper.GetForegroundWindow();
//Get total count of the icons on the desktop
int vItemCount = WinApiWrapper.SendMessage(vHandle, WinApiWrapper.LVM_GETITEMCOUNT, 0, 0);
//MessageBox.Show(vItemCount.ToString());
uint vProcessId;
WinApiWrapper.GetWindowThreadProcessId(vHandle, out vProcessId);
IntPtr vProcess = WinApiWrapper.OpenProcess(WinApiWrapper.PROCESS_VM_OPERATION | WinApiWrapper.PROCESS_VM_READ |
WinApiWrapper.PROCESS_VM_WRITE, false, vProcessId);
IntPtr vPointer = WinApiWrapper.VirtualAllocEx(vProcess, IntPtr.Zero, 4096,
WinApiWrapper.MEM_RESERVE | WinApiWrapper.MEM_COMMIT, WinApiWrapper.PAGE_READWRITE);
try
{
for …Run Code Online (Sandbox Code Playgroud) 在 Windows 中,无论是在桌面上还是在 Windows 资源管理器中,我想检测文件或文件夹被选中(突出显示)的时刻。发生这种情况时,我想显示一个消息框,显示文件或文件夹的全名。
如果选择了多个项目,我想显示所有项目。
请注意,我的解决方案必须用 C# 编写。
我想获得具有焦点的窗口的路径。
例如:我打开
了3 个窗口。C:\Windows
B. C:\Windows\System32
C. C:\用户\COMP-0\文档
我正在处理 c (C:\Users\COMP-0\Documents)
所以我想在 C# 中以编程方式获取此路径 (C:\Users\COMP-0\Documents)。