0

我想要一个刷新桌面的功能,就像按“F5”一样。我发现了许多带有 Sendmessage 和 ToggleDesktopIcons 开/关的代码,但没有一个像手动点击“F5”那样对我有用。我在这里也看到了一些主题,但所有主题都针对此问题提供了无效的解决方案。我在带有 IE 10 的 Windows 7 64 位上并使用 C# Net Framework 2。

我也找到了这段代码,但 C# 不接受它,即使在我看来它是正确的函数。我不知道我需要在这里改变什么。我希望 IDE 会告诉我这里的错误是什么,或者我需要纠正什么。有人可以纠正我这个函数或建议另一个与 C# 兼容的函数。

procedure RefreshDesktop2;
var
hDesktop: HWND;
begin
hDesktop := FindWindowEx(FindWindowEx(FindWindow('Progman', 'Program Manager'), 0,
 'SHELLDLL_DefView', ''), 0, 'SysListView32', '');
 PostMessage(hDesktop, WM_KEYDOWN, VK_F5, 0);
 PostMessage(hDesktop, WM_KEYUP, VK_F5, 1 shl 31);
end; 

问题: 如何使上面的代码在 C# 中工作(用 C# 翻译)或者在 C# 中看起来类似的代码。我的目标是通过在选定的桌面图标上按“F5”来刷新桌面的图标/设置。我在类似问题中尝试的几个代码没有给我带来任何结果。

4

1 回答 1

1

好的,我不太了解您的代码,实际上您必须找到将按键发送给它的确切窗口,F5以便它刷新桌面。这是 c# 代码(经过测试并像魅力一样工作:)

[DllImport("user32")]
private static extern int PostMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32")]
private static extern IntPtr FindWindow(string className, string caption);
[DllImport("user32")]
private static extern IntPtr FindWindowEx(IntPtr parent, IntPtr startChild, string className, string caption);
public void RefreshDesktop(){      
  IntPtr d = FindWindow("Progman", "Program Manager");
  d = FindWindowEx(d, IntPtr.Zero, "SHELLDLL_DefView", null);
  d = FindWindowEx(d, IntPtr.Zero, "SysListView32", null);      
  PostMessage(d, 0x100, new IntPtr(0x74), IntPtr.Zero);//WM_KEYDOWN = 0x100  VK_F5 = 0x74
  PostMessage(d, 0x101, new IntPtr(0x74), new IntPtr(1 << 31));//WM_KEYUP = 0x101
}

但是我认为您还有其他选择以编程方式刷新桌面,这里是链接之一如何从 C# 以编程方式(即 F5)刷新 Windows 桌面?

于 2013-08-21T21:14:18.680 回答