تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تحديث سطح المكتب
#2
هناك دالة نستطيع الاستفادة منها في هذه الحالة من أجل ارسال أمر التحديث لسطح المكتب
وهي 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]

بالتوفيق للجميع
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
تحديث سطح المكتب - بواسطة Raggi Tech - 17-10-12, 06:52 PM
تحديث سطح المكتب - بواسطة Raggi Tech - 17-10-12, 06:52 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  طريقه سهله وسريعه لاخذ صوره لسطح المكتب وحفظها علي الهارد ديسك RaggiTech 0 2,303 17-10-12, 08:44 PM
آخر رد: RaggiTech
  اظهار اسم النظام + اصداره على سطح المكتب RaggiTech 0 2,602 17-10-12, 08:42 PM
آخر رد: RaggiTech
  لعمل اختصار على سطح المكتب RaggiTech 0 2,285 17-10-12, 06:10 PM
آخر رد: RaggiTech
  لانشاء مجلد على سطح المكتب RaggiTech 0 2,091 17-10-12, 06:02 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: