منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : اضافة الدرع لازرار التطبيق بالكود (زر مدير نظام )
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : DreamNet

السلام عليكم ورحمة الله وبركاته

ربما العنوان غير واضح بعض الشئ
نحن هنا نتحدث عن انظمة التشغيل الجديدة ابتداء من فيستا اصبح هناك مايسمى بالUAC
قد يلاحظ المستعمل ان هناك بعض الأزرار تأتي بها علامة درع لبعض البرامج

[صورة مرفقة: 18_01349128853.png]

ومن أجل عمل ذلك قد يفكر البعض في استعمال صورة هذا الدرع الموجودة مع الفيجوال استيديو واضافتها للزر مباشرة
لكننا نريد هنا اضافتها برمجيا

قبل البدء ولكي نكون منطقيين فان هذا الدرع يوضع عندما يكون حساب المستخدم فعلا مدير نظام أي Administrator لذلك يتوجب علينا أن نتأكد من ذلك أولا

سنتعامل هنا مع فضاء الأسماء Security.Principal


كود :
[color=#000000][COLOR=#0000bb]Imports System[/color][color=#007700].[/color][color=#0000bb]Security[/color][color=#007700].[/color][COLOR=#0000bb]Principal  
[/COLOR][/COLOR]

نستعمل الدالة التالية من أجل التأكد من الحساب الحالي هل هو Admin

كود :
[color=#000000][COLOR=#007700]Private Function [/color][color=#0000bb]IsAdmin[/color][color=#007700]() As [/color][COLOR=#0000bb]Boolean
     Dim p [/COLOR][color=#007700]As New [/color][color=#0000bb]WindowsPrincipal[/color][color=#007700]([/color][color=#0000bb]WindowsIdentity[/color][color=#007700].[/color][color=#0000bb]GetCurrent[/color][COLOR=#007700])
     Return [/COLOR][color=#0000bb]p[/color][color=#007700].[/color][color=#0000bb]IsInRole[/color][color=#007700]([/color][color=#0000bb]WindowsBuiltInRole[/color][color=#007700].[/color][color=#0000bb]Administrator[/color][COLOR=#007700])
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]Function  
[/COLOR][/COLOR]

بعدها نستعمل دالة الAPI المشهورة SendMessage من أجل رسم الدرع على الزر

كود :
[color=#000000][COLOR=#007700]<[/color][color=#0000bb]DllImport[/color][color=#007700]([/color][color=#dd0000]"user32"[/color][color=#007700])> [/color][COLOR=#0000bb]_
[/COLOR][color=#007700]Public [/color][color=#0000bb]Shared [/color][color=#007700]Function [/color][color=#0000bb]SendMessage[/color][color=#007700]([/color][color=#0000bb]ByVal hWnd [/color][color=#007700]As [/color][color=#0000bb]IntPtr[/color][color=#007700], [/color][color=#0000bb]ByVal msg [/color][color=#007700]As [/color][color=#0000bb]UInt32[/color][color=#007700], [/color][COLOR=#0000bb]_
         ByVal wParam [/COLOR][color=#007700]As [/color][color=#0000bb]UInt32[/color][color=#007700], [/color][color=#0000bb]ByVal lParam [/color][color=#007700]As [/color][color=#0000bb]UInt32[/color][color=#007700]) As [/color][COLOR=#0000bb]UInt32
End [/COLOR][COLOR=#007700]Function  
[/COLOR][/COLOR]

ثم نطبق الكود


كود :
[color=#000000][COLOR=#007700]If [/color][color=#0000bb]IsAdmin[/color][color=#007700]() [/color][COLOR=#0000bb]Then
  Button1[/COLOR][color=#007700].[/color][color=#0000bb]FlatStyle [/color][color=#007700]= [/color][color=#0000bb]FlatStyle[/color][color=#007700].[/color][COLOR=#0000bb]System
  SendMessage[/COLOR][color=#007700]([/color][color=#0000bb]Button1[/color][color=#007700].[/color][color=#0000bb]Handle[/color][color=#007700], &[/color][color=#0000bb]H160C[/color][color=#007700], [/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]UInt32[/color][color=#007700].[/color][color=#0000bb]MaxValue[/color][COLOR=#007700])
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If  
[/COLOR][/COLOR]

[صورة مرفقة: 18_01349128877.png]