الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة تغيير خصائص زر قائمة Start

بدأه GHOST2010 في 5 يوليو 2009 · 5 رد · 4,381 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كنت ذات يوم عند أحد أصحابى وكان فى هذا اليوم قد قام بتحميل نسخة ويندوز جديدة قد تم عليها بعض التعديلات وبها بعض البرامج الإضافية ,, كان أحد هذه البرامج برنامج يقوم بتغيير خصائص زر Start المعروف

صاحبى هذا كان فى بداية تعلم البرمجة لذلك كان معجبا جدا بهذا البرنامج :D

وسألنى: هل تستطيع عمل برنامج مثل هذا؟ :D

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

طبعا هو لا يعرف ماهى الـAPI وماهى إمكانياتها :D :D

المهم ,, قمت بكتابة برنامج صغير ليفعل ما يريد ولم يكن يتوقع أن المسألة بهذه السهولة والبساطة

ولهذا (ولا حول ولا قوة إلا بالله) بدلا من أن يكمل تعلمه للبرمجة اتجه مباشرة لتعلم الـAPI :wacko: :blink:

المهم ,, أعتذر على الإطالة

أردت أن أضع الكود هنا للفائدة ولأنى رأيت بعض الأسئلة (لا أذكر فى أى قسم) عن كيفية تغيير كلمة Start

بسم الله نبدأ

الخطوات:

1- فتح مشروع جديد

2- إضافة مربع نص باسم txtStartText

3- ثلاثة أزرار بالأسماء btnChangeText , btnHide , btnShow

الأكواد

بالطبع سيكون الكود باستخدام دوال الـAPI

لذلك تكون الخطوة الأولى هى استيراد مجال الأسماء System.Runtime.InteropServices

Imports System.Runtime.InteropServices

الخطوة الثانية هى الإعلان عن الدوال التى سنستخدمها وفى برنامجنا هذا سنحتاج إلى أربعة دوال فقط

هى:

1- الدالة FindWindow للحصول على مقبض شريط المهام

2- الدالة FindWindowEx للحصول على مقبض زر Start

3- الدالة SetWindowText لتغيير النص

4- الدالة SetWindowPos لإخفاء/إظهار/تحريك الزر

الإعلان عنها يكون بهذه الطريقة

	<DllImport("User32.dll", EntryPoint:="FindWindowA")> _
	Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
	End Function

	<DllImport("User32.dll", EntryPoint:="FindWindowExA")> _
	Private Shared Function FindWindowEx(ByVal hWndParent As Integer, ByVal hWndAfter As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
	End Function

	<DllImport("User32.dll", EntryPoint:="SetWindowTextA")> _
	Private Shared Function SetWindowText(ByVal hwnd As Integer, ByVal lpString As String) As Integer
	End Function

	<DllImport("User32.dll")> _
		Private Shared Function SetWindowPos(ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal left As Integer, ByVal top As Integer, ByVal width As Integer, ByVal height As Integer, ByVal wFlags As Integer) As Integer
	End Function

نقوم بتعريف بعض الثوابت والمتغيرات التى سيتم العمل بها وفى حالتنا سنحتاج لثابتين ومتغيرين

الثابتين هما: SWP_HIDEWINDOW , SWP_SHOWWINDOW

والمتغيرين هما: taskbarHandle , startButtonHandle

وكلها من النوع Integer

	Private Const SWP_HIDEWINDOW As Integer = &H80
	Private Const SWP_SHOWWINDOW As Integer = &H40

	Dim taskbarHandle, startButtonHandle As Integer

المتغير taskbarHandle سنقوم باستخدامه لتخزين مقبض شريط المهام

أما startButtonHandle فسيستخدم لتخزين مقبض زر Start

طريقة الحصول على هذه القيم:

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		taskbarHandle = FindWindow("Shell_TrayWnd", Nothing)
		If taskbarHandle <> 0 Then
			startButtonHandle = FindWindowEx(taskbarHandle, 0, "BUTTON", Nothing)
		Else
			MsgBox("Cann't get the task-bar handle", MsgBoxStyle.Exclamation)
		End If
	End Sub

السطر الأول من الكود يقوم باستدعاء الدالة FindWindow والتى أشرنا فى المقدمة أنها تستخدم هنا للحصول على مقبض شريط المهام والمعامل الذى قمنا بتمريره Shell_TrayWnd هو اسم الفئة الخاصة بشريط المهام

ملحوظة: لكل أداة فئة تتبعها فمثلا مربع النص يتبع الفئة EDIT واللافتة (Label) تتبع الفئة STATIC والأزرار تتبع الفئة BUTTON وهكذا

بعد هذا السطر سيحمل المتغير taskbarHandle قيمة مقبض شريط المهام

وبما أن زر Start موجود داخل شريط المهام فلابد للحصول على المقبض الخاص به أن نبحث داخل شريط المهام عنه ولذلك استخدمنا الدالة FindWindowEx والتى تمكننا من البحث عن نافذة داخل نافذة أخرى

ملحوظة: مصطلح نافذة يطلق على جميع الأدوات التى يمكن استخدامها وليس النموذج فقط كما يظن البعض

المهم ,,

الدالة FindWindowEx تستقبل فى المعامل الأول مقبض النافذة التى سنبحث بداخلها وفى حالتنا هذه سيكون المتغير taskbarHandle لأننا نبحث بداخله عن زر Start

المعامل الثانى يستخدم لتحديد المكان الذى نريد بدء عملية البحث منه وهو عبارة عن مقبض نافذة يتم البحث من بعدها داخل النافذة الأم وبما أننا نريد البحث من أول نافذة على شريط المهام قمنا باستخدام القيمة صفر

المعامل الثالث عبارة عن اسم الفئة التى تتبعها النافذة التى نبحث عنها وبما أنه زر فهو يتبع الفئة BUTTON

المعامل الرابع عبارة عن عنوان النافذة التى نبحث عنها (إذا كنا نبحث عن نافذة بعنوان معين فيمكن استخدام هذا المعامل) لكننا لم نستخدمه هنا لأننا لا نعرف النص/العنوان الموجود على الزر وفى هذه الحالة فإن أول حالة تطابق المعاملات الأخرى سيتم العودة بالمقبض الخاص بها

أطلت عليكم :huh:

المهم بعد تنفيذ هذا الكود سنجد فى المتغير startButtonHandle المقبض الخاص بزر Start

وكما وضحت فى موضوع سابق عن كيفية كشف النص المكتوب على شكل كلمة مرور

قلت أنك بمجرد الحصول على مقبض النافذة يمكنك التعامل معها وتعديل خصائصها كما تشاء كأنها فى برنامجك الخاص

نبدأ الآن فى كتابة أكواد أزرار تغيير الخصائص

أولا: زر تغيير النص

قلنا أننا سنستخدم الدالة SetWindowText

	Private Sub btnChangeText_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChangeText.Click
		SetWindowText(startButtonHandle, Me.txtStartText.Text)
	End Sub

الدالة لها معاملين الأول هو مقبض النافذة التى سيتم تغيير النص الخاص بها والثانى هو النص الجديد

ثانيا: زر الإخفاء

	Private Sub btnHide_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHide.Click
		SetWindowPos(startButtonHandle, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
	End Sub

ثالثا: زر الإظهار

هو نفس الكود السابق لكن غير المعامل الأخير إلى SWP_SHOWWINDOW

يمكنك أيضا استخدام نفس الدالة (SetWindowPos) لتغيير أبعاد الزر فلو لاحظت المعاملات 3,4,5,6 لوجدتها خاصة بأبعاد النافذة Left,Top,Width,Height يمكنك تعديل قيم هذه المعاملات كما تشاء وسيتم تغيير أبعاد الزر

الكود بالكامل

Imports System.Runtime.InteropServices

Public Class Form1

	<DllImport("User32.dll", EntryPoint:="FindWindowA")> _
	Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
	End Function

	<DllImport("User32.dll", EntryPoint:="FindWindowExA")> _
	Private Shared Function FindWindowEx(ByVal hWndParent As Integer, ByVal hWndAfter As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
	End Function

	<DllImport("User32.dll", EntryPoint:="SetWindowTextA")> _
	Private Shared Function SetWindowText(ByVal hwnd As Integer, ByVal lpString As String) As Integer
	End Function

	<DllImport("User32.dll")> _
	Private Shared Function SetWindowPos(ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal left As Integer, ByVal top As Integer, ByVal width As Integer, ByVal height As Integer, ByVal wFlags As Integer) As Integer
	End Function

	Private Const SWP_HIDEWINDOW As Integer = &H80
	Private Const SWP_SHOWWINDOW As Integer = &H40

	Dim taskbarHandle, startButtonHandle As Integer

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		taskbarHandle = FindWindow("Shell_TrayWnd", Nothing)
		If taskbarHandle <> 0 Then
			startButtonHandle = FindWindowEx(taskbarHandle, 0, "BUTTON", Nothing)
		Else
			MsgBox("Cann't get the task-bar handle", MsgBoxStyle.Exclamation)
		End If
	End Sub

	Private Sub btnChangeText_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChangeText.Click
		SetWindowText(startButtonHandle, Me.txtStartText.Text)
	End Sub

	Private Sub btnHide_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHide.Click
		SetWindowPos(startButtonHandle, 0, 0, 0, 90, 32, SWP_HIDEWINDOW)
	End Sub

	Private Sub btnShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShow.Click
		SetWindowPos(startButtonHandle, 0, 0, 0, 90, 32, SWP_SHOWWINDOW)
	End Sub
End Class
1

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#2

درس رائع جدا شكرا لك جوست

#3

مشكورررررررررررر

#4

درس جميل ومفيد

تشكر على ذلك

YqX29279.png

اذا اعجبك موضوعي أو مشاركتي قيمني إيجابيا هنا ←←←←←←←←←←←←←←←←←←←←↓↓

#5

شرح ممتاااااااااااااااااز

فعلاً انت أستاذ

ولو سمحت حضرتك ممكن تقولى الطريقة اللى اقدر بيها يتكتب الإسم الموجود مكان قايمة ابدأ فى التكست بوكس

مثلاً لو انا كتبت مكان زر start او ابدأ كلمة "El-Sakr" عايز لما اضغط على زرار فى البرنامج يظهرلى الإسم ده

#6

شكرااااااااااااا الله يعطيك العافيه

مواضيع مشابهة