我使用Microsoft的CommonOpenFileDialog来允许用户选择文件夹,但是当对话框出现时没有文件可见.当IsFolderPicker设置为true 时,是否可以显示文件和文件夹?
我目前的代码看起来像这样
var dialog = new CommonOpenFileDialog();
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
SelectedFolderPath = dialog.FileName;
}
Run Code Online (Sandbox Code Playgroud) 我试过了:
C:\Windows\System32>ilmerge /target:winexe /out:c:\output.exe c:\MyProgram.exe c:\Microsoft.WindowsAPICodePack.dll
Run Code Online (Sandbox Code Playgroud)
但得到了:
'ilmerge' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?(顺便说一句,是否有更好的方法将dll合并到exe文件中?)
谢谢
我已经创建了一个应用程序,它为您提供计算机中的文件列表.每当您单击列表中的任何项目时,它旁边的小PictureBox都应显示相应文件的缩略图.我在Windows 7上使用C#.
为了获得缩略图,我再次发现了一个在不同问题中发布的方法.首先,我引用Windows API代码包.然后,我使用以下代码:
ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;
Run Code Online (Sandbox Code Playgroud)
这并不总是有效.有时,显示的缩略图仅仅是"默认应用程序"图标.我发现只有Windows以前为该文件生成了缩略图并将其存储在缩略图缓存中才会显示真正的缩略图.这意味着我必须手动打开文件夹,等待Windows为每个文件生成缩略图,然后我的应用程序将能够看到那些拇指.
我的程序如何在使用它们之前强制Windows 7生成真正的缩略图?
更新(由Li0liQ提供)
可以通过添加FormatOption强制缩略图检索:
ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
shellFile.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly;
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个例外,如果缩略图还没有:
当前的ShellObject没有有效的缩略图处理程序,或者在提取此特定shell对象的缩略图时出现问题.---> System.Runtime.InteropServices.COMException:类未注册(来自HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))
请参阅如何在Windows资源管理器中刷新文件的缩略图?潜在线索的问题和代码片段.
如何在窗口中通过某个进程(PID)打印文件名?或者所有进程(PID)当前打开一个文件.
Process Explorer是一个实用工具.但它怎么没有提到呢?Windows中存在的
任何/ proc文件系统类型的东西?
Can we read any Window's Registry?
I wants to write a programming code And I rarely work on windows.
Run Code Online (Sandbox Code Playgroud)
在Python中有两个解决方案:
1.import psutil
2. import win32api,win32con,win32process
但这对我来说仍然是一个问题!
1.这些图书馆如何运作?
2.任何寄存器,内存或虚拟文件系统都会保留此信息吗?
如果它可能在窗口中,为什么TasK-Manager中不存在此信息?
我一直在研究Windows窗体应用程序,并且最近添加了一个简单的设置页面,允许用户选择输出所在的文件夹.OpenFileDialog是丑陋的,不好用,所以我已经在Windows API CodePack中添加了访问CommonOpenFileDialog-所有好处.
当我打开CommonOpenFileDialog时,Windows窗体应用程序缩小到较小的大小,如附加的图像所示.
左边是程序,右边是打开的对话框:
我之前和之后都试过检查表格的大小,这没有改变,所以我打了一个砖墙.任何信息都是有用的,如果需要我可以提供更多细节.
打开表单的代码是:
CommonOpenFileDialog dialog = new CommonOpenFileDialog();
dialog.DefaultDirectory = selectedFolderTextBox.Text;
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() != CommonFileDialogResult.Ok) return;
selectedFolderTextBox.Text = dialog.FileName;
Run Code Online (Sandbox Code Playgroud) 我没有方便的XP机器.如果我使用Windows API Codepack在C#中对Vista/Win7做一些新的事情(例如"TaskDialog"),它如何应对在Windows XP机器上运行?
如果我使用Codepack,我是否有效地使我的应用程序仅支持Vista和更高版本的Windows?
我想要一个显示媒体文件的一些文件属性的应用程序,如果可用,比如(不知道windows中使用的确切英文单词)FileName,Length/Duration,FileType(.avi .mp3等)我试过taglib和windowsapishell但我没有得到一个工作结果(参考是好的)
ShellFile so = ShellFile.FromFilePath(file);
so.Properties.System.(everythingIwant)
Run Code Online (Sandbox Code Playgroud)
向我展示了我想要显示的很多文件属性,但我无法让它工作一个错误的例子:
'WindowsFormsApplication2.vshost.exe'(托管(v4.0.30319)):已加载'C:\ Windows\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll',跳过加载符号.模块已经过优化,调试器选项"Just My Code"已启用.程序'[6300] WindowsFormsApplication2.vshost.exe:Program Trace'已退出,代码为0(0x0).程序 '[6300] WindowsFormsApplication2.vshost.exe:托管(v4.0.30319)' 已经与代码0(为0x0)退出.
容易的事情
var thing = so.Properties.System.FileName.Description;
Console.WriteLine(thing);
Run Code Online (Sandbox Code Playgroud)
不会工作
我确实知道一些Java和PHP编程,但我对C#完全不熟悉
特别感谢@ marr75和@errorstacks!
一个跟进问题:我做了这个,它有效
class Program
{
static void Main(string[] args)
{
string file = "E:/Dump/Shutter Island.avi";
FileInfo oFileInfo = new FileInfo(file);
Console.WriteLine("My File's Name: \"" + oFileInfo.Name + "\"");
DateTime dtCreationTime = oFileInfo.CreationTime;
Console.WriteLine("Date and Time File Created: " + dtCreationTime.ToString());
Console.WriteLine("myFile Extension: " + oFileInfo.Extension);
Console.WriteLine("myFile total Size: " + oFileInfo.Length.ToString());
Console.WriteLine("myFile filepath: " …Run Code Online (Sandbox Code Playgroud) 尝试使用下面提到的方法来获取有关锁定文件的更多详细信息.
function GetFileInUseInfo(const FileName : WideString) : IFileIsInUse;
var
ROT : IRunningObjectTable;
mFile, enumIndex, Prefix : IMoniker;
enumMoniker : IEnumMoniker;
MonikerType : LongInt;
unkInt : IInterface;
begin
result := nil;
OleCheck(GetRunningObjectTable(0, ROT));
OleCheck(CreateFileMoniker(PWideChar(FileName), mFile));
OleCheck(ROT.EnumRunning(enumMoniker));
while (enumMoniker.Next(1, enumIndex, nil) = S_OK) do
begin
OleCheck(enumIndex.IsSystemMoniker(MonikerType));
if MonikerType = MKSYS_FILEMONIKER then
begin
if Succeeded(mFile.CommonPrefixWith(enumIndex, Prefix)) and
(mFile.IsEqual(Prefix) = S_OK) then
begin
if Succeeded(ROT.GetObject(enumIndex, unkInt)) then
begin
if Succeeded(unkInt.QueryInterface(IID_IFileIsInUse, result)) then
begin
result := unkInt as IFileIsInUse;
exit;
end;
end;
end;
end; …Run Code Online (Sandbox Code Playgroud) 我最近将我的一些软件项目转移到了 .NET 5。我使用 Microsoft WindowsAPICodePack 来处理 Windows Shell,但是这个库已经过时了,似乎不再维护了。此外,它是为 .NET Framework 4.7 或 4.8 编译的,可能与 .NET 5 不兼容。那么从 .NET 5 应用程序使用 Windows Shell 的“正确”(最好是现代的)方式是什么?例如,我使用旧的 API 代码包来获取用户的库、获取文件图标等。我注意到命名空间 Windows.Storage 似乎具有部分或全部这些功能,但它似乎更有针对性UWP(也许这对于 .NET 5 项目来说无关紧要?)。还是我需要研究 WinRT?有任何想法吗?
c# ×6
.net ×1
.net-5 ×1
c ×1
delphi ×1
delphi-2009 ×1
dialog ×1
filesystems ×1
ilmerge ×1
python ×1
taglib ×1
thumbnails ×1
windows ×1
winforms ×1