هناك دالة نستطيع الاستفادة منها في هذه الحالة من أجل ارسال أمر التحديث لسطح المكتب
وهي SendMessageTimeout باستعمال التابع WM_SETTINGCHANGE
كود :
[color=#000000][COLOR=#007700][[/color][color=#0000bb]DllImport[/color][color=#007700]([/color][color=#dd0000]"user32.dll"[/color][color=#007700], [/color][color=#0000bb]SetLastError [/color][color=#007700]= [/color][color=#0000bb]true[/color][color=#007700], [/color][color=#0000bb]CharSet [/color][color=#007700]= [/color][color=#0000bb]CharSet[/color][color=#007700].[/color][color=#0000bb]Auto[/color][COLOR=#007700])]
static [/COLOR][color=#0000bb]extern IntPtr SendMessageTimeout[/color][COLOR=#007700](
[/COLOR][color=#0000bb]IntPtr hWnd[/color][COLOR=#007700],
[/COLOR][color=#0000bb]uint Msg[/color][COLOR=#007700],
[/COLOR][color=#0000bb]UIntPtr wParam[/color][COLOR=#007700],
[/COLOR][color=#0000bb]IntPtr lParam[/color][COLOR=#007700],
[/COLOR][color=#0000bb]uint fuFlags[/color][COLOR=#007700],
[/COLOR][color=#0000bb]uint uTimeout[/color][COLOR=#007700],
[/COLOR][color=#0000bb]out uint lpdwResult[/color][COLOR=#007700]);
[/COLOR][/COLOR]
لكن هنا يجب الأخذ بعين الاعتبار أن التحديث لا يتم إلا اذا كان هناك تغيير في الاعدادات على سطح المكتب وأسهل شئ يمكننا تغييره في الاعدادات هو حجم الأيقونات (عادة مايكون 32 )
عن طريق الريجيستري يمكنن تغيير هذه القيمة ثم ارسال الأمر كي يتم فعلا التحديث
كود :
[COLOR=#000000][COLOR=#0000bb]
[/COLOR][color=#007700]private [/color][color=#0000bb]void RefreshDesptop[/color][COLOR=#007700]()
{
[/COLOR][color=#0000bb]string icon_size_string[/color][COLOR=#007700];
[/COLOR][color=#0000bb]string new_icon_size_string [/color][COLOR=#007700];
[/COLOR][COLOR=#ff8000]//قراءة أبعاد الأيقونات من الريجيستري
[/COLOR][color=#0000bb]icon_size_string [/color][color=#007700]= [/color][color=#0000bb]Microsoft[/color][color=#007700].[/color][color=#0000bb]Win32[/color][color=#007700].[/color][color=#0000bb]Registry[/color][color=#007700].[/color][color=#0000bb]CurrentUser[/color][color=#007700].[/color][COLOR=#0000bb]OpenSubKey
[/COLOR][color=#007700](@[/color][color=#dd0000]"Control Panel\Desktop\WindowMetrics"[/color][color=#007700]).[/color][color=#0000bb]GetValue[/color][color=#007700]([/color][color=#dd0000]"Shell Icon Size"[/color][color=#007700]).[/color][color=#0000bb]ToString[/color][COLOR=#007700]();
[/COLOR][COLOR=#ff8000]//كتابة أبعاد جديدة للأيقونات باضفة 1 في الريجيستري
[/COLOR][color=#0000bb]new_icon_size_string [/color][color=#007700]= ([/color][color=#0000bb]int[/color][color=#007700].[/color][color=#0000bb]Parse[/color][color=#007700]([/color][color=#0000bb]icon_size_string [/color][color=#007700])+[/color][color=#0000bb]1[/color][color=#007700]).[/color][color=#0000bb]ToString[/color][COLOR=#007700]();
[/COLOR][color=#0000bb]Microsoft[/color][color=#007700].[/color][color=#0000bb]Win32[/color][color=#007700].[/color][color=#0000bb]Registry[/color][color=#007700].[/color][color=#0000bb]CurrentUser[/color][color=#007700].[/color][color=#0000bb]OpenSubKey[/color][color=#007700](@[/color][COLOR=#dd0000]"Control Panel\Desktop\WindowMetrics"
[/COLOR][color=#007700],[/color][color=#0000bb]true[/color][color=#007700]).[/color][color=#0000bb]SetValue[/color][color=#007700]( [/color][color=#dd0000]"Shell Icon Size"[/color][color=#007700],[/color][color=#0000bb]new_icon_size_string[/color][COLOR=#007700]);
[/COLOR][COLOR=#ff8000]// ارسال أمر التحديث
[/COLOR][color=#0000bb]SendMessageTimeout[/color][color=#007700](([/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]IntPtr[/color][color=#007700])[/color][color=#0000bb]HWND_BROADCAST[/color][COLOR=#007700],
[/COLOR][color=#0000bb]WM_SETTINGCHANGE[/color][COLOR=#007700],
([/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]UIntPtr[/color][color=#007700])[/color][color=#0000bb]SPI_SETNONCLIENTMETRICS[/color][COLOR=#007700],
[/COLOR][color=#0000bb]IntPtr[/color][color=#007700].[/color][color=#0000bb]Zero[/color][COLOR=#007700],
[/COLOR][color=#0000bb]SMTO_ABORTIFHUNG[/color][COLOR=#007700],
[/COLOR][color=#0000bb]1000[/color][color=#007700], [/color][color=#0000bb]out lRes[/color][COLOR=#007700]);
[/COLOR][COLOR=#ff8000]// ارجاع القيمة الافتراضية المعدلة من الريجيستري
[/COLOR][color=#0000bb]Microsoft[/color][color=#007700].[/color][color=#0000bb]Win32[/color][color=#007700].[/color][color=#0000bb]Registry[/color][color=#007700].[/color][color=#0000bb]CurrentUser[/color][color=#007700].[/color][color=#0000bb]OpenSubKey[/color][color=#007700](@[/color][COLOR=#dd0000]"Control Panel\Desktop\WindowMetrics"
[/COLOR][color=#007700], [/color][color=#0000bb]true[/color][color=#007700]).[/color][color=#0000bb]SetValue[/color][color=#007700]([/color][color=#dd0000]"Shell Icon Size"[/color][color=#007700], [/color][color=#0000bb]icon_size_string[/color][COLOR=#007700]);
[/COLOR][COLOR=#ff8000]//ارسال أمر التحديث مجددا
[/COLOR][color=#0000bb]SendMessageTimeout[/color][color=#007700](([/color][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]IntPtr[/color][color=#007700])[/color][color=#0000bb]HWND_BROADCAST[/color][COLOR=#007700],
[/COLOR][color=#0000bb]WM_SETTINGCHANGE[/color][COLOR=#007700],
([/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]UIntPtr[/color][color=#007700])[/color][color=#0000bb]SPI_SETNONCLIENTMETRICS[/color][COLOR=#007700],
[/COLOR][color=#0000bb]IntPtr[/color][color=#007700].[/color][color=#0000bb]Zero[/color][COLOR=#007700],
[/COLOR][color=#0000bb]SMTO_ABORTIFHUNG[/color][COLOR=#007700],
[/COLOR][color=#0000bb]1000[/color][color=#007700], [/color][color=#0000bb]out lRes[/color][COLOR=#007700]);
}
[/COLOR][/COLOR]
في الأخير يمكن ارجاع صورة سطح المكتب (بعد انهاء البرنامج اذا أردت ) بقراءتها من الريجيستري واستعمال نفس الدالة SystemParametersInfo التي استعملناها لحذف الخلفية باستبدال None بالمكان المستخرج من الريجيستري
كود :
[color=#000000][COLOR=#007700]private [/color][color=#0000bb]void RestoreWallpaper[/color][COLOR=#007700]()
{
[/COLOR][COLOR=#ff8000]//قراءة مكان الصورة الحالية لسطح المكتب
[/COLOR][color=#0000bb]string WallpaerImage[/color][COLOR=#007700];
[/COLOR][color=#0000bb]WallpaerImage [/color][color=#007700]= [/color][color=#0000bb]Microsoft[/color][color=#007700].[/color][color=#0000bb]Win32[/color][color=#007700].[/color][color=#0000bb]Registry[/color][color=#007700].[/color][color=#0000bb]CurrentUser[/color][color=#007700].[/color][COLOR=#0000bb]OpenSubKey
[/COLOR][color=#007700](@[/color][color=#dd0000]"Control Panel\Desktop"[/color][color=#007700]).[/color][color=#0000bb]GetValue[/color][color=#007700]([/color][color=#dd0000]"Wallpaper"[/color][color=#007700]).[/color][color=#0000bb]ToString[/color][COLOR=#007700]();
[/COLOR][COLOR=#ff8000]//استرجاع صورة سطح المكتب
[/COLOR][color=#0000bb]SystemParametersInfo[/color][color=#007700]([/color][color=#0000bb]0X14[/color][color=#007700], [/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]WallpaerImage[/color][color=#007700], [/color][color=#0000bb]0x1[/color][COLOR=#007700]);
}
[/COLOR][/COLOR]
بالتوفيق للجميع