0

「F5」を押すようにデスクトップをリフレッシュする機能が欲しいです。Sendmessage と ToggleDesktopIcons をオン/オフするコードがたくさん見つかりましたが、「F5」を手動で押すように機能するコードはありませんでした。ここでいくつかのトピックも見ましたが、すべてこの問題の解決策が機能していません。私は Windows 7 64 ビットと IE 10 を使用しており、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

OK、私はあなたのコードをよく理解していません。実際には、デスクトップを更新するためにキープレスを送信する正確なウィンドウを見つける必要があります。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# からプログラムで Windows デスクトップを更新する方法 (つまり F5)のリンクの 1 つを次に示します。

于 2013-08-21T21:14:18.680 に答える