この問題はかなり長い間私を悩ませてきました。
再起動/電源サイクル後にログインするたびに、エクスプローラーが表示されるまでに時間がかかります。すべてのサービスが起動するのを待ってからログインするという手順を実行しましたが、違いはありません。結果は常に同じです。アプリケーションが起動しても、一部のアイコンが表示されません。
1 つのアプリケーションにアイコンを「貼り付ける」コードを少し掘り下げましたが、エクスプローラーがすべてのアイコン情報を再読み取りできるように実行できる API 呼び出しはありますか? 無効にするか、再描画するか、そのようなものですか?
どうやら、ジョンが正しかったようで、それは不可能です。
Bob Dizzle と Mark Ransom のコードに従って、これをビルドしました (Delphi Code):
procedure Refresh;
var
hSysTray: THandle;
begin
hSysTray := GetSystrayHandle;
SendMessage(hSysTray, WM_PAINT, 0, 0);
end;
function GetSystrayHandle: THandle;
var
hTray, hNotify, hSysPager: THandle;
begin
hTray := FindWindow('Shell_TrayWnd', '');
if hTray = 0 then
begin
Result := hTray;
exit;
end;
hNotify := FindWindowEx(hTray, 0, 'TrayNotifyWnd', '');
if hNotify = 0 then
begin
Result := hNotify;
exit;
end;
hSyspager := FindWindowEx(hNotify, 0, 'SysPager', '');
if hSyspager = 0 then
begin
Result := hSyspager;
exit;
end;
Result := FindWindowEx(hSysPager, 0, 'ToolbarWindow32', 'Notification Area');
end;
しかし、役に立たない。
私も試してみました
InvalidateRect()
そしてまだショーはありません。
他の提案はありますか?