powershell - 删除项目后强制桌面上的图标刷新,或首先停止添加项目

标签 powershell icons

我创建了一个 powershell 脚本,用于监听要在桌面上创建的文件。如果文件符合某些条件,则会立即删除该文件。我用了Remove-Item $path在哪里 $path是我要删除的文件的路径。问题是 windows 仍然添加,并继续在桌面上显示该项目。该文件肯定不存在,因为尝试操作它会导致“找不到此项目”或“文件不存在”错误。通过“右键单击 => 刷新”手动刷新桌面将导致该项目被删除。

有没有办法在删除项目后强制刷新桌面?否则,是否有替代方法来删除文件以防止首先添加它?

最佳答案

您可以使用 SHChangeNotify来自 Shell32.dll
你有一个以前的函数PowerShell.com , 不再可用

function Refresh-Explorer { 
    $code = @' 
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);  
private const int WM_SETTINGCHANGE = 0x1a;  
private const int SMTO_ABORTIFHUNG = 0x0002;  
 
 
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)] 
static extern bool SendNotifyMessage(IntPtr hWnd, uint Msg, UIntPtr wParam, 
   IntPtr lParam); 
 
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]  
  private static extern IntPtr SendMessageTimeout ( IntPtr hWnd, int Msg, IntPtr wParam, string lParam, uint fuFlags, uint uTimeout, IntPtr lpdwResult );  
 
 
[System.Runtime.InteropServices.DllImport("Shell32.dll")]  
private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2); 
 
 
public static void Refresh()  { 
    SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero); 
    SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, null, SMTO_ABORTIFHUNG, 100, IntPtr.Zero);  
} 
'@ 
 
    Add-Type -MemberDefinition $code -Namespace MyWinAPI -Name Explorer  
    [MyWinAPI.Explorer]::Refresh() 
}

关于powershell - 删除项目后强制桌面上的图标刷新,或首先停止添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9986869/

相关文章:

amazon-web-services - 如何发现 EC2 实例上的 AWS Cloudformation 堆栈名称以与 cfn-init 命令一起使用

powershell - 我可以使用 PowerShell 编写一个类吗?

powershell - 如何处理 CSV 文件的内容作为 Powershell cmdlet 中的管道输入

iphone - 用不同语言制作一份申请

reactjs - 如何不旋转 mui 自动完成弹出图标?

unicode - 为什么图标字体总是使用 PUA?

azure - 使用 PowerShell 获取 Azure 文件共享大小

powershell - PowerShell:写入输出仅写入一个对象

iOS:显示旧标签栏图标

html - Twitter Bootstrap 图标或 ASCII 代码中的货币代码