You are on page 1of 21

‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬

‫ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢ‬

‫وأﻓﻀﻞ اﻟﺼﻼة و أﺗﻢ اﻟﺘﺴﻠﯿﻢ ﻋﻠﻰ رﺳﻮﻟﻨﺎ اﻟﻜﺮﯾﻢ‬

‫اﻟﺴﻼم ﻋﻠﯿﻜﻢ ورﺣﻤﺔ اﷲ وﺑﺮﻛﺎﺗﮫ‬

‫رﺿﺎ اﻟﻨﺎس ﻏﺎﯾﺔ ﻻ ﺗﺪرك‬

‫ﺿﺤـﻜﺖ ﻓﻘﺎﻟﻮا أﻻ ﺗﺤﺘﺸﻢ‬

‫ﺑﻜﯿﺖ ﻓﻘﺎﻟﻮا أﻻ ﺗﺒﺘﺴﻢ‬

‫ﺑﺴﻤـﺖ ﻓـﻘـﺎﻟﻮا ﯾﺮاﺋﻲ ﺑﮭـﺎ‬

‫ﻋﺒﺴﺖ ﻓﻘﺎﻟﻮا ﺑﺪا ﻣﺎ ﻛﺘﻢ‬

‫ﺻﻤّﺖ ﻓﻘﺎﻟﻮا ﻛﻠﯿﻞ اﻟﻠﺴﺎن‬

‫ﻧﻄﻘﺖ ﻓﻘﺎﻟﻮا ﻛﺜﯿﺮ اﻟﻜـﻠﻢ‬

‫ﺣﻠﻤﺖ ﻓﻘﺎﻟﻮا ﺻﻨﯿﻊ اﻟﺠﺒﺎن‬

‫وﻟﻮ ﻛﺎن ﻣﻘﺘﺪرا ﻻﻧـﺘﻘﻢ‬

‫ﺑﺴﻠﺖ ﻓﻘﺎﻟﻮا ﻟﻄﯿـﺶ ﺑﮫ‬

‫وﻣـﺎ ﻛـﺎن ﻣﺠـﺘﺮﺋﺎً ﻟﻮ ﺣﻜﻢ‬

‫ﯾﻘﻮﻟـﻮن ﺷـﺬ إذا ﻗﻠـﺖ ﻻ‬

‫وإﻣﻌـﺔ ﺣﯿﻦ واﻓـﻘـﺘﮭﻢ‬

‫ﻓﺄﯾﻘﻨﺖ أﻧﻲ ﻣﮭﻤﺎ أرد‬

‫رﺿﺎ اﻟﻨﺎس ﻻ ﺑﺪ ﻣﻦ أن أذم‬

‫ﺗﺤﯿﺔ ﻃﯿﺒﺔ وﺑﻌﺪ‪:‬‬

‫ﺳﻨﺘﻨﺎول ﻓﻲ ھﺬا اﻟﻤﻮﺿﻮع ﻃﺮﯾﻘﺔ ﺗﺴﺠﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ وﺗﻔﻌﯿﻠﮫ و اﻟﺬي ﺗﻢ ﺗﻨﺎوﻟﮫ ﺳﺎﺑﻘﺎ ﻓﻲ اﻟﻔﯿﺠﻮال ﺑﯿﺴﻚ ‪ ٦‬ورﻏﻢ اﻟﻮﻗﺖ ﺑﯿﻦ‬
‫اﻟﻤﻮﺿﻮﻋﯿﻦ ﻟﻢ أﺟﺪ ﻣﻮﺿﻮع ﯾﻄﺮح ﻧﻔﺲ اﻟﻔﻜﺮة ﺗﻤﺎﻣﺎ وإﻧﻤﺎ ﺑﺘﺸﺎﺑﮫ وﺑﻌﺾ اﻟﺘﻌﻘﯿﺪ ﻟﺬﻟﻚ ﺳﺄﻋﯿﺪ ﺑﻨﺎء اﻟﻔﻜﺮة و أﻃﺮﺣﮭﺎ ﻓﻲ ھﺬا‬
‫اﻟﻤﻮﺿﻮع إن ﺷﺎء اﷲ ﻣﻦ ﺟﺪﯾﺪ ﺑﺄﺳﻠﻮب ﺑﺴﯿﻂ وﻣﻄﻮل ﻗﻠﯿﻼ ﻣﻦ اﻟﻨﺎﺣﯿﺔ اﻟﻨﻈﺮﯾﺔ ﻟﯿﺘﻢ اﺳﺘﯿﻌﺎﺑﮭﺎ ﺑﺎﻟﺸﻜﻞ اﻟﻜﺎﻓﻲ ‪.‬‬

‫ﺑﺪاﯾﺔ وﻗﺒﻞ ﻛﻞ ﺷﻲء اﻟﻄﺮﯾﻘﺔ ﻣﻄﺮوﺣﺔ ﻷﺳﺒﺎب ﺗﻌﻠﯿﻤﯿﺔ وﻃﺒﻌﺎ ﻟﻦ أﻧﺎﻗﺶ ﻓﻌﺎﻟﯿﺔ اﻟﺤﻤﺎﯾﺔ أو ﻗﻮة اﻟﻜﺴﺮ ﻻن اﻷﻣﺮ ﻣﻔﺮوغ ﻣﻨﮫ‬
‫وﻻ أﺣﺐ اﻟﻮﻟﻮج ﻓﯿﮫ ﻟﻜﻦ إن ﺷﺎء اﷲ ﺳﯿﺘﻢ ﺗﻐﻄﯿﺔ ﺑﻌﺾ اﻟﺠﻮاﻧﺐ اﻟﻮﻗﺎﺋﯿﺔ ﻟﮭﺬا اﻟﻤﻮﺿﻮع ‪.‬‬

‫ﺑﺴﻢ اﷲ ﻧﺒﺪأ‪:‬‬

‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫ﺳﻨﻌﺘﻤﺪ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ اﻟﺬي ﺳﻨﻘﻮم ﺑﺘﺼﻤﯿﻤﮫ ﻃﺮﯾﻘﺔ اﻟﺤﻤﺎﯾﺔ ﻋﺒﺮ ﺗﺴﺠﯿﻞ وﺗﻔﻌﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ وھﻲ أن ﺑﺮﻧﺎﻣﺠﻨﺎ ﻋﻨﺪ ﺗﺸﻐﯿﻠﮫ ﯾﻈﮭﺮ‬
‫ﻟﻠﻤﺴﺘﺨﺪم رﻗﻢ وﯾﻄﺎﻟﺒﮫ ﺑﺈدﺧﺎل اﻟﺮﻗﻢ اﻟﻤﻘﺎﺑﻞ ﻟﮫ وھﺬا اﻟﺮﻗﻢ ﻃﺒﻌﺎ ﺳﯿﻜﻮن ﻓﺮﯾﺪ أو ﻣﻤﯿﺰ أي ﯾﺨﺘﻠﻒ ﻣﻦ ﺟﮭﺎز إﻟﻰ أﺧﺮ وﻟﻨﺎ‬
‫اﻟﺤﺮﯾﺔ ﻓﻲ ﺣﺎل اﻋﺘﻤﺎد رﻗﻢ ﻗﻄﻌﺔ ﻓﻲ اﻟﺠﮭﺎز أو داﻟﺔ ﻣﻌﯿﻨﺔ وﺑﻌﺪ ﻇﮭﻮر اﻟﺮﻗﻢ ﻟﻠﻤﺴﺘﺨﺪم ﯾﺘﻢ إرﺳﺎﻟﮫ ﻟﻚ ﻟﺘﻮﻟﯿﺪ اﻟﺮﻗﻢ اﻟﻤﻘﺎﺑﻞ ﻟﮫ‬
‫و إرﺳﺎﻟﮫ ﻟﻠﻌﻤﯿﻞ ﻟﯿﻌﻤﻞ اﻟﺒﺮﻧﺎﻣﺞ إذا ﻛﺎن اﻟﺮﻗﻢ ﻣﻄﻠﻮب ﺑﻤﺠﺮد اﻟﺘﺸﻐﯿﻞ أو ﻟﯿﻘﻮم ﺑﺘﻔﻌﯿﻞ ﻛﺎﻣﻞ اﻟﻤﯿﺰات إذا ﻛﻨﺖ ﻋﺮﺿﺘﮫ‬
‫ﺑﻄﺮﯾﻘﺔ ﺗﻌﻄﯿﻞ ﺑﻌﺾ اﻟﻨﻮاﻓﺬ أو اﻟﺨﺼﺎﺋﺺ‪.‬‬

‫إذا اﻟﻔﻜﺮة اﻷﺳﺎﺳﯿﺔ أن ﺑﺮﻧﺎﻣﺠﻨﺎ ﯾﻄﻠﺐ رﻗﻢ ﻟﯿﺼﺒﺢ ﻧﺴﺨﺔ ﻛﺎﻣﻠﺔ ‪.‬‬

‫ﺑﺪاﯾﺔ ﻧﺴﺘﺨﺮج رﻗﻢ ﻓﺮﯾﺪ ﻣﻦ ﺟﮭﺎز اﻟﺤﺎﺳﻮب ﺑﺤﯿﺚ ﯾﻜﻮن ھﺬا اﻟﺮﻗﻢ ﯾﺨﺘﻠﻒ ﺑﯿﻦ ﻛﻞ ﺣﺎﺳﺐ و أﺧﺮ ﻛﺮﻗﻢ اﻟﻘﺮص اﻟﺼﻠﺐ أو‬
‫اﻟﻤﻌﺎﻟﺞ أو ‪ ...‬وﻧﻘﻮم ﺑﻌﻤﻠﯿﺎت ﺗﻤﻮﯾﮫ ﻟﮫ ﻟﻜﻲ ﻻ ﯾﻈﮭﺮ ﻣﻜﺸﻮﻓﺎ ﻛﻤﺎ ھﻮ ﻓﯿﻨﺘﺞ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻟﻠﻤﺴﺘﺨﺪم‪.‬‬

‫اﻵن ﻧﻘﻮم ﺑﻌﻠﻤﯿﺎت ﺗﻤﻮﯾﮫ أﺧﺮى ﻟﺮﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻟﻨﺸﺘﻖ رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﻓﺎﻟﺒﺮﻧﺎﻣﺞ ﯾﺤﻮي رﻗﻢ اﻟﻘﻄﻌﺔ أي إﺣﺪى ﻋﺘﺎد اﻟﺤﺎﺳﻮب ورﻗﻢ‬
‫ﺗﺴﺠﯿﻞ ورﻗﻢ ﺗﻔﻌﯿﻞ ﻓﺮﻗﻢ اﻟﻘﻄﻌﺔ ﻻ ﻋﻼﻗﺔ ﻟﻨﺎ ﺑﮫ ﻷﻧﻨﺎ ﺑﻌﺪ اﺳﺘﺨﺮﺟﺎه ﻋﺪﻟﻨﺎه ﻟﯿﻈﮭﺮ ﺑﻄﺮﯾﻘﺔ أﺧﺮى واﻟﻨﺎﺗﺞ ﺳﯿﻜﻮن رﻗﻢ‬
‫اﻟﺘﺴﺠﯿﻞ اﻵن ﻧﻌﯿﺪ ﻧﻔﺲ اﻟﻜﺮة وﻧﻌﺪل اﻟﺘﺴﺠﯿﻞ ﻻﺳﺘﺨﺮاج رﻗﻢ اﻟﺘﻔﻌﯿﻞ وﺑﺬﻟﻚ ﺑﺮﻧﺎﻣﺠﻨﺎ ﯾﺠﻮي اﻷرﻗﺎم اﻟﺜﻼﺛﺔ و اﻟﻈﺎھﺮ ﻣﻨﮭﺎ‬
‫ھﻮ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻓﻘﻂ ﻟﺪى اﻟﻌﻤﯿﻞ‪.‬‬

‫ﺳﯿﻘﻮم اﻟﻌﻤﯿﻞ ﺑﺈرﺳﺎل رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻟﻨﺎ ﻟﻨﺴﺘﺨﺮج رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ اﺳﺘﺨﺪﻣﻨﺎھﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ وﻧﺮﺳﻠﮫ ﻟﮫ وﻋﻨﺪھﺎ‬
‫ﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ وﻛﺴﺮ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﻗﺒﻞ اﻟﻤﮭﻨﺪس اﻟﻌﻜﺴﻲ ﻋﻔﻮا أﻗﺼﺪ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ وﺗﻔﻌﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺣﺎل‬
‫اﻟﺘﺴﺎوي‪.‬‬

‫اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ ﺳﻨﺘﺒﻌﮭﺎ ﻓﻲ درﺳﻨﺎ ھﻲ رﻗﻢ اﻟﻤﻌﺎﻟﺞ اﻟﺒﺮ وﺳﯿﺴﻮر‪.‬‬

‫زﻣﻦ ‪ vb6‬ﻛﻨﺎ ﻧﺴﺘﺨﺪم ﻣﻜﺘﺒﺔ ﻣﯿﻜﺮوﺳﻮﻓﺖ ‪ WbemScripting‬ﻻﺳﺘﺨﺮاج رﻗﻢ اﻟﻤﻌﺎﻟﺞ وﻓﻲ اﻟﺪوت ﻧﺖ ﺳﻨﺴﺘﺨﺪم‬
‫‪ System.Management.dll‬ﻻﺳﺘﺨﺮاج اﻟﺮﻗﻢ و اﻟﻤﻜﺘﺒﺔ ﻧﺴﺘﻄﯿﻊ ﻣﻦ ﺧﻼﻟﮭﺎ اﺳﺘﺨﺮاج ﻣﻮاﺻﻔﺎت ﻋﺘﺎد اﻟﺠﮭﺎز ﻟﻜﻢ ﻛﺒﯿﺮ‬
‫ﻣﻦ ھﺬا اﻟﻌﺘﺎد ﻣﺎ ﯾﮭﻤﻨﺎ ﻓﻲ ﻣﻮﺿﻮﻋﻨﺎ ھﻮ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﻛﻮﻧﮫ ﻓﺮﯾﺪ وﻧﺮﯾﺪ اﻻﻋﺘﻤﺎد ﻋﻠﯿﮫ ﻓﻲ ﺗﻐﯿﯿﺮ اﻟﺮﻗﻢ ﻟﻜﻞ ﻣﺴﺘﺨﺪم ﻟﺒﺮﻧﺎﻣﺠﻨﺎ‪.‬‬

‫اﻓﺘﺢ ‪ Microsoft Visual Studio 2008‬و أﻧﺸﺄ ﻣﺸﺮوع ﺟﺪﯾﺪ وﺳﻤﮫ ﻣﺎ ﺷﺌﺖ‬

‫ﺗﻮﺟﮫ اﻟﻰ ﻧﺎﻓﺬة ‪ Solution Explorer‬واﺿﻐﻂ ﻋﻞ اﻟﻤﺸﺮوع ﺑﺎﻟﺰر اﻷﯾﻤﻦ واﺧﺘﺮ اﻟﺨﺼﺎﺋﺺ ‪ Properties‬ادﺧﻞ إﻟﻰ‬
‫اﻟﺘﺒﻮﯾﺐ ‪ References‬و أﺿﻒ ‪ Add References‬اﻟﻤﻜﺘﺒﺔ ‪ System.Management‬ﻛﻤﺎ ﻓﻲ اﻟﺼﻮرة اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬

‫ وزر أﻣﺮ وﺳﻤﮫ‬TextBoxId ‫ﺑﻌﺪ إﺿﺎﻓﺔ اﻟﻤﻜﺘﺒﺔ ﺗﻮﺟﮫ ﻟﻠﻨﻤﻮذج أي اﻟﻔﻮرم و أﺿﻒ ﺻﻨﺪوق ﻧﺺ ﺗﺤﺖ ﻣﺴﻤﻰ‬
GetIdButton

: ‫اﻟﺘﺼﻤﯿﻢ‬

: ‫اﻵن ﺿﻐﻄﺘﯿﻦ ﻣﺘﺘﺎﻟﯿﺘﯿﻦ ﻋﻠﻰ زر اﻷﻣﺮ ﻹدﺧﺎل اﻟﻜﻮد اﻟﻤﻨﺎﺳﺐ ﻻﺳﺘﺨﺮاج رﻗﻢ اﻟﻤﻌﺎﻟﺞ ووﺿﻌﮫ ﻓﻲ ﺻﻨﺪوق اﻟﻨﺺ‬

:‫وﺑﺎﻷﺣﺮى ھﺬا اﻟﻜﻮد ﻛﺎﻣﻼ أوﻻ اﺳﺘﯿﺮاد ﻟﻮﻇﺎﺋﻒ اﻟﻤﻜﺘﺒﺔ وﺑﻌﺪھﺎ ﻛﻮد اﻟﺰر‬

Imports System.Management
Public Class Form1
Private Sub GetIdButton_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles GetIdButton.Click
Dim Searcher As ManagementObjectSearcher
Searcher = New ManagementObjectSearcher("Select ProcessorId From
Win32_Processor")
For Each Device As ManagementObject In Searcher.Get
For Each Prop As PropertyData In Device.Properties
TextBoxId.Text = (Prop.Value.ToString)
www.vb4arab.com nabhan170@hotmail.com ‫ ﻧﻮر ﻧﺒﮭﺎن‬:‫ﺑﻘﻠﻢ‬
‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫‪Next‬‬
‫‪Next‬‬
‫‪End Sub‬‬

‫‪End Class‬‬

‫ﻗﻢ ﺑﺘﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ و أﺿﻐﻂ ﻋﻠﻰ اﻟﺰر وﺳﺘﺠﺪ ﺑﺈذن اﷲ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﯾﻄﺒﻊ ﻓﻲ ﺻﻨﺪوق اﻟﻨﺺ‪.‬‬

‫ﺑﺎﻟﻨﺴﺒﺔ ﻟﺸﺮح اﻟﻜﻮد اﻟﺴﺎﺑﻖ ‪:‬‬

‫ﻓﻲ اﻟﺒﺪاﯾﺔ اﺳﺘﯿﺮاد ﻓﻀﺎء اﻟﻤﻜﺘﺒﺔ وﻓﻲ ﻛﻮد اﻟﺰر ﻗﻤﻨﺎ ﺑﺎﻟﺒﺤﺚ ﻓﻲ ﻣﻮاﺻﻔﺎت اﻟﻤﻌﺎﻟﺞ ‪ Processor‬ﻋﻦ ﻗﯿﻤﺔ ‪Value‬‬
‫اﻟﺨﺎﺻﯿﺔ ‪ ProcessorId‬ﺑﻮاﺳﻄﺔ ﺣﻠﻘﺔ ‪ For Each‬وﻋﻨﺪ إﯾﺠﺎدھﺎ ﻧﺴﺘﺨﺮﺟﮭﺎ ﻓﻲ ﺻﻨﺪوق اﻟﻨﺺ‪.‬‬

‫رﺑﻤﺎ ﯾﺴﺄل اﻟﺒﻌﺾ ﻟﻤﺎذا ﻻ ﻧﻌﺮض اﻟﺮﻗﻢ ﻣﺒﺎﺷﺮة ﺑﺪون اﻟﺤﻠﻘﺔ واﻟﺒﺤﺚ ﻓﯿﮭﺎ ﻓﺎﻟﺠﻮاب ﺳﯿﻜﻮن ﻻن رﻗﻢ اﻟﺨﺎﺻﯿﺔ ﺑﯿﻦ ﺧﺼﺎﺋﺺ‬
‫اﻟﻤﻌﺎﻟﺞ ﻟﻦ ﺗﻜﻮن اﻷوﻟﻰ ورﺑﻤﺎ ﯾﺨﺘﻠﻒ ﺗﺮﺗﯿﺒﮭﺎ ﻣﻦ ﺟﮭﺎز ﻷﺧﺮ ﻟﺬﻟﻚ ﻧﺤﻦ ﻧﺒﺤﺚ ﻋﻨﮭﺎ ﺿﻤﻦ اﻟﻤﻮاﺻﻔﺎت ﻛﻠﮭﺎ وﻋﻨﺪ إﯾﺠﺎدھﺎ‬
‫ﯾﺘﻢ ﻗﻨﺺ اﻟﻘﯿﻤﺔ و وﺿﻌﮭﺎ ﻓﻲ ﺻﻨﺪوق اﻟﻨﺺ‪.‬‬

‫اﻵن ﻧﺴﺘﻄﯿﻊ اﺳﺘﺨﺪام رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﻛﻤﺎ ھﻮ ﻟﻌﻤﻠﯿﺎت اﻟﺘﺴﺠﯿﻞ واﻟﺘﻔﻌﯿﻞ ﺑﺤﯿﺚ ﯾﻜﻮن اﻟﺮﻗﻢ ﻣﺒﺎﺷﺮة رﻗﻢ ﺗﺴﺠﯿﻞ ورﻗﻢ اﻟﺘﻔﻌﯿﻞ‬
‫ﯾﻜﻮن ﺑﺈﺿﺎﻓﺔ ﺑﻌﺾ أرﻗﺎم أو ﻣﻌﺎدﻟﺔ ﻟﮫ ﻟﻜﻦ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ إذا ﻛﺎن اﻟﻤﺴﺘﺨﺪم ﻟﺪﯾﮫ ﺑﻌﺾ اﻟﺒﺪﯾﮭﺔ ﻓﺴﯿﻨﺘﺒﮫ إﻟﻰ اﻟﺮﻗﻢ وﯾﻜﺘﺸﻒ‬
‫اﻧﮫ رﻗﻢ اﻟﻤﻌﺎﻟﺞ وﻋﻨﺪھﺎ ﯾﻌﺮف اﻟﺘﻐﯿﺮ اﻟﺬي ﺣﺼﻞ ﻟﺮﻗﻢ اﻟﺘﻔﻌﯿﻞ ﺑﺤﺬف رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﻣﻦ اﻟﺴﻠﺴﺔ ﻟﺬﻟﻚ ﺳﻮف ﻧﻘﻮم ﺑﺘﺸﻔﯿﺮ اﻟﺮﻗﻢ‬
‫و إﻇﮭﺎره ﺑﻄﺮﯾﻘﺔ ﺗﺠﻌﻞ اﻟﻤﺴﺘﺨﺪم ﻻ ﯾﻌﺮف ﻣﺎ ھﻮ اﻟﺮﻗﻢ اﻟﺬي اﻋﺘﻤﺪﻧﺎ ﻋﻠﯿﮫ ﻟﺬﻟﻚ اﻵن ﻧﺘﺠﮫ ﻹﻧﺘﺎج رﻗﻢ اﻟﺘﺴﺠﯿﻞ واﻟﺘﻔﻌﯿﻞ ‪.‬‬

‫أدرج ﺻﻨﺪوﻗﻲ ﻧﺺ ﺟﺪﯾﺪﯾﻦ ﺗﺤﺖ ﻣﺴﻤﯿﺎت ‪ TextBoxReg‬و ‪ TextBoxAct‬ﻟﯿﺼﺒﺢ اﻟﺘﺼﻤﯿﻢ‪:‬‬

‫اﻵن ﺳﻨﺘﺠﮫ ﻻﺳﺘﺨﺮاج رﻗﻢ اﻟﺘﺴﺠﯿﻞ واﻟﺘﻔﻌﯿﻞ ﻋﺒﺮ ﺗﺤﻮﯾﻞ أو ﺗﺸﻔﯿﺮ اﻟﺴﻠﺴﺔ اﻟﻨﺼﯿﺔ اﻟﺘﻲ ﺗﻌﺒﺮ ﻋﻦ رﻗﻢ اﻟﻤﻌﺎﻟﺞ و اﻟﺘﻲ ﺗﻈﮭﺮ‬
‫ﻓﻲ ﺻﻨﺪوق اﻟﻨﺺ اﻷول ‪ TextBoxId‬ﺳﺄﺳﺘﺨﺪم داﻟﺔ اﻟﺘﺤﻮﯾﻞ إﻟﻰ اﻻﺳﻜﻲ )اﻟﻨﺎﺗﺞ ﺳﯿﻜﻮن رﻗﻤﻲ( وھﺬه ﻃﺮﻗﺔ ﺳﮭﻠﺔ ﻟﺘﻠﻘﯿﻦ‬
‫رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﻟﻠﻌﻤﯿﻞ ﻛﻮﻧﮭﺎ ﻣﺤﺼﻮرة ﺑﺎﻟﺸﻜﻞ اﻟﺮﻗﻤﻲ ﻣﻦ ‪ ٠‬إﻟﻰ ‪ ٩‬ﻓﻘﻂ وﺑﻌﯿﺪة ﻋﻦ اﻟﺮﻣﻮز أو اﻷﺣﺮف‬

‫أﺿﻒ اﻟﺪاﻟﺔ اﻟﺘﺎﻟﯿﺔ ﻟﺒﺮﻧﺎﻣﺠﻚ ‪:‬‬

‫‪Function Str2Int(ByVal InStrng As Object) As String‬‬


‫‪Dim StrLn As Integer‬‬
‫‪Dim Cntr As Integer‬‬
‫‪Dim NewStr As String‬‬
‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬
‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬

Str2Int = ""
StrLn = Len(InStrng)
If StrLn = 0 Then Exit Function
NewStr = ""
For Cntr = 1 To StrLn
Select Case Mid(InStrng, Cntr, 1)
Case "0" To "z"
NewStr = NewStr & Asc(Mid(InStrng, Cntr, 1))
End Select
Next Cntr
Str2Int = NewStr
End Functio

: ‫و أﺿﻒ ﻓﻲ أﺧﺮ ﻛﻮد اﻟﺰر اﻟﺴﻄﺮﯾﻦ اﻟﺘﺎﻟﯿﻦ‬

TextBoxReg.Text = Str2Int(TextBoxId.Text)
TextBoxAct.Text = Str2Int(TextBoxReg.Text)
: ً‫أي ﯾﺼﺒﺢ اﻟﻜﻮد ﻛﺎﻣﻼ‬

Imports System.Management
Public Class Form1
Private Sub GetIdButton_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles GetIdButton.Click
Dim Searcher As ManagementObjectSearcher
Searcher = New ManagementObjectSearcher("Select ProcessorId From
Win32_Processor")
For Each Device As ManagementObject In Searcher.Get
For Each Prop As PropertyData In Device.Properties
TextBoxId.Text = (Prop.Value.ToString)
Next
Next
TextBoxReg.Text = Str2Int(TextBoxId.Text)
TextBoxAct.Text = Str2Int(TextBoxReg.Text)
End Sub
Function Str2Int(ByVal InStrng As Object) As String
Dim StrLn As Integer
Dim Cntr As Integer
Dim NewStr As String

Str2Int = ""
StrLn = Len(InStrng)
If StrLn = 0 Then Exit Function
NewStr = ""
For Cntr = 1 To StrLn
Select Case Mid(InStrng, Cntr, 1)
www.vb4arab.com nabhan170@hotmail.com ‫ ﻧﻮر ﻧﺒﮭﺎن‬:‫ﺑﻘﻠﻢ‬
‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫"‪Case "0" To "z‬‬
‫))‪NewStr = NewStr & Asc(Mid(InStrng, Cntr, 1‬‬
‫‪End Select‬‬
‫‪Next Cntr‬‬
‫‪Str2Int = NewStr‬‬
‫‪End Function‬‬
‫‪End Class‬‬

‫ﺷﻐﻞ اﻟﺒﺮﻧﺎﻣﺞ وﺟﺮب اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺰر وﺳﯿﻈﮭﺮ أﻣﺎﻣﻚ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ‪:‬‬

‫ﻓﺎﻟﺮﻗﻢ اﻷول ھﻮ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﺳﻨﺨﻔﯿﮫ ﻋﻦ اﻟﻌﻤﯿﻞ‬

‫اﻟﺮﻗﻢ اﻟﺜﺎﻧﻲ ھﻮ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻣﺸﺘﻖ ﺑﺘﺤﻮﯾﻞ رﻗﻢ اﻟﻤﻌﺎﻟﺞ إﻟﻰ ﻗﯿﻢ اﻻﺳﻜﻲ وھﻮ ﺳﯿﻈﮭﺮ ﻟﻠﻌﻤﯿﻞ وﯾﺮﺳﻠﮫ ﻟﻨﺎ‬

‫اﻟﺮﻗﻢ اﻟﺜﺎﻟﺚ رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﻣﺸﺘﻖ ﻣﻦ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻷوﻟﻰ وھﻮ ﺳﯿﻜﻮن ﻣﺨﻔﻲ ﻟﻠﻌﻤﯿﻞ وھﺬا اﻟﺮﻗﻢ ﺳﯿﻜﻮن ﻟﺪﯾﻨﺎ‬
‫أﯾﻀﺎ ﺑﺎﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ﺗﺤﻮﯾﻞ اﻟﺘﺴﺠﯿﻞ إﻟﻰ اﺳﻜﻲ أي ﻗﯿﻢ رﻗﻤﯿﺔ ﻹرﺳﺎﻟﮫ إﻟﻰ اﻟﻌﻤﯿﻞ وﻋﻨﺪﻣﺎ ﯾﺪﺧﻠﮫ ﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻨﮫ وﺑﯿﻦ رﻗﻢ‬
‫اﻟﺘﻔﻌﯿﻞ اﻟﻤﺨﻔﻲ ﻋﻨﮫ إذا ﺗﺴﺎوى اﻟﺮﻗﻤﯿﻦ ﺗﺘﻢ اﻟﻌﻤﻠﯿﺔ و إﻻ ﻓﻼ‬

‫وھﺬا اﻟﺸﻜﻞ ﯾﻮﺿﻊ اﻟﻌﻤﻠﯿﺔ‪:‬‬

‫ﻓﺎﻟﻤﺮﺑﻌﺎت ذات اﻟﻠﻮن اﻷﺳﻮد ﻟﻦ ﺗﻈﮭﺮ ﻟﻠﻌﻤﯿﻞ و إﻧﻤﺎ ﺳﯿﻈﮭﺮ ﻓﻘﻂ رﻗﻢ اﻟﺘﺴﺠﯿﻞ اﻟﺬي ﺳﯿﺮﺳﻠﮫ ﻟﻨﺎ أي اﻟﻤﺮﺑﻊ اﻷﺑﯿﺾ اﻷول‬
‫وﻣﺮﺑﻊ ﯾﻄﻠﺐ ﻣﻨﮫ إدﺧﺎل رﻗﻢ اﻟﺘﻔﻌﯿﻞ اﻟﻤﺮﺳﻞ ﻟﮫ ﻣﻦ ﻗﺒﻠﻨﺎ وھﻮ اﻟﻤﺮﺑﻊ اﻷﺧﯿﺮ‬

‫وﺑﻌﺪ إدﺧﺎل اﻟﺮﻗﻢ ﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ ﻓﻲ اﻟﻤﺮﺑﻌﯿﻦ اﻷﺧﯿﺮﯾﻦ ﻓﻲ ﺣﺎل اﻟﺘﺴﺎوي ﺗﺘﻢ اﻟﻌﻤﻠﯿﺔ وإﻻ ﻓﻼ‬

‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫ﺑﺎﻟﻨﺴﺒﺔ ﻟﻄﺮﯾﻘﺔ اﻟﺘﺸﻔﯿﺮ ﻓﻜﻤﺎ ﺗﻼﺣﻈﻮن ﺣﺎوﻟﻨﺎ اﺳﺘﺨﺪام داﻟﺔ اﻟﺘﺤﻮﯾﻞ ﻟﻘﯿﻢ اﻻﺳﻜﻲ ﻟﻠﻤﻔﺎﺗﯿﺢ وﯾﻤﻜﻨﻜﻢ اﻋﺘﻤﺎد أي ﻃﺮﯾﻘﺔ ﻟﺘﺸﻔﯿﺮ‬
‫اﻟﺮﻗﻢ ﺣﯿﺚ ھﻨﺎك ﻃﺮق ﻻ ﺣﺼﺮ ﻟﮭﺎ ﯾﻤﻜﻨﻨﺎ إﺟﺮاء ﻏﺮﺑﻠﺔ ﻟﻠﺮﻗﻢ أو اﻻﻗﺘﺼﺎص ﻣﻨﮫ أو اﻟﺰﯾﺎدة ﻋﻠﯿﮫ أو ﺗﻌﺪﯾﻠﮫ ﺑﺈﺿﺎﻓﺔ واﺣﺪ أو‬
‫أﻛﺜﺮ أو ﺗﺸﻮﯾﺶ اﻟﺴﻠﺴﺔ ﻛﻠﮭﺎ أو أﺧﺬ ﻣﻮاﺿﻊ ﻣﺤﺪدة ﻣﻦ اﻟﺴﻠﺴﺔ أو‪..............‬اﻟﺦ‬

‫‪...‬‬

‫اﻷن ﻃﺮﯾﻘﺔ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ رﻗﻢ اﻟﺘﻔﻌﯿﻞ اﻟﻤﺨﻔﻲ و اﻟﺮﻗﻢ اﻟﺬي أدﺧﻠﮫ اﻟﻌﻤﯿﻞ‬

‫ﻃﺒﻌﺎ وﺟﻮد اﻟﻤﻘﺎرﻧﺔ ﺑﺤﺴﺐ ﻣﻌﻠﻮﻣﺎت اﻟﻤﮭﻨﺪس اﻟﻌﻜﺴﻲ ﯾﺴﮭﻞ ﺗﺠﺎوز اﻟﺒﺮﻧﺎﻣﺞ وﻛﺴﺮه‬

‫اﻟﻄﺮﯾﻘﺔ اﻟﻤﺤﻠﯿﺔ ھﻲ اﻷﺗﻲ ‪:‬‬

‫أﺿﻒ زر أﻣﺮ وﺳﻤﮫ ‪ ButtonOk‬وﺻﻨﺪوق اﻟﻨﺺ اﻟﺮاﺑﻊ اﻟﺬي ﺳﯿﺪﺧﻞ اﻟﻌﻤﯿﻞ ﻓﯿﮫ اﻟﺮﻗﻢ ﺳﻤﮫ ‪TextBoxUser‬‬

‫و أﺿﻒ ﻛﻮد اﻟﺰر ‪ ButtonOk‬اﻟﺘﺎﻟﻲ‪:‬‬

‫‪Private Sub ButtonOk_Click(ByVal sender As System.Object,‬‬


‫‪ByVal e As System.EventArgs) Handles ButtonOk.Click‬‬
‫‪If TextBoxUser.Text = TextBoxAct.Text Then‬‬
‫ً اﻟﱪﻧﺎﻣﺞ ﺗﻔﻌﯿﻞ ﰎ"(‪MsgBox‬‬
‫)"ﻟﻚ ﺷﻜﺮا‬
‫‪Else‬‬
‫)"ﺧﺎﻃﺊ اﳌﺪﺧﻞ اﻟﺮﻗﻢ"(‪MsgBox‬‬
‫‪End If‬‬
‫‪End Sub‬‬

‫اﻵن ﺟﺮب ﻟﺘﺮى اﻟﻨﺘﯿﺠﺔ ‪:‬‬

‫ﻧﺤﻦ اﻋﺘﻤﺪﻧﺎ إﻇﮭﺎر رﺳﺎﻟﺔ ﻟﻠﻌﻤﯿﻞ ﺗﻔﯿﺪ ﺑﺄن اﻟﺮﻗﻢ ﺻﺢ أو ﺧﻄﺎ أﻣﺎ ﺑﺎﻟﺸﻜﻞ اﻟﻌﻤﻠﻲ ﻓﺎﻷﻣﺮ ﺳﯿﻜﻮن ﺑﺘﻔﻌﯿﻞ ﻓﺘﺢ ﻧﻮاﻓﺬ واﺳﺘﺨﺪام‬
‫إﻣﻜﺎﻧﯿﺎت ﻛﺎﻟﻄﺒﺎﻋﺔ ﻣﺜﻼ أو ﻓﺘﺢ اﻟﺒﺮﻧﺎﻣﺞ إذا ﻛﺎن اﻟﺘﻔﻌﯿﻞ ﯾﻈﮭﺮ ﻋﻨﺪ إﻗﻼع اﻟﺒﺮﻧﺎﻣﺞ ﻣﺒﺎﺷﺮة ﻟﺬﻟﻚ ﻧﺤﻦ ﻧﺴﺘﻌﯿﺾ ﺑﻌﺒﺎرة‬
‫ً اﻟﱪﻧﺎﻣﺞ ﺗﻔﻌﯿﻞ ﰎ"(‪MsgBox‬‬
‫)"ﻟﻚ ﺷﻜﺮا‬

‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫ﺑﺎﻹﺟﺮاء اﻟﻤﻄﻠﻮب ﺗﻨﻔﯿﺬه ﻋﻨﺪ إدﺧﺎل اﻟﻘﯿﻤﺔ اﻟﺼﺤﯿﺤﺔ وإﻻ ﻟﻦ ﻧﻈﮭﺮ ﻟﮫ ﺷﻲء ﻻن اﻟﻤﮭﻨﺪس اﻟﻌﻜﺴﻲ ﯾﻨﺼﺤﻨﺎ ﺑﺬﻟﻚ‬

‫‪If TextBoxUser.Text = TextBoxAct.Text Then‬‬


‫ً اﻟﱪﻧﺎﻣﺞ ﺗﻔﻌﯿﻞ ﰎ"(‪MsgBox‬‬ ‫)"ﻟﻚ ﺷﻜﺮا‬
‫‪End If‬‬
‫وﻣﻦ ﻧﺼﺎﺋﺤﮫ ﻟﻨﺎ ھﻲ أن ﻻ ﻧﺴﺘﺨﺪم ‪ MsgBox‬وﻧﺤﻦ أﯾﻀﺎً ﺳﻨﻠﺘﺰم ﺑﺄواﻣﺮه ﻓﻜﻤﺎ ذﻛﺮت ﺳﺎﺑﻘﺎ اﻟﺮﺳﺎﻟﺔ ﻹﯾﻀﺎح ﻧﺠﺎح اﻟﻌﻤﻠﯿﺔ‬
‫أﻣﺎ اﻷﺻﻞ ﻓﮭﻮ اﺳﺘﺨﺪام اﻹﺟﺮاء اﻟﻤﻨﺎﺳﺐ ﻛﻔﺘﺢ اﻟﺒﺮﻧﺎﻣﺞ أو ﺗﻔﻌﯿﻞ اﻟﻤﯿﺰات اﻟﻤﺤﺠﻮﺑﺔ‬

‫رﺑﻤﺎ ﯾﺴﺄل اﻟﺒﻌﺾ ﻣﺎ دﺧﻞ اﻟﻤﮭﻨﺪس اﻟﻌﻜﺴﻲ ﻓﻲ اﻟﻤﻮﺿﻊ أﻗﻮل أﻧﮫ رﺑﻤﺎ ﯾﻔﻜﺮ ﻓﻲ اﻟﻜﺴﺮ ﻟﺬﻟﻚ ﻧﺤﻦ ﻧﺮﯾﺪه أن ﯾﻜﺴﺐ اﻟﺠﺎﺋﺰة‬
‫ﺑﻌﺮق ﺟﺒﯿﻨﮫ وﻟﯿﺲ ﺑﺴﮭﻮﻟﺔ ﻟﺬﻟﻚ ﺳﻨﺠﻌﻞ ﻋﻤﻠﯿﺎﺗﻨﺎ ﻣﺨﻔﯿﺔ ﻋﻠﯿﮫ ﺑﻌﺾ اﻟﺸﻲء ﻟﻨﻜﺴﺒﮫ ﺑﻌﺾ اﻟﺨﺒﺮة وﯾﻜﻮن اﻟﻜﺴﺮ ﺗﻢ ﺑﺘﻌﺒﮫ‬
‫وﻋﺮق ﺟﺒﯿﻨﮫ و إﻻ ﻓﻨﺤﻦ ﻧﺘﺤﺮى اﻟﺨﯿﺮ ﻓﻲ اﻟﻨﺎس وﻓﻲ ﻋﻤﻼﺋﻨﺎ أﻧﮭﻢ ﻻ ﯾﺤﺎوﻟﻮا ﻛﺴﺮ ﺑﺮاﻣﺠﻨﺎ وﯾﺘﺮﻛﻮﻧﺎ ﻧﺘﺴﺒﺐ‪.‬‬

‫ﻧﺘﺎﺑﻊ ﻣﻊ ﺑﻌﺾ اﻟﻨﺼﺎﺋﺢ ‪ :‬ﻻ ﺗﺠﻌﻞ ﻣﻜﺎن اﻟﺘﻔﻌﯿﻞ ھﻮ ﻧﻔﺴﮫ ﻣﻜﺎن اﻟﻤﻘﺎرﻧﺔ وإﻋﻄﺎء اﻟﺼﻼﺣﯿﺎت‬

‫ﻣﺎ اﻟﻤﻘﺼﻮد ﺑﺬﻟﻚ ؟‬

‫اﻟﻤﻘﺼﻮد أﺣﺒﺘﻲ ‪ :‬أﻧﻨﺎ ﻋﻨﺪ ﺗﻔﻌﯿﻞ ﺑﺮﻧﺎﻣﺠﻨﺎ ﺑﺸﻜﻠﮫ اﻟﺼﺤﯿﺢ ﻓﺄﻧﮫ ﻻ ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺮﻗﻢ اﻟﺨﺎﻃﺊ و ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺮﻗﻢ ﻷﻧﮫ ﺻﺤﯿﺢ‬
‫ﻓﻘﻂ أﻣﺎ ﺗﻔﻌﯿﻞ اﻟﻤﯿﺰات ﻓﺘﺤﺘﺎج ﻟﻤﻘﺎرﻧﺔ أﺧﺮى ﻓﻲ ﻓﻮرم أﺧﺮ ﺑﻌﯿﺪا ﻋﻦ ﻣﻜﺎن اﻟﺘﻔﻌﯿﻞ ﺑﺸﺮح ﺑﺴﯿﻂ ﻟﻮ أدﺧﻞ اﻟﻤﺴﺘﺨﺪم رﻗﻢ‬
‫اﻟﺘﻔﻌﯿﻞ اﻟﺼﺤﯿﺢ ﺳﺘﻈﮭﺮ رﺳﺎﻟﺔ ﺗﻔﯿﺪ ﺑﺬﻟﻚ وﺑﻨﻔﺲ اﻟﻮﻗﺖ ﻧﺨﺰن اﻟﺮﻗﻢ اﻟﺼﺤﯿﺢ ﻓﻲ ﻣﻜﺎن ﻣﻌﯿﻦ )اﻟﺒﺮﻧﺎﻣﺞ‪ -‬اﻟﺮﯾﺠﺴﺘﺮي‪-‬ﻣﻠﻒ (‬
‫وﻋﻨﺪ إﻗﻼع اﻟﺒﺮﻧﺎﻣﺞ ﯾﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﻣﺮة أﺧﺮى ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ ﻻن اﻟﺒﺮﻧﺎﻣﺞ رﺑﻤﺎ ﯾﺘﻢ ﺗﺠﺎوزه ﻣﻦ ﺧﻼل اﻟﮭﻨﺪﺳﺔ اﻟﻌﻜﺴﯿﺔ وﯾﺘﻢ‬
‫ﺗﺪﻣﯿﺮ ﻗﺴﻢ اﻟﻤﻘﺎرﻧﺔ ﻟﺬﻟﻚ اﻟﻤﻘﺎرﻧﺔ اﻷﺳﺎﺳﯿﺔ ﺗﺘﻢ ﻓﻲ ﻣﻜﺎن أﺧﺮ وواﺟﮭﺔ اﻟﺘﻔﻌﯿﻞ ھﻲ ﻓﻘﻂ ﻟﺘﺨﺰﯾﻦ اﻟﺮﻗﻢ اﻟﺼﺤﯿﺢ وﻋﻨﺪ إﻗﻼع‬
‫اﻟﺒﺮﻧﺎﻣﺞ ﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ رﻗﻢ اﻟﺘﻔﻌﯿﻞ واﻟﺮﻗﻢ اﻟﻤﺨﺰن ﻣﻦ ﺟﺪﯾﺪ ﺻﺢ ﯾﻔﻌﻞ اﻟﻤﯿﺰات وإﻻ ﻓﻼ وھﻜﺬا ﻧﻘﻮم ﺑﺤﺸﻮ ﺑﺮﻧﺎﻣﺠﻨﺎ‬
‫ﺑﻌﺸﺮة ﻣﻘﺎرﻧﺎت وﻧﻀﻊ ﻋﺸﺮة ﻣﻘﺎرﻧﺎت أﺧﺮى اﺣﺘﯿﺎط ﻣﺜﻞ ﺑﻌﺪ اﻟﺘﺸﻐﯿﻞ اﻟﺨﺎﻣﺲ ﻟﻠﺒﺮﻧﺎﻣﺞ ﻓﻲ اﻟﯿﻮم اﻷول ﻣﻦ ﻛﻞ ﺷﮭﺮ وﺑﻌﺪ‬
‫ﺷﮭﺮﯾﻦ ﺑﺬﻟﻚ ﻧﻀﻤﻦ أن ﻗﻔﺰات اﻟﺠﻤﻞ اﻟﺸﺮﻃﯿﺔ ﻣﮭﻤﺎ ﺣﻄﻢ ﻣﻨﮭﺎ ﯾﺒﻘﻰ ﺷﻲء ﻣﻔﻌﻮﻟﮫ ﻣﻮﺟﻮد‬

‫اﻟﮭﺪف ‪ :‬ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ اﻟﺘﻤﻮﯾﮭﯿﺔ ﻧﺠﻌﻞ أﻣﺮ ﺗﺠﺎوز اﻟﻤﻘﺎرﻧﺎت ﺻﻌﺐ ﺑﺎﻟﺘﺎﻟﻲ ﻟﻦ ﯾﻜﺴﺮ وﻃﺒﻌﺎ ھﻨﺎ ﻟﻦ ﻧﺴﺒﯿﺔ ﺑﻄﺮﯾﻘﺔ اﻟﻘﻔﺰ‬
‫وﺗﺪﻣﯿﺮ اﻟﻤﻘﺎرﻧﺎت ﻣﺎذا ﻟﻮ ﻓﻜﺮ ﺑﺘﺪﻣﯿﺮ ﺟﻤﯿﻊ اﻟﻤﻘﺎرﻧﺎت ﻓﺎﻷﻣﺮ ﺻﻌﺐ ﻻن ﺑﺮﻧﺎﻣﺠﻚ رﺑﻤﺎ ﯾﺤﻮي ﻣﻘﺎرﻧﺎت ﻋﺎدﯾﺔ ﻛﺎﻟﺒﺤﺚ‬
‫وﻏﯿﺮه ﺑﺎﻟﺘﺎﻟﻲ ﻟﻦ ﯾﻌﻤﻞ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺸﻜﻞ ﺻﺤﯿﺢ ﻓﻠﯿﺲ أﻣﺎﻣﮫ ﻓﻲ ﻃﺮﯾﻘﺔ اﻟﻘﻔﺰ إﻻ اﻟﻌﻤﻞ ﻋﻠﻰ اﻟﺒﺮﻧﺎﻣﺞ ﻟﻤﺪة ﺳﻨﺔ ﻛﺎﻣﻠﺔ وﺑﻌﺪﯾﻦ‬
‫ﯾﻌﻄﯿﻨﺎ ﻧﺴﺨﺔ ﻣﻜﺴﻮرة ﺗﻌﻤﻞ ﺑﻄﻼﻗﺔ ‪.‬‬

‫اﻟﻄﺮﻗﺔ اﻟﺜﺎﻧﯿﺔ ﻟﻠﻤﮭﻨﺪس اﻟﻌﻜﺴﻲ ‪ :‬ھﻲ اﺳﺘﻨﺘﺎج اﻟﺮﻗﻢ ﻃﺒﻌﺎ ﺳﯿﻜﻮن ھﺬا اﻷﻣﺮ ﻣﺠﺪي ﻟﮫ أﻛﺜﺮ ﺑﺨﻼف اﻟﻌﺎدة ﻓﺒﻤﺠﺮد اﻟﻮﺻﻮل‬
‫ﻷول ﻣﻘﺎرﻧﺔ ﺑﯿﻦ رﻗﻢ اﻟﺘﻔﻌﯿﻞ و اﻟﺮﻗﻢ اﻟﻤﺪﺧﻞ ﺳﯿﻜﺸﻔﮫ إذا ﻛﺎن ذﻛﻲ ﻗﻠﯿﻼ ﺣﺴﺐ ﻣﻌﻠﻮﻣﺎﺗﻲ اﻟﻤﺘﻮاﺿﻌﺔ ﻋﻦ ھﺬه اﻷﻣﻮر‪.‬‬

‫ﻟﻜﻦ ھﺬه اﻟﻄﺮﯾﻘﺔ ﺗﻔﺘﺢ أﻣﺎﻣﮫ ﻣﺠﺎﻟﯿﻦ ‪:‬‬

‫اﻷول ‪ :‬أﻧﮫ ﺳﯿﻜﺸﻒ اﻟﺮﻗﻢ ﻟﻠﺠﮭﺎز اﻟﺬي ﯾﺤﺎول اﻟﻜﺴﺮ ﻋﻠﯿﮫ ﺑﺎﻟﺘﺎﻟﻲ ﯾﺠﺐ ﻋﻠﯿﮫ اﻟﺬھﺎب ﻟﻜﻞ ﺟﮭﺎز واﻟﻜﺴﺮ ﻋﻠﯿﮫ ﺑﮭﺬه اﻟﺤﺎﻟﺔ‬
‫ﻧﻀﻤﻦ أن اﻟﻨﺴﺦ اﻟﻤﻜﺴﻮرة ﺳﺘﻜﻮن أﻗﻞ ﻣﺎ ﯾﻤﻜﻦ ﻷﻧﮫ ﻣﺶ ﻣﻌﻘﻮل ﯾﺤﻤﻞ اﻟﻌﺪة وﯾﺠﻮب ﻋﻠﻰ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﯾﺎھﻮ ﻛﺴﺮ ﺑﺮﻧﺎﻣﺞ‬
‫ﻓﻼن ‪.‬‬

‫اﻟﺜﺎﻧﻲ ‪ :‬ھﻮ اﻟﺨﻄﯿﺮ ﻟﻮ اﺳﺘﻄﺎع ﻛﺸﻒ اﻟﻤﻌﺎدﻟﺔ ﺑﺎﻟﺘﺎﻟﻲ ﯾﺴﺘﻄﯿﻊ ﻋﻤﻞ ﻣﻮﻟﺪ أرﻗﺎم ﻣﺜﻞ اﻟﺬي ﻟﺪﯾﻨﺎ وھﺬا ﺳﻨﺤﺎول ﺗﺠﻨﺒﮫ ﺑﺘﻌﻘﯿﺪ‬
‫اﻟﻤﻌﺎدﻟﺔ اﻟﻤﺨﺼﺼﺔ ﻻﺳﺘﺨﺮاج رﻗﻢ اﻟﻤﻌﺎﻟﺞ وﺗﺸﻔﯿﺮه ﺑﺤﯿﺚ ﻻ ﯾﺴﺘﻄﯿﻊ ﻓﻚ ﻋﻤﻠﯿﺎت اﻟﺘﺸﻔﯿﺮ ﻋﻠﻰ اﻟﺮﻗﻢ‪.‬‬

‫أﺗﻮﻗﻊ ﻛﺎﻓﻲ ﻧﻈﺮي ﺣﻮل ﺗﺠﻨﺐ اﻟﻜﺴﺮ و ﻻ أﻗﻮل ﻻ أو اﻧﮫ ﺻﻌﺐ اﻟﻜﺴﺮ ﻓﺎﻟﺴﻮق أﻛﺒﺮ دﻟﯿﻞ ﻟﻜﻦ ﻛﺎن ﺳﻌﯿﻲ ﻟﺘﻮﻟﯿﺪ ﻓﻜﺮة ﺣﻮل‬
‫اﻷﻣﺮ ﻟﻠﺠﻤﯿﻊ ﺣﺘﻰ ﯾﻨﺎﻗﺸﻮه ﻓﻲ ﺑﺮاﻣﺠﮭﻢ وﯾﺴﺘﺨﺪﻣﻮه ﺑﺎﻟﺸﻜﻞ اﻷﻣﺜﻞ اﻟﺬي ﯾﻨﺎﺳﺒﮭﻢ‪.‬‬
‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬
‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬

‫ﻧﻌﻮد ﻟﻜﻮدﻧﺎ ﻓﻲ اﻟﺰر ﻃﺒﻌﺎ اﻟﺪاﻟﺔ ﯾﻤﻜﻨﻚ أن ﺗﺮﻣﯿﮭﺎ ﻓﻲ ﻣﻮدﯾﻮل وﺗﺨﻠﺺ ﻣﻦ رؤﯾﺘﮭﺎ أﻣﺎﻣﻚ ﻷﻧﮭﺎ ﺟﺎھﺰة وﻟﻦ ﻧﻌﺪل ﻋﻠﯿﮭﺎ وإﻧﻤﺎ‬
. ‫ﺳﻨﺴﺘﺪﻋﯿﮭﺎ ﻓﻘﻂ ﻟﺬﻟﻚ أول ﺷﻲء ﻗﻢ ﺑﻘﺺ اﻟﺪاﻟﺔ و اﻟﺼﻘﮭﺎ ﻓﻲ اﻟﻤﻮدﯾﻞ‬

GetIdButton_Click ‫اﻵن ﺳﻨﺠﻌﻞ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﯾﻈﮭﺮ ﺑﻤﺠﺮد ﻓﺘﺢ اﻟﻔﻮرم ﻃﺒﻌﺎ ﻓﻘﻂ ﻧﻨﻘﻞ اﻟﻜﻮد ﻣﻦ ﺣﺪث ﺿﻐﻂ اﻟﺰر‬
‫ وﻟﺴﻨﺎ ﺑﺤﺎﺟﺔ ﻷﻛﺜﺮ ﻣﻦ ﺻﻨﺪوﻗﯿﻦ ﻧﺺ واﺣﺪ ﺗﺴﺠﯿﻞ واﻷﺧﺮ ﺗﻔﻌﯿﻞ واﻟﻘﯿﻢ اﻟﻮﺳﻄﻰ‬Form1_Load ‫إﻟﻰ ﺗﺤﻤﯿﻞ اﻟﻔﻮرم‬
: ‫ ﻓﯿﺼﺒﺢ اﻟﻜﻮد ﻛﺎﻷﺗﻲ‬idp2 idp1 idp ‫ﻧﺨﺰﻧﮭﺎ ﺿﻤﻦ ﻣﺘﻐﯿﺮات‬

Imports System.Management

Public Class Form1


Dim idp As String ' ‫اﳌﻌﺎﰿ رﻗﻢ‬
Dim idp1 As String ' ‫اﻟﺘﺴﺠﯿﻞ رﻗﻢ‬
Dim idp2 As String ' ‫اﻟﺘﻔﻌﯿﻞ رﻗﻢ‬

Private Sub Form1_Load(ByVal sender As System.Object, ByVal


e As System.EventArgs) Handles MyBase.Load
Dim Searcher As ManagementObjectSearcher
Searcher = New ManagementObjectSearcher("Select
ProcessorId From Win32_Processor" )
For Each Device As ManagementObject In Searcher.Get
For Each Prop As PropertyData In Device.Properties
idp = (Prop.Value.ToString)
Next
Next
idp1 = Str2Int(idp)
idp2 = Str2Int(idp1)
TextBoxReg.Text = idp1
End Sub
Private Sub ButtonOk_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles ButtonOk.Click
If TextBoxUser.Text = idp2 Then
MsgBox("‫ً اﻟﱪﻧﺎﻣﺞ ﺗﻔﻌﯿﻞ ﰎ‬ ‫)"ﻟﻚ ﺷﻜﺮا‬
End If
End Sub
End Class
‫ ﻹدﺧﺎل رﻗﻢ‬TextBoxUser ‫ ﯾﻈﮭﺮ ﻓﯿﮫ رﻗﻢ اﻟﺘﺴﺠﯿﻞ و‬TextBoxReg ‫ﻻﺣﻆ أﻧﻨﺎ اﻵن ﺑﺤﺎﺟﺔ ﻟﺼﻨﺪوﻗﻲ ﻧﺺ ھﻤﺎ‬
‫اﻟﺘﻔﻌﯿﻞ ﻣﻦ ﻗﺒﻞ اﻟﻌﻤﯿﻞ أﻣﺎ اﻟﺒﻘﯿﺔ واﻟﺰر ﻻ ﺗﻠﺰم ﻻن اﻟﻘﯿﻢ ﺻﺎرت ﺿﻤﻦ ﻣﺘﻐﯿﺮات وﻻ ﻧﻨﺴﻰ اﻟﺪاﻟﺔ أﻟﺼﻘﻨﺎھﺎ ﺑﺎﻟﻤﻮدﯾﻮل ﻣﻦ ﻗﺒﻞ‬
: ‫ﻓﺸﻜﻞ ﻧﺎﻓﺬة اﻟﺘﻔﻌﯿﻞ اﻵن ھﻮ اﻷﺗﻲ‬

www.vb4arab.com nabhan170@hotmail.com ‫ ﻧﻮر ﻧﺒﮭﺎن‬:‫ﺑﻘﻠﻢ‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬

‫ﻟﻮ اﻧﺘﺒﮭﺖ ﻟﻠﻜﻮد ﻓﺠﻤﻠﺔ ‪ If‬ﺗﻨﺎﻗﺶ اﻟﺤﺎﻟﺔ اﻟﺼﺤﯿﺤﺔ وإذا ﺧﻄﺄ ﻟﻦ ﻧﻘﻮم ﺑﺄي ﻋﻤﻞ ﻷﻧﻨﺎ ﺑﺤﺎﻟﺔ ﺗﻮﻟﯿﺪ ﻣﺴﺞ ﺑﻮﻛﺲ أﻧﮫ ﺧﻄﺄ ﻧﺴﮭﻞ‬
‫اﻟﻌﻤﻠﯿﺔ ﺑﺤﺴﺐ اﻟﻨﺼﺎﺋﺢ اﻟﺴﺎﺑﻘﺔ وﻛﻤﺎ ذﻛﺮت أﻧﻔﺎ اﻟﻤﺴﺞ ﺑﻮﻛﺲ ﯾﺠﺐ اﻻﺳﺘﻐﻨﺎء ﻋﻨﮫ ﻷﻧﮫ أوﻻ ﻧﻘﻄﺔ ﺿﻌﻒ وﺛﺎﻧﯿﺎ ﻟﻦ ﯾﻔﯿﺪﻧﺎ‬
‫ﺗﺨﯿﻞ اﻧﮫ اﻟﻤﺴﺘﺨﺪم ﻓﻌﻞ اﻟﺒﺮﻧﺎﻣﺞ ﺧﻼص أﻏﻠﻖ اﻟﺒﺮﻧﺎﻣﺞ وھﻮ ﯾﺸﻐﻠﮫ وﯾﺮاه ﻣﻔﻌﻞ أو أﻏﻠﻖ ﻓﻮرم اﻟﺘﻔﻌﯿﻞ و ﺧﺰن اﻟﺮﻗﻢ أو‬
‫ﺣﺘﻰ ﺧﺰن اﻟﺮﻗﻢ وﺑﺲ‪ .‬وﻣﺎ ﻓﻲ ﺿﺮورة ﻧﻠﻘﻤﮫ إﯾﺎھﺎ ﺑﺎﻟﻤﻠﻌﻘﺔ ﺑﯿﺐ ﻣﺴﺞ ﺑﻮﻛﺲ ﺑﯿﺐ ﺗﻢ اﻟﺘﻔﻌﯿﻞ ﯾﺎ ﻋﻤﯿﻞ ﺧﻠﺺ أﻏﻠﻖ ﻓﻮرﻣﮫ‬
‫اﻟﺘﻔﻌﯿﻞ ورح ﻣﻦ ھﻨﺎ ﺑﯿﺐ ﺷﻜﺮا ﻟﻚ ھﯿﮫ ﺻﺎر ﻋﻨﺪك ﻧﺴﺨﺔ ﻛﺎﻣﻠﺔ ھﺬا اﻟﺤﺸﻮ ﻣﺶ ﻣﮭﻢ ‪.‬‬

‫ﻃﯿﺐ اﻵن رﺑﻤﺎ ﯾﺴﺄل اﻟﺴﺎﺋﻞ رﺑﻤﺎ ﯾﺴﺘﻨﺘﺞ اﻟﻌﻤﯿﻞ أو ﺣﺒﯿﺒﻨﺎ اﻟﻌﻜﺴﻲ أن اﻟﺮﻗﻢ اﻟﻤﺴﺘﺨﺮج ھﻮ رﻗﻢ اﻟﻤﻌﺎﻟﺞ وﺑﻨﻈﺮة ﺑﺴﯿﻄﺔ‬
‫ﺑﺎﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ رﻗﻤﻲ اﻟﺘﺴﺠﯿﻞ و رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﺳﯿﻨﺘﺒﮫ أن اﻟﺜﺎﻧﻲ ﻣﺸﺘﻖ ﻣﻦ اﻷول ﺑﺎﻟﺘﺤﻮﯾﻞ اﻟﺮﻗﻤﻲ ﻛﯿﻒ ﻟﺘﺸﺎﺑﮫ أرﻗﺎم ﻓﻲ اﻟﻤﻌﺎﻟﺞ‬
‫ﻣﻊ اﻟﻤﻘﺎﺑﻞ اﻟﺮﻗﻤﻲ ﻓﻲ ﺣﺎل اﻟﺘﻜﺮار ﻣﺜﻼ ﻟﺪي ﯾﻈﮭﺮ‬

‫رﻗﻢ اﻟﻤﻌﺎﻟﺞ‪:‬‬

‫‪0383F9FF000006B1‬‬

‫رﻗﻢ اﻟﺘﺴﺠﯿﻞ‪:‬‬

‫‪48515651705770704848484848546649‬‬

‫ﻓﺮﺑﻤﺎ ﯾﻔﮭﻢ اﻟﻌﻤﻠﯿﺔ ﻟﺬﻟﻚ ﺳﻨﺤﺎول ﺟﻌﻠﮫ ﻻ ﯾﻔﮭﻢ اﻟﻌﻤﻠﯿﺔ ﺑﺎﻟﻘﯿﺎم ﺑﺘﺸﻮﯾﺶ اﻟﺴﻠﺴﺔ اﻟﻨﺼﯿﺔ وﻣﻦ ﺛﻢ ﺗﺤﻮﯾﻠﮭﺎ إﻟﻰ رﻗﻢ وﺑﺬﻟﻚ ﺣﺘﻰ‬
‫اﻟﺮﻗﻤﯿﻦ اﻟﻤﺘﺸﺎﺑﮭﯿﻦ ﺳﯿﻜﻮن ﺑﺎﻟﺘﺸﻮﯾﺶ ﻟﺪﯾﮭﺎ ﻗﯿﻢ ﻣﺨﺘﻠﻔﺔ ‪:‬‬

‫ﻟﺬﻟﻚ أول ﺷﻲء اذھﺐ ﻟﻠﻤﻮدﯾﻮل و اﻟﺼﻖ اﻟﺪاﻟﺔ اﻟﺘﺎﻟﯿﺔ أﺳﻔﻞ اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ ﺻﺎﺣﺒﺔ اﻻﺳﻜﻲ ﻟﯿﺼﺒﺢ اﻟﻤﻮدﯾﻮل ﻛﺎﻣﻼ ﻛﺎﻷﺗﻲ‪:‬‬

‫‪Module Module1‬‬
‫اﻻﺳﻜﻲ اﱃ اﻟﺘﺤﻮﯾﻞ '‬
‫‪Function Str2Int(ByVal InStrng As Object) As String‬‬
‫‪Dim StrLn As Integer‬‬
‫‪Dim Cntr As Integer‬‬
‫‪Dim NewStr As String‬‬

‫"" = ‪Str2Int‬‬
‫)‪StrLn = Len(InStrng‬‬
‫‪If StrLn = 0 Then Exit Function‬‬
‫"" = ‪NewStr‬‬
‫‪For Cntr = 1 To StrLn‬‬
‫)‪Select Case Mid(InStrng, Cntr, 1‬‬
‫"‪Case "0" To "z‬‬
‫))‪NewStr = NewStr & Asc(Mid(InStrng, Cntr, 1‬‬
‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬
‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫‪End Select‬‬
‫‪Next Cntr‬‬
‫‪Str2Int = NewStr‬‬
‫‪End Function‬‬

‫اﻟﺘﺸﻮﯾﺶ داﻟﺔ'‬
‫‪Public Function Obfuscate(ByVal origText As String) As‬‬
‫‪String‬‬
‫= )(‪Dim textBytes As Byte‬‬
‫)‪System.Text.Encoding.Unicode.GetBytes(origText‬‬
‫‪For counter As Integer = 0 To textBytes.Length - 1‬‬
‫)‪If (textBytes(counter) > 31) And (textBytes(counter‬‬
‫‪< 127) Then‬‬
‫)‪textBytes(counter) += CByte(counter Mod 31 + 1‬‬
‫‪If (textBytes(counter) > 126) Then‬‬
‫)‪textBytes(counter) -= CByte(95‬‬
‫‪End If‬‬
‫‪Next counter‬‬
‫)‪Return System.Text.Encoding.Unicode.GetChars(textBytes‬‬
‫‪End Function‬‬

‫‪End Module‬‬

‫ﻧﺸﻮش ﺑﺎﻟﺪاﻟﺔ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ‬


‫)‪Idp1 = Obfuscate(Idp‬‬

‫اﻵن رﻗﻢ اﻟﻤﻌﺎﻟﺞ ھﻮ‬

‫‪0383F9FF000006B1‬‬

‫ﺑﺎﻟﺘﺸﻮﯾﺶ ﺑﺪاﻟﺔ ‪ Obfuscate‬ﯾﺼﺒﺢ‬

‫‪16=:ODSUACEGIQ_P‬‬

‫اﻵن ﻧﺤﻮﻟﮫ إﻟﻰ اﻟﺮﻗﻤﻲ‬

‫‪49546158796883856567697173819580‬‬

‫ﻻﺣﻆ ﻣﻦ ﺟﺪﯾﺪ ھﺬا اﻟﺮﻗﻢ ﯾﺨﺘﻠﻒ ﻋﻦ اﻟﻘﯿﻤﺔ اﻟﺴﺎﺑﻘﺔ ﻷﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺘﺸﻮﯾﺶ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﻗﺒﻞ ﺗﺤﻮﯾﻠﮫ إﻟﻰ ﻗﯿﻢ اﻻﺳﻜﻲ ﻃﺒﻌﺎ أﻧﺖ‬
‫ﺗﺴﺘﻄﯿﻊ اﻟﺘﻔﻌﯿﻞ ﺑﺎﻟﻘﯿﻢ اﻟﺤﺮﻓﯿﺔ ﻟﻜﻦ اﻟﺮﻗﻤﯿﺔ ﺗﺒﻘﻰ أﺳﮭﻞ ﻟﻠﺘﻠﻘﯿﻦ ﻛﻤﺎ ذﻛﺮﻧﺎ أول اﻟﻤﻮﺿﻮع‬

‫ﺣﺎول اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ اﻟﻠﻮﻧﯿﻦ اﻷﺣﻤﺮﯾﻦ ﻓﻲ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ورﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻟﻦ ﺗﺴﺘﻨﺘﺞ ﺷﻲء ﻻن اﻟﺘﺸﻮﯾﺶ ﻗﻀﻰ ﻋﻠﻰ ھﺬا اﻷﻣﺮ‪.‬‬

‫ﺑﯿﻨﻤﺎ ﻛﺎن اﻷﻣﺮ ﺟﻠﻲ ﻗﺒﻞ اﻟﺘﺸﻮﯾﺶ‪.‬‬

‫ﻻﺣﻆ اﻟﻔﺮق اﻟﺴﺎﺑﻖ ﻓﻼ ﻋﻼﻗﺔ واﺿﺤﺔ أﺑﺪا ﺧﻤﺴﺔ أﺻﻔﺎر وﻛﻞ ﺷﻔﺮة ﻟﮭﺎ ﻣﻘﺎﺑﻞ ﻣﺨﺘﻠﻒ ھﻜﺬا ﯾﺼﺒﺢ اﻷﻣﺮ ﻣﺸﻔﺮ أﻛﺜﺮ‬

‫ﻋﺪ ﻟﻠﻨﻤﻮذج وﻋﺪل اﻟﻜﻮد ﻛﺎﻷﺗﻲ ‪:‬‬


‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬
‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
Imports System.Management

Public Class Form1


Dim Idp As String
Dim Idp1 As String
Dim idp2 As String

Private Sub FrmActiv_Load(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles MyBase.Load
'‫ﻟﻠﻤﻌﺎﰿ اﻟﺘﺴﻠﺴﻠﻲ اﻟﺮﻗﻢ‬
Dim Searcher As ManagementObjectSearcher
Searcher = New ManagementObjectSearcher("Select
ProcessorId From Win32_Processor" )
For Each Device As ManagementObject In Searcher.Get
For Each Prop As PropertyData In Device.Properties
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'‫اﻟﺮﻗﻢ اﺳﺘﺨﺮاج‬
Idp = (Prop.Value.ToString)
Next
Next
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'‫اﻟﺮﻗﻢ ﺗﺸﻮﯾﺶ‬
Idp = Obfuscate(Idp)
'‫اﺳﻜﻲ اﱃ ﲢﻮﯾﻠﻪ‬
Idp = Str2Int(Idp)
'‫اﻟﺘﺴﺠﯿﻞ رﻗﻢ‬
TextBoxReg.Text = Idp
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'‫اﻟﺮﻗﻢ ﺗﺸﻮﯾﺶ‬
Idp1 = Obfuscate(Idp)
'‫اﺳﻜﻲ اﱃ ﲢﻮﯾﻠﻪ‬
'‫اﻟﺘﻔﻌﯿﻞ رﻗﻢ‬
Idp1 = Str2Int(Idp1)
End Sub

Private Sub ButtonOk_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles ButtonOk.Click
'‫ﲨﺎﱄ ﻣﺘﻐﲑ‬
idp2 = Idp1
If TextBoxUser.Text = idp2 Then
MsgBox("‫ً اﻟﱪﻧﺎﻣﺞ ﺗﻔﻌﯿﻞ ﰎ‬
‫)"ﻟﻚ ﺷﻜﺮا‬
End If
End Sub
End Class

www.vb4arab.com nabhan170@hotmail.com ‫ ﻧﻮر ﻧﺒﮭﺎن‬:‫ﺑﻘﻠﻢ‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫اﺗﻀﺢ اﻷﻣﺮ أﻛﺜﺮ اﻵن ﻓﻨﺤﻦ ﻧﻘﻮم ﺑﺎﺳﺘﺨﺮاج رﻗﻢ اﻟﻤﻌﺎﻟﺞ وﺗﺸﻮﯾﺸﮫ وﺗﺤﻮﯾﻠﮫ إﻟﻰ أﺳﻜﻲ ﻓﯿﻨﺘﺞ رﻗﻢ اﻟﺘﺴﺠﯿﻞ وﻧﻄﺒﻌﮫ ﻟﻠﻤﺴﺘﺨﺪم‬
‫ﻓﻲ ﺻﻨﺪوق اﻟﻨﺺ وﻧﻄﺎﻟﺒﮫ ﺑﺎﻟﻤﻘﺎﺑﻞ اﻟﺬي ھﻮ ﻋﺒﺎرة ﻋﻦ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻣﺸﻮش وﻣﺤﻮل إﻟﻰ أﺳﻜﻲ ﻣﻦ ﺟﺪﯾﺪ‬

‫وﺑﻌﺪھﺎ اﻟﻤﻘﺎرﻧﺔ ﻓﻲ ﺣﺪث اﻟﺰر ﻟﻦ أﻛﺮر اﻟﻤﺴﺞ ﺑﻮﻛﺲ ﺑﺲ ﻟﻠﺘﻮﺿﯿﺢ ﺣﻮل اﻟﻤﻘﺎرﻧﺔ وﻟﯿﺲ ﻟﻼﺳﺘﺨﺪام‪.‬‬

‫اﻵن رﺑﻤﺎ ﺗﺘﻤﻠﻤﻞ ﻣﻦ أن رﻗﻢ اﻟﻤﻌﺎﻟﺞ ‪ ١٦‬رﻗﻢ ﯾﻨﺘﺞ ﻋﻨﮭﺎ رﻗﻢ ﺗﺴﺠﯿﻞ ‪ ٣٢‬رﻗﻢ ورﻗﻢ اﻟﺘﻔﻌﯿﻞ ﺳﯿﻜﻮن ﺑﺎﻟﺘﺎﻟﻲ ‪ ٦٤‬رﻗﻢ ﻓﮭﺬا ﻛﺜﯿﺮ‬
‫ﻣﻊ أﻧﻨﻲ أﻓﻀﻞ ﻃﻮل اﻟﺮﻗﻢ ﻟﻜﻨﻨﺎ ﺳﻨﻜﺘﻔﻲ ﺑﻄﻮل رﻗﻢ اﻟﺘﺴﺠﯿﻞ ‪ ٣٢‬رﻗﻢ وﻧﻘﻮم ﺑﺘﺼﻐﯿﺮ رﻗﻢ اﻟﺘﻔﻌﯿﻞ إﻟﻰ ‪ ١٤‬رﻗﻢ ﻣﺜﻼ وذﻟﻚ‬
‫ﺑﻌﻤﻠﯿﺔ اﻗﺘﺼﺎص ﻣﻦ رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﻛﺎﻵﺗﻲ وذﻟﻚ ﺑﺈﺿﺎﻓﺔ اﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ ﻓﻲ أﺧﺮ اﻟﻔﻮرم ﻟﻮود )اﻗﺘﺼﺎص ﺳﻠﺴﺔ ﻧﺼﯿﺔ(‬

‫رﻗﻢ ‪ 14‬اﻗﺘﺼﺎص'‬
‫))‪Idp1 = (Idp1.Substring(0, 14‬‬

‫ﻃﺒﻌﺎ ﻟﻚ اﻟﺤﺮﯾﺔ ﻓﻲ اﺧﺘﯿﺎر ﻃﻮل اﻟﺮﻗﻢ ﺑﺘﻐﯿﺮ اﻟﺮﻗﻢ ‪ ١٤‬إﻟﻰ أي رﻗﻢ آﺧﺮ ﻟﻜﻦ ﻃﻮل اﻟﺮﻗﻢ ﯾﺼﻌﺐ ﻋﻤﻠﯿﺔ اﻻﺷﺘﻘﺎق أﺻﻼ‪.‬‬

‫ﻛﺬﻟﻚ ﯾﻤﻜﻨﻚ اﺧﺘﯿﺎر ﻧﻘﻄﺔ اﻟﺒﺪء ﻣﻦ أي ﻣﺤﺮف ‪٠‬‬

‫اﻵن ﯾﺴﺄل اﻟﺴﺎﺋﻞ إذا ﻗﺎم اﻟﻌﻤﯿﻞ ﺑﺎﻟﺘﻔﻌﯿﻞ ﻓﮭﻞ ﺳﺄﻗﻮل ﻟﮫ ﻣﺒﺮوك ﻓﻘﻂ أﻣﺎ ﻣﺎذا ﯾﺤﺪث‬

‫ﻧﺒﺪأ ﻣﻦ ﺟﺪﯾﺪ ‪:‬‬

‫ﻋﻨﺪ إدﺧﺎل اﻟﺮﻗﻢ اﻟﺼﺤﯿﺢ ﺳﻨﻘﻮم ﺑﺘﺨﺰﯾﻨﮫ وأﻛﺮر ﻟﻚ اﻟﺤﺮﯾﺔ ﻓﻲ اﺧﺘﯿﺎر ﻣﻮﺿﻊ اﻟﺘﺨﺰﯾﻦ وﻻ ﯾﮭﻢ ﻇﮭﻮر اﻟﺮﻗﻢ ﻷﻧﮫ ﺻﺤﯿﺢ‬
‫وﻧﺤﻦ ﻣﻦ زودﻧﺎه ﺑﮫ ﻟﺬﻟﻚ ﺳﺄﻟﺠﺄ إﻟﻰ ‪Settings‬‬

‫ﻧﺘﺠﮫ إﻟﻰ ‪ Solution Explorer‬وﻧﻀﻐﻂ ﻋﻠﻰ اﻟﻤﺸﺮوع ﺑﺎﻟﺰر اﻷﯾﻤﻦ وﻧﺨﺘﺎر ‪ Properties‬وﻧﺬھﺐ ﻟﺘﺒﻮﯾﺐ ‪Settings‬‬
‫وﻧﻀﯿﻒ إﻟﯿﮫ ﻣﺘﻐﯿﺮ ﺟﺪﯾﺪ ﺳﺄﺳﻤﯿﮫ ‪ nameuser‬وﻟﯿﺲ ‪ numact‬ﺷﻮﯾﺔ ﺗﻤﻮﯾﮫ ﯾﺒﺪو اﻟﺘﺠﻨﯿﺪ ﻣﺆﺛﺮ ﺑﻲ ﻛﺜﯿﺮ‪.‬‬

‫اﺳﻢ اﻟﻤﺘﻐﯿﺮ‬

‫‪Name = nameuser‬‬

‫ﻧﻮع اﻟﻤﺘﻐﯿﺮ‬

‫‪Type = String‬‬

‫ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ‬

‫= ‪Value‬‬

‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬

‫اﻵن ﺳﻨﺘﺠﮫ ﻟﻜﻮد اﻟﺰر وﻧﻐﯿﺮه إﻟﻰ‬


‫‪Private Sub ButtonOk_Click(ByVal sender As System.Object,‬‬
‫‪ByVal e As System.EventArgs) Handles ButtonOk.Click‬‬
‫ﲨﺎﱄ ﻣﺘﻐﲑ'‬
‫‪idp2 = Idp1‬‬
‫‪If TextBoxUser.Text = idp2 Then‬‬
‫‪My.Settings.nameuser = TextBoxUser.Text‬‬
‫)(‪My.Settings.Save‬‬
‫‪End‬‬
‫‪End If‬‬
‫‪End Sub‬‬

‫ﻻﺣﻆ اﻟﻜﻮد اﻟﺴﺎﺑﻖ ﻓﻲ ﺣﺎل اﻟﺘﺴﺎوي ﻓﺈﻧﮫ ﯾﺴﻨﺪ اﻟﺮﻗﻢ إﻟﻰ اﻹﻋﺪادات ﺛﻢ ﯾﺤﻔﻈﮭﺎ ﻓﻘﻀﯿﺔ اﻟﺘﻔﻌﯿﻞ ﻛﻠﮭﺎ ھﻨﺎ ھﻲ ھﻞ اﻟﺮﻗﻢ‬
‫ﻣﺘﺴﺎوي إذا ﻛﺎن اﻟﺠﻮاب ﻧﻌﻢ ﻓﻌﻨﺪھﺎ ﻻ ﯾﻔﻌﻞ اﻟﻤﯿﺰات ﺑﻞ ﯾﺤﻔﻆ اﻟﺮﻗﻢ ﻓﻘﻂ وﻋﻤﻠﯿﺔ اﻟﺘﻔﻌﯿﻞ ﻓﻲ أﻣﻜﻨﺔ أﺧﺮى ﺑﻌﯿﺪا ﻋﻦ‬
‫ﻣﺮﻛﺰ اﺧﺘﺒﺎر اﻟﺮﻗﻢ اﻟﻈﺎھﺮ ﻟﻠﻌﻤﯿﻞ و ﺑﺬﻟﻚ ﻟﻦ ﯾﻈﮭﺮ ﻟﻠﻌﻜﺴﻲ اﻷﻣﺮ واﺿﺢ ﻛﺎﻟﻌﺎدة ‪.‬‬

‫ھﻞ ﺗﻢ اﻷﻣﺮ ﻻ ﺧﻄﻮة أﺧﯿﺮة ﻓﻘﻂ ‪:‬‬

‫اﻵن أﺻﺒﺢ ﻛﻮد ﻣﺸﺮوﻋﻨﺎ اﻟﻜﺎﻣﻞ ھﻮ اﻷﺗﻲ ‪:‬‬

‫اﻟﻤﻮدﯾﻮل ‪:‬‬
‫‪Module Module1‬‬
‫اﻻﺳﻜﻲ اﱃ اﻟﺘﺤﻮﯾﻞ '‬
‫‪Function Str2Int(ByVal InStrng As Object) As String‬‬
‫‪Dim StrLn As Integer‬‬
‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬
‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
Dim Cntr As Integer
Dim NewStr As String

Str2Int = ""
StrLn = Len(InStrng)
If StrLn = 0 Then Exit Function
NewStr = ""
For Cntr = 1 To StrLn
Select Case Mid(InStrng, Cntr, 1)
Case "0" To "z"
NewStr = NewStr & Asc(Mid(InStrng, Cntr, 1))
End Select
Next Cntr
Str2Int = NewStr
End Function

'‫اﻟﺘﺸﻮﯾﺶ داﻟﺔ‬
Public Function Obfuscate(ByVal origText As String) As
String
Dim textBytes As Byte() =
System.Text.Encoding.Unicode.GetBytes(origText)
For counter As Integer = 0 To textBytes.Length - 1
If (textBytes(counter) > 31) And (textBytes(counter)
< 127) Then
textBytes(counter) += CByte(counter Mod 31 + 1)
If (textBytes(counter) > 126) Then
textBytes(counter) -= CByte(95)
End If
Next counter
Return System.Text.Encoding.Unicode.GetChars(textBytes)
End Function

End Module

:‫اﻟﻔﻮرم‬

Imports System.Management

Public Class Form1


Dim Idp As String
Dim Idp1 As String
Dim idp2 As String

Private Sub FrmActiv_Load(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles MyBase.Load
www.vb4arab.com nabhan170@hotmail.com ‫ ﻧﻮر ﻧﺒﮭﺎن‬:‫ﺑﻘﻠﻢ‬
‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
'‫ﻟﻠﻤﻌﺎﰿ اﻟﺘﺴﻠﺴﻠﻲ اﻟﺮﻗﻢ‬
Dim Searcher As ManagementObjectSearcher
Searcher = New ManagementObjectSearcher("Select
ProcessorId From Win32_Processor" )
For Each Device As ManagementObject In Searcher.Get
For Each Prop As PropertyData In Device.Properties
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'‫اﻟﺮﻗﻢ اﺳﺘﺨﺮاج‬
Idp = (Prop.Value.ToString)
Next
Next
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'‫اﻟﺮﻗﻢ ﺗﺸﻮﯾﺶ‬
Idp = Obfuscate(Idp)
'‫اﺳﻜﻲ اﱃ ﲢﻮﯾﻠﻪ‬
Idp = Str2Int(Idp)
'‫اﻟﺘﺴﺠﯿﻞ رﻗﻢ‬
TextBoxReg.Text = Idp
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'‫اﻟﺮﻗﻢ ﺗﺸﻮﯾﺶ‬
Idp1 = Obfuscate(Idp)
'‫اﺳﻜﻲ اﱃ ﲢﻮﯾﻠﻪ‬
'‫اﻟﺘﻔﻌﯿﻞ رﻗﻢ‬
Idp1 = Str2Int(Idp1)
'‫ اﻗﺘﺼﺎص‬14 ‫رﻗﻢ‬
Idp1 = (Idp1.Substring(0, 14))
End Sub

Private Sub ButtonOk_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles ButtonOk.Click
'‫ﲨﺎﱄ ﻣﺘﻐﲑ‬
idp2 = Idp1
If TextBoxUser.Text = idp2 Then
'‫ﺣﻔﻆ اﻻﻋﺪادت‬
My.Settings.nameuser = TextBoxUser.Text
My.Settings.Save()
End
End If
End Sub
End Class

:‫واﻟﺘﺼﻤﯿﻢ اﻟﺘﺎﻟﻲ‬

www.vb4arab.com nabhan170@hotmail.com ‫ ﻧﻮر ﻧﺒﮭﺎن‬:‫ﺑﻘﻠﻢ‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬

‫اﻧﺘﮭﻰ أﻣﺮ اﻟﺘﻔﻌﯿﻞ إذا ﺧﻄﺄ ﻟﻦ ﯾﻘﻮم ﺑﺄي إﺟﺮاء ﻣﻨﻌﺎ ﻹﺟﺮاء اﻟﺘﺠﺎرب ﻣﻦ ﻗﺒﻞ اﻟﻤﻌﺘﺪﯾﻦ و إذا ﺻﺢ ﯾﺤﻔﻆ اﻟﺮﻗﻢ ﻓﻘﻂ‬

.ً‫وﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﻻﺣﻘﺎ‬

‫اﻵن ﻃﺮﯾﻘﺔ اﻟﻤﻘﺎرﻧﺔ ﺑﻌﯿﺪا ﻋﻦ ﻓﻮرم اﻟﺘﻔﻌﯿﻞ ﻛﺎﻷﺗﻲ‬

‫اذھﺐ ﻷي ﻓﻮرم و أﻟﺼﻖ ﻛﻮد اﻟﺮﻗﻢ‬

Imports System.Management

Public Class Form1


Dim Idp As String
Dim Idp1 As String
Dim idp2 As String

Private Sub FrmActiv_Load(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles MyBase.Load
'‫ﻟﻠﻤﻌﺎﰿ اﻟﺘﺴﻠﺴﻠﻲ اﻟﺮﻗﻢ‬
Dim Searcher As ManagementObjectSearcher
Searcher = New ManagementObjectSearcher("Select
ProcessorId From Win32_Processor" )
For Each Device As ManagementObject In Searcher.Get
For Each Prop As PropertyData In Device.Properties
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'‫اﻟﺮﻗﻢ اﺳﺘﺨﺮاج‬
Idp = (Prop.Value.ToString)
www.vb4arab.com nabhan170@hotmail.com ‫ ﻧﻮر ﻧﺒﮭﺎن‬:‫ﺑﻘﻠﻢ‬
‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫‪Next‬‬
‫‪Next‬‬
‫‪'%%%%%%%%%%%%%%%%%%%%%%%%%%%%‬‬
‫اﻟﺮﻗﻢ ﺗﺸﻮﯾﺶ'‬
‫)‪Idp = Obfuscate(Idp‬‬
‫اﺳﻜﻲ اﱃ ﲢﻮﯾﻠﻪ'‬
‫)‪Idp = Str2Int(Idp‬‬
‫اﻟﺘﺴﺠﯿﻞ رﻗﻢ'‬
‫‪TextBoxReg.Text = Idp‬‬
‫‪'%%%%%%%%%%%%%%%%%%%%%%%%%%%%‬‬
‫اﻟﺮﻗﻢ ﺗﺸﻮﯾﺶ'‬
‫)‪Idp1 = Obfuscate(Idp‬‬
‫اﺳﻜﻲ اﱃ ﲢﻮﯾﻠﻪ'‬
‫اﻟﺘﻔﻌﯿﻞ رﻗﻢ'‬
‫)‪Idp1 = Str2Int(Idp1‬‬
‫رﻗﻢ ‪ 14‬اﻗﺘﺼﺎص'‬
‫))‪Idp1 = (Idp1.Substring(0, 14‬‬
‫‪End Sub‬‬

‫ﻓﻔﻲ أي ﻓﻮرم أو ﻓﻮرﻣﺎ ﻣﺤﺪدة ﻋﻠﻰ ﻣﺰاﺟﻚ ﺳﯿﺘﻢ اﺳﺘﻨﺘﺎج اﻟﺮﻗﻢ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﺳﺎﺑﻘﺎ ﻓﻲ ﻓﻮرم اﻟﺘﻔﻌﯿﻞ وﺣﻔﻆ اﻟﺮﻗﻢ ﻓﻲ ﻣﺘﻐﯿﺮ‬

‫ﻛﻤﺎ ﺗﻼﺣﻆ ﻣﻦ اﻟﻜﻮد أﺧﺮ ﻗﯿﻤﺔ ﻛﺎﻧﺖ رﻗﻢ اﻟﺘﻔﻌﯿﻞ اﻟﻤﻜﻮن ﻣﻦ ‪ ١٤‬رﻗﻢ واﻟﻤﺘﻐﯿﺮ ھﻮ ‪Idp1‬‬

‫اﻟﻤﻘﺎرﻧﺔ ﻛﺎﻟﺘﺎﻟﻲ‬
‫‪If My.Settings.nameuser = Idp1 Then‬‬
‫‪'do thing‬‬
‫‪Else‬‬
‫‪'end‬‬
‫‪End If‬‬
‫واﻵن ﺿﻊ اﻟﻤﻘﺎرﻧﺔ أﯾﻨﻤﺎ ﺗﺮﯾﺪ ﻓﻲ زر اﻟﻄﺒﺎﻋﺔ ﻓﻲ زر اﻟﺒﺤﺚ ﻓﻲ ﺗﺤﻤﯿﻞ ﻓﻮرم اﻟﻤﺒﯿﻌﺎت ﻓﻲ ‪ ....‬اﻟﺦ ‪....‬‬

‫واﺧﺘﺮ اﻹﺟﺮاء اﻟﻤﻨﺎﺳﺐ ﺳﻮاء ﺑﺈﻏﻼق اﻟﺒﺮﻧﺎﻣﺞ أو ﺑﺘﻌﻄﯿﻞ ﺑﻌﺾ اﻷزرار أو ﺑﺈﺧﻔﺎء ﻧﻮاﻓﺬ أو ‪ ....‬اﻟﺦ‪.....‬‬

‫وﻛﻞ ﻣﺎ ﻛﺜﺮت اﻟﻤﻘﺎرﻧﺎت ﺻﺎر اﻟﺒﺮﻧﺎﻣﺞ أﺑﻄﺄ ﻋﻔﻮاً أﻗﺼﺪ ﺻﺎر اﻷﻣﺮ ﻣﺒﮭﻢ أﻛﺜﺮ )ﻣﻠﺢ وﻓﻠﻔﻞ(‬

‫ﻋﺪاك ﻋﻨﺪ وﺿﻊ ﻣﻘﺎرﻧﺎت زﻣﻨﯿﺔ‪) .‬ﺷﮭﺮﯾﺔ ‪ ...‬ﺳﺎﻋﯿﺔ ‪ ...‬ﺑﻌﺪ ‪ ١٠‬اﺳﺘﻌﻤﺎﻻت ‪ ...‬اﻟﺦ ‪ (.....‬ﺑﻤﺤﺾ إرادﺗﻚ ‪.‬‬

‫ﻣﺪاﺧﻠﺔ ‪:‬‬

‫ﺣﺎول أﯾﻀﺎ ﺗﻔﺤﺺ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻷﺧﯿﺮ اﻟﺬي ﺳﻨﺨﺰن ﻓﯿﮫ رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﺑﺤﯿﺚ إذا ﻛﺎﻧﺖ ﻓﺎرﻏﺔ اﻟﺨﺮوج ﻣﻦ اﻹﺟﺮاء وﻋﺪم‬
‫اﻟﺘﻔﻌﯿﻞ أو اﺳﺘﺨﺪم ‪.Try‬‬

‫ﻷﻧﮫ رﺑﻤﺎ ﺑﻌﺪ ﻋﺸﺮﯾﻦ ﺳﻨﺔ ﯾﺨﺮج ﻧﻈﺎم وﯾﻨﺪوز ﻻ ﯾﺪﻋﻢ اﻟﻤﻜﺘﺒﺔ ﻓﯿﻜﻮن اﺳﺘﺨﺮاج رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﺧﺎﻟﻲ وﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﻣﻊ ﻗﯿﻤﺔ‬
‫ﺧﺎﻟﯿﺔ ﻓﺘﺘﺴﺎوى اﻟﻘﯿﻤﺔ وﯾﺘﻢ اﻟﺘﻔﻌﯿﻞ أو ﯾﻮﻟﺪ ﺧﻄﺄ ‪.‬‬

‫إﻟﻰ ھﻨﺎ ﻧﻨﺘﮭﻲ ﻣﻦ ﻗﺴﻢ اﻟﺘﺴﺠﯿﻞ وﻧﺬھﺐ اﻵن ﻟﻘﺴﻢ اﻟﺘﻔﻌﯿﻞ‪:‬‬

‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫إن ﺑﺮﻧﺎﻣﺞ اﻟﺘﻔﻌﯿﻞ ﯾﺠﺐ أن ﯾﺘﻮاﺟﺪ ﻟﺪﯾﻚ ﻓﻘﻂ أو ﻟﻸﺷﺨﺎص اﻻﻋﺘﺒﺎرﯾﯿﻦ اﻟﺬي ﯾﺤﻖ ﻟﮭﻢ ﺗﻮﻟﯿﺪ أرﻗﺎم اﻟﺘﻔﻌﯿﻞ ﺑﺤﺴﺐ رﻏﺒﺘﻚ‪.‬‬

‫ﻻن ﺑﺮﻧﺎﻣﺞ اﻟﺘﻔﻌﯿﻞ ھﻮ اﻟﻜﯿﺠﻦ ﻟﺒﺮﻧﺎﻣﺠﻚ إن ﺻﺢ اﻟﺘﻌﺒﯿﺮ‬

‫ﻃﺮﯾﻘﺔ ﺗﻮﻟﯿﺪ أرﻗﺎم اﻟﺘﻔﻌﯿﻞ ‪:‬‬

‫ھﻨﺎ اﻷﻣﺮ ﺑﺴﯿﻂ ﺟﺪا ﻷﻧﮫ ﺟﺰء ﺻﻐﯿﺮ ﻣﻤﺎ ﺳﺒﻖ‬

‫وھﻮ ﺟﺰء ﻣﻦ ﻣﺸﺮوﻋﻨﺎ ﻓﮭﻮ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻣﺸﻮش وﻣﺤﻮل ﻻﺳﻜﻲ وﻣﻘﺘﺺ ‪ ١٤‬رﻗﻢ‬

‫ﻧﻨﺸﺄ ﻣﺸﺮوع ﺟﺪﯾﺪ وﻧﻀﯿﻒ ﻓﯿﮫ ﻣﻮدﯾﻮل ﻧﻀﻊ ﻓﯿﮫ اﻟﺪوال اﻟﺴﺎﺑﻘﺔ ﻛﻤﺎ ﻓﻲ اﻟﺘﺴﺠﯿﻞ ﻛﺎﻟﻤﻮدﯾﻮل اﻟﺴﺎﺑﻖ ﺗﻤﺎﻣﺎً‬

‫وﻧﻨﺸﺄ ﻓﻮرم ﺟﺪﯾﺪ ﻋﻠﯿﮫ زر أﻣﺮ وﺻﻨﺪوﻗﻲ ﻧﺺ ‪TextBoxUser TextBoxReg ButtonOk‬‬

‫اﻟﺘﺼﻤﯿﻢ ‪:‬‬

‫ﻛﻮد زر اﻟﺘﻔﻌﯿﻞ ‪:‬‬


‫‪Public Class Form1‬‬
‫‪Dim XXX As String‬‬
‫‪Private Sub ButtonOk_Click(ByVal sender As System.Object, ByVal e As‬‬
‫‪System.EventArgs) Handles ButtonOk.Click‬‬
‫اﻟﺘﺴﺠﯿﻞ رﻗﻢ'‬
‫‪XXX = TextBoxReg.Text‬‬
‫‪'%%%%%%%%%%%%%%%%%%%%%%%%%%%%‬‬
‫اﻟﺮﻗﻢ ﺗﺸﻮﯾﺶ'‬
‫)‪XXX = Obfuscate(XXX‬‬
‫اﺳﻜﻲ اﱃ ﲢﻮﯾﻠﻪ'‬
‫اﻟﺘﻔﻌﯿﻞ رﻗﻢ'‬
‫)‪XXX = Str2Int(XXX‬‬
‫رﻗﻢ ‪ 14‬اﻗﺘﺼﺎص'‬
‫))‪XXX = (XXX.Substring(0, 14‬‬
‫اﻟﺘﻔﻌﯿﻞ رﻗﻢ اﺳﺘﻨﺘﺎج'‬
‫‪TextBoxUser.Text = XXX‬‬
‫‪End Sub‬‬
‫‪End Class‬‬

‫ﻃﺒﻌﺎ ﻻ ﺣﺎﺟﺔ ﻟﻠﺸﺮح ﻓﺎﻷﻣﺮ واﺿﺢ ﻣﻤﺎ ﺳﺒﻖ وﻣﻦ اﻟﻜﻮد )ﻓﻘﻂ ﺑﻌﺾ اﻟﺘﻌﺪﯾﻼت ﻋﻠﻰ رﻗﻢ اﻟﺘﺴﺠﯿﻞ(‬

‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫اﻵن ﻣﺎ ﻋﻠﯿﻚ إﻻ اﻟﻀﻐﻂ ﻋﻠﻰ زر رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﺑﻌﺪ إدﺧﺎل رﻗﻢ اﻟﺘﺴﺠﯿﻞ وﺳﯿﻈﮭﺮ ﻓﻲ اﻟﺼﻨﺪوق اﻟﺜﺎﻧﻲ رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﻟﺘﺮﺳﻠﮫ‬
. ‫ﻟﻠﻌﻤﯿﻞ وﯾﺘﻤﻜﻦ ﻣﻦ ﺗﻔﻌﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﻟﺸﻜﻞ اﻟﺼﺤﯿﺢ‬

. ‫وﺑﺬﻟﻚ ﻧﻜﻮن ﻗﺪ ﻧﺎﻗﺸﻨﺎ اﻟﻤﻮﺿﻮع ﺑﻄﺮﯾﻘﺔ ﻣﻄﻮﻟﺔ ﺑﻌﺾ اﻟﺸﻲء ﻟﺬﻟﻚ ﻣﻌﺬرة ﻣﻨﻲ إﻟﯿﻜﻢ‬

: ‫ﻓﻲ اﻟﻤﺮﻓﻘﺎت ﺗﺠﺪون ﻛﻞ ﻣﻦ‬

EXE ‫ ﻣﻠﻔﺎت ﺗﻨﻔﯿﺬﯾﺔ ﻟﻠﺘﺠﺮﺑﺔ‬NourAct ‫ ﻣﺸﺮوع اﻟﺘﻔﻌﯿﻞ‬NourReg ‫ﻣﺸﺮوع اﻟﺘﺴﺠﯿﻞ‬

C#

‫ﺣﺎوﻟﺖ ﻃﺮح اﻟﻤﻮﺿﻮع ﻟﻺﺧﻮة اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﻟﻠﺴﻲ ﺷﺎرب‬

:‫ﺑﻌﺪ اﻟﺘﻌﺪﯾﻞ ﯾﺼﺒﺢ اﻟﻤﺜﺎل ﻛﺎﻟﺘﺎﻟﻲ‬

WMI_Processor_Information.cs ‫ﻓﻲ اﻟﻤﻮدﯾﻮل‬

:‫اﻟﻜﻮد‬
using System;
using System.Collections.Generic;
using System.Text;
using System.Management;

namespace WMI_ProcessorInformation
{
public class WMI_Processor_Information
{

//Cpu serial,‫اﳌﻌﺎﰿ رﻗﻢ‬


public static string GetCpuId()
{
try
{
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Processor");

foreach (ManagementObject queryObj in searcher.Get())


{
return queryObj["ProcessorId"].ToString();
}
}
catch (ManagementException e)
{
return null;
}
return null;
}

//‫اﻟﺘﺸﻮﯾﺶ‬
public static string Obfuscate(string origText)
{
byte[] bytes = Encoding.Unicode.GetBytes(origText);
int num2 = bytes.Length - 1;
for (int i = 0; i <= num2; i++)
{

www.vb4arab.com nabhan170@hotmail.com ‫ ﻧﻮر ﻧﺒﮭﺎن‬:‫ﺑﻘﻠﻢ‬


‫ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب‬
‫))‪if ((bytes[i] > 0x1f) & (bytes[i] < 0x7f‬‬
‫{‬
‫;‪int index = i‬‬
‫;)))‪bytes[index] = (byte)(bytes[index] + ((byte)((i % 0x1f) + 1‬‬
‫)‪if (bytes[i] > 0x7e‬‬
‫{‬
‫;‪index = i‬‬
‫;)‪bytes[index] = (byte)(bytes[index] - 0x5f‬‬
‫}‬
‫}‬
‫}‬
‫;))‪return new string(Encoding.Unicode.GetChars(bytes‬‬
‫}‬
‫اﺳﻜﻲ‪//‬‬
‫'(‪//‬‬
‫}‬
‫}‬
‫ﻓﻲ اﻟﻔﻮرم‬

‫أﺿﻒ اﻷدوات ‪TextBox3 TextBox2 TextBox1 Button1 :‬‬

‫وﺿﻊ اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻟﻠﺰر ل ‪: Button1‬‬


‫{‬
‫اﳌﻌﺎﰿ رﻗﻢ‪//‬‬
‫;))(‪textBox1.Text = (WMI_ProcessorInformation.WMI_Processor_Information.GetCpuId‬‬
‫‪1‬اﻟﺮﻗﻢ ﺗﺸﻮﯾﺶ‪//‬‬
‫;))‪textBox2.Text = (WMI_Processor_Information.Obfuscate(textBox1.Text‬‬
‫‪2‬اﻟﺮﻗﻢ ﺗﺸﻮﯾﺶ‪//‬‬
‫;))‪textBox3.Text = (WMI_Processor_Information.Obfuscate(textBox2.Text‬‬

‫}‬

‫ﯾﻤﻜﻨﻜﻢ إﻛﻤﺎﻟﮫ ﻛﻤﺎ ﺗﺮﯾﺪون اﻧﻄﻼﻗﺎً ﻣﻤﺎ ﺳﺒﻖ ﻓﻲ ﺷﺮﺣﻨﺎ اﻟﺴﺎﺑﻖ‬

‫وﻓﻲ اﻟﺨﺘﺎم‪:‬‬

‫اﻟﻐﺮض ﻣﻦ ﺑﺮﻧﺎﻣﺠﻨﺎ ھﻮ ﻏﺮض ﺗﻌﻠﯿﻤﻲ‪.‬‬ ‫·‬


‫إذا ﻛﺎن ﺑﺮﻧﺎﻣﺠﻚ ﯾﺴﺘﺤﻖ اﻟﺤﻤﺎﯾﺔ ﻓﻘﻢ ﺑﺤﻤﺎﯾﺘﮫ‪.‬‬ ‫·‬
‫ﻻ ﺗﻌﺮض ﺑﺮﻧﺎﻣﺠﻚ ﻣﺒﺎﺷﺮة و إﻧﻤﺎ ﻗﻢ ﺑﻨﺸﺮ ﻧﺴﺨﺔ ﻣﺤﺪودة اﻟﻤﮭﺎم أﺻﻼ أي اﻟﺒﺮﻣﺠﺔ ﻏﯿﺮ ﻛﺎﻣﻠﺔ ﺑﻤﺜﺎل ﻋﺪم وﺟﻮد‬ ‫·‬
‫اﻟﺒﺤﺚ أﺑﺪا أو اﻟﻄﺒﺎﻋﺔ أو ‪ ....‬وﻋﻨﺪ اﻟﻄﻠﺐ أرﺳﻞ ﻟﻠﻌﻤﯿﻞ ﻓﻘﻂ ﻧﺴﺨﺔ ﻛﺎﻣﻠﺔ ﺗﺤﺘﺎج ﻟﻠﺘﻔﻌﯿﻞ ﺑﺈﺣﺪى اﻟﻄﺮق وﯾﻔﻀﻞ أن‬
‫ﺗﺘﻮﺳﻊ ﻓﻲ اﻟﺒﺤﺚ ﻋﻦ ﺣﻤﺎﯾﺎت أﻗﻮى ﻣﻤﺎ ﻗﺪﻣﻨﺎه‪.‬‬
‫وﻟﻜﻢ ﻣﻨﻲ ﺟﺰﯾﻞ اﻟﺸﻜﺮ ﻹﺻﻐﺎﺋﻜﻢ‪.‬‬ ‫·‬

‫ﺳﺒﺤﺎﻧﻚ اﻟﻠﮭﻢ وﺑﺤﻤﺪك أﺷﮭﺪ أن ﻻ إﻟﮫ إﻻ أﻧﺖ أﺳﺘﻐﻔﺮك و أﺗﻮب إﻟﯿﻚ‬

‫و ﻻ ﺣﻮل وﻻ ﻗﻮة إﻻ ﺑﺎﷲ اﻟﻌﻈﯿﻢ‬

‫واﻟﺴﻼم ﻋﻠﯿﻜﻢ ورﺣﻤﺔ اﷲ وﺑﺮﻛﺎﺗﮫ‬

‫أﺧﻮﻛﻢ ﻓﻲ اﷲ ﻧﻮر ﻧﺒﮭﺎن )اﻟﻤﺰﻣﺠﺮ ﺳﺎﺑﻘﺎ(‬

‫‪www.vb4arab.com‬‬ ‫‪nabhan170@hotmail.com‬‬ ‫ﺑﻘﻠﻢ‪ :‬ﻧﻮر ﻧﺒﮭﺎن‬

You might also like