Professional Documents
Culture Documents
ﺳﻨﺘﻨﺎول ﻓﻲ ھﺬا اﻟﻤﻮﺿﻮع ﻃﺮﯾﻘﺔ ﺗﺴﺠﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ وﺗﻔﻌﯿﻠﮫ و اﻟﺬي ﺗﻢ ﺗﻨﺎوﻟﮫ ﺳﺎﺑﻘﺎ ﻓﻲ اﻟﻔﯿﺠﻮال ﺑﯿﺴﻚ ٦ورﻏﻢ اﻟﻮﻗﺖ ﺑﯿﻦ
اﻟﻤﻮﺿﻮﻋﯿﻦ ﻟﻢ أﺟﺪ ﻣﻮﺿﻮع ﯾﻄﺮح ﻧﻔﺲ اﻟﻔﻜﺮة ﺗﻤﺎﻣﺎ وإﻧﻤﺎ ﺑﺘﺸﺎﺑﮫ وﺑﻌﺾ اﻟﺘﻌﻘﯿﺪ ﻟﺬﻟﻚ ﺳﺄﻋﯿﺪ ﺑﻨﺎء اﻟﻔﻜﺮة و أﻃﺮﺣﮭﺎ ﻓﻲ ھﺬا
اﻟﻤﻮﺿﻮع إن ﺷﺎء اﷲ ﻣﻦ ﺟﺪﯾﺪ ﺑﺄﺳﻠﻮب ﺑﺴﯿﻂ وﻣﻄﻮل ﻗﻠﯿﻼ ﻣﻦ اﻟﻨﺎﺣﯿﺔ اﻟﻨﻈﺮﯾﺔ ﻟﯿﺘﻢ اﺳﺘﯿﻌﺎﺑﮭﺎ ﺑﺎﻟﺸﻜﻞ اﻟﻜﺎﻓﻲ .
ﺑﺪاﯾﺔ وﻗﺒﻞ ﻛﻞ ﺷﻲء اﻟﻄﺮﯾﻘﺔ ﻣﻄﺮوﺣﺔ ﻷﺳﺒﺎب ﺗﻌﻠﯿﻤﯿﺔ وﻃﺒﻌﺎ ﻟﻦ أﻧﺎﻗﺶ ﻓﻌﺎﻟﯿﺔ اﻟﺤﻤﺎﯾﺔ أو ﻗﻮة اﻟﻜﺴﺮ ﻻن اﻷﻣﺮ ﻣﻔﺮوغ ﻣﻨﮫ
وﻻ أﺣﺐ اﻟﻮﻟﻮج ﻓﯿﮫ ﻟﻜﻦ إن ﺷﺎء اﷲ ﺳﯿﺘﻢ ﺗﻐﻄﯿﺔ ﺑﻌﺾ اﻟﺠﻮاﻧﺐ اﻟﻮﻗﺎﺋﯿﺔ ﻟﮭﺬا اﻟﻤﻮﺿﻮع .
ﺑﺴﻢ اﷲ ﻧﺒﺪأ:
إذا اﻟﻔﻜﺮة اﻷﺳﺎﺳﯿﺔ أن ﺑﺮﻧﺎﻣﺠﻨﺎ ﯾﻄﻠﺐ رﻗﻢ ﻟﯿﺼﺒﺢ ﻧﺴﺨﺔ ﻛﺎﻣﻠﺔ .
ﺑﺪاﯾﺔ ﻧﺴﺘﺨﺮج رﻗﻢ ﻓﺮﯾﺪ ﻣﻦ ﺟﮭﺎز اﻟﺤﺎﺳﻮب ﺑﺤﯿﺚ ﯾﻜﻮن ھﺬا اﻟﺮﻗﻢ ﯾﺨﺘﻠﻒ ﺑﯿﻦ ﻛﻞ ﺣﺎﺳﺐ و أﺧﺮ ﻛﺮﻗﻢ اﻟﻘﺮص اﻟﺼﻠﺐ أو
اﻟﻤﻌﺎﻟﺞ أو ...وﻧﻘﻮم ﺑﻌﻤﻠﯿﺎت ﺗﻤﻮﯾﮫ ﻟﮫ ﻟﻜﻲ ﻻ ﯾﻈﮭﺮ ﻣﻜﺸﻮﻓﺎ ﻛﻤﺎ ھﻮ ﻓﯿﻨﺘﺞ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻟﻠﻤﺴﺘﺨﺪم.
اﻵن ﻧﻘﻮم ﺑﻌﻠﻤﯿﺎت ﺗﻤﻮﯾﮫ أﺧﺮى ﻟﺮﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻟﻨﺸﺘﻖ رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﻓﺎﻟﺒﺮﻧﺎﻣﺞ ﯾﺤﻮي رﻗﻢ اﻟﻘﻄﻌﺔ أي إﺣﺪى ﻋﺘﺎد اﻟﺤﺎﺳﻮب ورﻗﻢ
ﺗﺴﺠﯿﻞ ورﻗﻢ ﺗﻔﻌﯿﻞ ﻓﺮﻗﻢ اﻟﻘﻄﻌﺔ ﻻ ﻋﻼﻗﺔ ﻟﻨﺎ ﺑﮫ ﻷﻧﻨﺎ ﺑﻌﺪ اﺳﺘﺨﺮﺟﺎه ﻋﺪﻟﻨﺎه ﻟﯿﻈﮭﺮ ﺑﻄﺮﯾﻘﺔ أﺧﺮى واﻟﻨﺎﺗﺞ ﺳﯿﻜﻮن رﻗﻢ
اﻟﺘﺴﺠﯿﻞ اﻵن ﻧﻌﯿﺪ ﻧﻔﺲ اﻟﻜﺮة وﻧﻌﺪل اﻟﺘﺴﺠﯿﻞ ﻻﺳﺘﺨﺮاج رﻗﻢ اﻟﺘﻔﻌﯿﻞ وﺑﺬﻟﻚ ﺑﺮﻧﺎﻣﺠﻨﺎ ﯾﺠﻮي اﻷرﻗﺎم اﻟﺜﻼﺛﺔ و اﻟﻈﺎھﺮ ﻣﻨﮭﺎ
ھﻮ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻓﻘﻂ ﻟﺪى اﻟﻌﻤﯿﻞ.
ﺳﯿﻘﻮم اﻟﻌﻤﯿﻞ ﺑﺈرﺳﺎل رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻟﻨﺎ ﻟﻨﺴﺘﺨﺮج رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ اﺳﺘﺨﺪﻣﻨﺎھﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ وﻧﺮﺳﻠﮫ ﻟﮫ وﻋﻨﺪھﺎ
ﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ وﻛﺴﺮ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﻗﺒﻞ اﻟﻤﮭﻨﺪس اﻟﻌﻜﺴﻲ ﻋﻔﻮا أﻗﺼﺪ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ وﺗﻔﻌﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺣﺎل
اﻟﺘﺴﺎوي.
زﻣﻦ vb6ﻛﻨﺎ ﻧﺴﺘﺨﺪم ﻣﻜﺘﺒﺔ ﻣﯿﻜﺮوﺳﻮﻓﺖ WbemScriptingﻻﺳﺘﺨﺮاج رﻗﻢ اﻟﻤﻌﺎﻟﺞ وﻓﻲ اﻟﺪوت ﻧﺖ ﺳﻨﺴﺘﺨﺪم
System.Management.dllﻻﺳﺘﺨﺮاج اﻟﺮﻗﻢ و اﻟﻤﻜﺘﺒﺔ ﻧﺴﺘﻄﯿﻊ ﻣﻦ ﺧﻼﻟﮭﺎ اﺳﺘﺨﺮاج ﻣﻮاﺻﻔﺎت ﻋﺘﺎد اﻟﺠﮭﺎز ﻟﻜﻢ ﻛﺒﯿﺮ
ﻣﻦ ھﺬا اﻟﻌﺘﺎد ﻣﺎ ﯾﮭﻤﻨﺎ ﻓﻲ ﻣﻮﺿﻮﻋﻨﺎ ھﻮ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﻛﻮﻧﮫ ﻓﺮﯾﺪ وﻧﺮﯾﺪ اﻻﻋﺘﻤﺎد ﻋﻠﯿﮫ ﻓﻲ ﺗﻐﯿﯿﺮ اﻟﺮﻗﻢ ﻟﻜﻞ ﻣﺴﺘﺨﺪم ﻟﺒﺮﻧﺎﻣﺠﻨﺎ.
اﻓﺘﺢ Microsoft Visual Studio 2008و أﻧﺸﺄ ﻣﺸﺮوع ﺟﺪﯾﺪ وﺳﻤﮫ ﻣﺎ ﺷﺌﺖ
ﺗﻮﺟﮫ اﻟﻰ ﻧﺎﻓﺬة Solution Explorerواﺿﻐﻂ ﻋﻞ اﻟﻤﺸﺮوع ﺑﺎﻟﺰر اﻷﯾﻤﻦ واﺧﺘﺮ اﻟﺨﺼﺎﺋﺺ Propertiesادﺧﻞ إﻟﻰ
اﻟﺘﺒﻮﯾﺐ Referencesو أﺿﻒ Add Referencesاﻟﻤﻜﺘﺒﺔ System.Managementﻛﻤﺎ ﻓﻲ اﻟﺼﻮرة اﻟﺘﺎﻟﯿﺔ:
وزر أﻣﺮ وﺳﻤﮫ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وﻋﻨﺪ إﯾﺠﺎدھﺎ ﻧﺴﺘﺨﺮﺟﮭﺎ ﻓﻲ ﺻﻨﺪوق اﻟﻨﺺ.
رﺑﻤﺎ ﯾﺴﺄل اﻟﺒﻌﺾ ﻟﻤﺎذا ﻻ ﻧﻌﺮض اﻟﺮﻗﻢ ﻣﺒﺎﺷﺮة ﺑﺪون اﻟﺤﻠﻘﺔ واﻟﺒﺤﺚ ﻓﯿﮭﺎ ﻓﺎﻟﺠﻮاب ﺳﯿﻜﻮن ﻻن رﻗﻢ اﻟﺨﺎﺻﯿﺔ ﺑﯿﻦ ﺧﺼﺎﺋﺺ
اﻟﻤﻌﺎﻟﺞ ﻟﻦ ﺗﻜﻮن اﻷوﻟﻰ ورﺑﻤﺎ ﯾﺨﺘﻠﻒ ﺗﺮﺗﯿﺒﮭﺎ ﻣﻦ ﺟﮭﺎز ﻷﺧﺮ ﻟﺬﻟﻚ ﻧﺤﻦ ﻧﺒﺤﺚ ﻋﻨﮭﺎ ﺿﻤﻦ اﻟﻤﻮاﺻﻔﺎت ﻛﻠﮭﺎ وﻋﻨﺪ إﯾﺠﺎدھﺎ
ﯾﺘﻢ ﻗﻨﺺ اﻟﻘﯿﻤﺔ و وﺿﻌﮭﺎ ﻓﻲ ﺻﻨﺪوق اﻟﻨﺺ.
اﻵن ﻧﺴﺘﻄﯿﻊ اﺳﺘﺨﺪام رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﻛﻤﺎ ھﻮ ﻟﻌﻤﻠﯿﺎت اﻟﺘﺴﺠﯿﻞ واﻟﺘﻔﻌﯿﻞ ﺑﺤﯿﺚ ﯾﻜﻮن اﻟﺮﻗﻢ ﻣﺒﺎﺷﺮة رﻗﻢ ﺗﺴﺠﯿﻞ ورﻗﻢ اﻟﺘﻔﻌﯿﻞ
ﯾﻜﻮن ﺑﺈﺿﺎﻓﺔ ﺑﻌﺾ أرﻗﺎم أو ﻣﻌﺎدﻟﺔ ﻟﮫ ﻟﻜﻦ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ إذا ﻛﺎن اﻟﻤﺴﺘﺨﺪم ﻟﺪﯾﮫ ﺑﻌﺾ اﻟﺒﺪﯾﮭﺔ ﻓﺴﯿﻨﺘﺒﮫ إﻟﻰ اﻟﺮﻗﻢ وﯾﻜﺘﺸﻒ
اﻧﮫ رﻗﻢ اﻟﻤﻌﺎﻟﺞ وﻋﻨﺪھﺎ ﯾﻌﺮف اﻟﺘﻐﯿﺮ اﻟﺬي ﺣﺼﻞ ﻟﺮﻗﻢ اﻟﺘﻔﻌﯿﻞ ﺑﺤﺬف رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﻣﻦ اﻟﺴﻠﺴﺔ ﻟﺬﻟﻚ ﺳﻮف ﻧﻘﻮم ﺑﺘﺸﻔﯿﺮ اﻟﺮﻗﻢ
و إﻇﮭﺎره ﺑﻄﺮﯾﻘﺔ ﺗﺠﻌﻞ اﻟﻤﺴﺘﺨﺪم ﻻ ﯾﻌﺮف ﻣﺎ ھﻮ اﻟﺮﻗﻢ اﻟﺬي اﻋﺘﻤﺪﻧﺎ ﻋﻠﯿﮫ ﻟﺬﻟﻚ اﻵن ﻧﺘﺠﮫ ﻹﻧﺘﺎج رﻗﻢ اﻟﺘﺴﺠﯿﻞ واﻟﺘﻔﻌﯿﻞ .
اﻵن ﺳﻨﺘﺠﮫ ﻻﺳﺘﺨﺮاج رﻗﻢ اﻟﺘﺴﺠﯿﻞ واﻟﺘﻔﻌﯿﻞ ﻋﺒﺮ ﺗﺤﻮﯾﻞ أو ﺗﺸﻔﯿﺮ اﻟﺴﻠﺴﺔ اﻟﻨﺼﯿﺔ اﻟﺘﻲ ﺗﻌﺒﺮ ﻋﻦ رﻗﻢ اﻟﻤﻌﺎﻟﺞ و اﻟﺘﻲ ﺗﻈﮭﺮ
ﻓﻲ ﺻﻨﺪوق اﻟﻨﺺ اﻷول TextBoxIdﺳﺄﺳﺘﺨﺪم داﻟﺔ اﻟﺘﺤﻮﯾﻞ إﻟﻰ اﻻﺳﻜﻲ )اﻟﻨﺎﺗﺞ ﺳﯿﻜﻮن رﻗﻤﻲ( وھﺬه ﻃﺮﻗﺔ ﺳﮭﻠﺔ ﻟﺘﻠﻘﯿﻦ
رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﻟﻠﻌﻤﯿﻞ ﻛﻮﻧﮭﺎ ﻣﺤﺼﻮرة ﺑﺎﻟﺸﻜﻞ اﻟﺮﻗﻤﻲ ﻣﻦ ٠إﻟﻰ ٩ﻓﻘﻂ وﺑﻌﯿﺪة ﻋﻦ اﻟﺮﻣﻮز أو اﻷﺣﺮف
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
ﺷﻐﻞ اﻟﺒﺮﻧﺎﻣﺞ وﺟﺮب اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺰر وﺳﯿﻈﮭﺮ أﻣﺎﻣﻚ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :
اﻟﺮﻗﻢ اﻟﺜﺎﻧﻲ ھﻮ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻣﺸﺘﻖ ﺑﺘﺤﻮﯾﻞ رﻗﻢ اﻟﻤﻌﺎﻟﺞ إﻟﻰ ﻗﯿﻢ اﻻﺳﻜﻲ وھﻮ ﺳﯿﻈﮭﺮ ﻟﻠﻌﻤﯿﻞ وﯾﺮﺳﻠﮫ ﻟﻨﺎ
اﻟﺮﻗﻢ اﻟﺜﺎﻟﺚ رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﻣﺸﺘﻖ ﻣﻦ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻷوﻟﻰ وھﻮ ﺳﯿﻜﻮن ﻣﺨﻔﻲ ﻟﻠﻌﻤﯿﻞ وھﺬا اﻟﺮﻗﻢ ﺳﯿﻜﻮن ﻟﺪﯾﻨﺎ
أﯾﻀﺎ ﺑﺎﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ﺗﺤﻮﯾﻞ اﻟﺘﺴﺠﯿﻞ إﻟﻰ اﺳﻜﻲ أي ﻗﯿﻢ رﻗﻤﯿﺔ ﻹرﺳﺎﻟﮫ إﻟﻰ اﻟﻌﻤﯿﻞ وﻋﻨﺪﻣﺎ ﯾﺪﺧﻠﮫ ﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻨﮫ وﺑﯿﻦ رﻗﻢ
اﻟﺘﻔﻌﯿﻞ اﻟﻤﺨﻔﻲ ﻋﻨﮫ إذا ﺗﺴﺎوى اﻟﺮﻗﻤﯿﻦ ﺗﺘﻢ اﻟﻌﻤﻠﯿﺔ و إﻻ ﻓﻼ
ﻓﺎﻟﻤﺮﺑﻌﺎت ذات اﻟﻠﻮن اﻷﺳﻮد ﻟﻦ ﺗﻈﮭﺮ ﻟﻠﻌﻤﯿﻞ و إﻧﻤﺎ ﺳﯿﻈﮭﺮ ﻓﻘﻂ رﻗﻢ اﻟﺘﺴﺠﯿﻞ اﻟﺬي ﺳﯿﺮﺳﻠﮫ ﻟﻨﺎ أي اﻟﻤﺮﺑﻊ اﻷﺑﯿﺾ اﻷول
وﻣﺮﺑﻊ ﯾﻄﻠﺐ ﻣﻨﮫ إدﺧﺎل رﻗﻢ اﻟﺘﻔﻌﯿﻞ اﻟﻤﺮﺳﻞ ﻟﮫ ﻣﻦ ﻗﺒﻠﻨﺎ وھﻮ اﻟﻤﺮﺑﻊ اﻷﺧﯿﺮ
وﺑﻌﺪ إدﺧﺎل اﻟﺮﻗﻢ ﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ ﻓﻲ اﻟﻤﺮﺑﻌﯿﻦ اﻷﺧﯿﺮﯾﻦ ﻓﻲ ﺣﺎل اﻟﺘﺴﺎوي ﺗﺘﻢ اﻟﻌﻤﻠﯿﺔ وإﻻ ﻓﻼ
...
اﻷن ﻃﺮﯾﻘﺔ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ رﻗﻢ اﻟﺘﻔﻌﯿﻞ اﻟﻤﺨﻔﻲ و اﻟﺮﻗﻢ اﻟﺬي أدﺧﻠﮫ اﻟﻌﻤﯿﻞ
ﻃﺒﻌﺎ وﺟﻮد اﻟﻤﻘﺎرﻧﺔ ﺑﺤﺴﺐ ﻣﻌﻠﻮﻣﺎت اﻟﻤﮭﻨﺪس اﻟﻌﻜﺴﻲ ﯾﺴﮭﻞ ﺗﺠﺎوز اﻟﺒﺮﻧﺎﻣﺞ وﻛﺴﺮه
أﺿﻒ زر أﻣﺮ وﺳﻤﮫ ButtonOkوﺻﻨﺪوق اﻟﻨﺺ اﻟﺮاﺑﻊ اﻟﺬي ﺳﯿﺪﺧﻞ اﻟﻌﻤﯿﻞ ﻓﯿﮫ اﻟﺮﻗﻢ ﺳﻤﮫ TextBoxUser
ﻧﺤﻦ اﻋﺘﻤﺪﻧﺎ إﻇﮭﺎر رﺳﺎﻟﺔ ﻟﻠﻌﻤﯿﻞ ﺗﻔﯿﺪ ﺑﺄن اﻟﺮﻗﻢ ﺻﺢ أو ﺧﻄﺎ أﻣﺎ ﺑﺎﻟﺸﻜﻞ اﻟﻌﻤﻠﻲ ﻓﺎﻷﻣﺮ ﺳﯿﻜﻮن ﺑﺘﻔﻌﯿﻞ ﻓﺘﺢ ﻧﻮاﻓﺬ واﺳﺘﺨﺪام
إﻣﻜﺎﻧﯿﺎت ﻛﺎﻟﻄﺒﺎﻋﺔ ﻣﺜﻼ أو ﻓﺘﺢ اﻟﺒﺮﻧﺎﻣﺞ إذا ﻛﺎن اﻟﺘﻔﻌﯿﻞ ﯾﻈﮭﺮ ﻋﻨﺪ إﻗﻼع اﻟﺒﺮﻧﺎﻣﺞ ﻣﺒﺎﺷﺮة ﻟﺬﻟﻚ ﻧﺤﻦ ﻧﺴﺘﻌﯿﺾ ﺑﻌﺒﺎرة
ً اﻟﱪﻧﺎﻣﺞ ﺗﻔﻌﯿﻞ ﰎ"(MsgBox
)"ﻟﻚ ﺷﻜﺮا
رﺑﻤﺎ ﯾﺴﺄل اﻟﺒﻌﺾ ﻣﺎ دﺧﻞ اﻟﻤﮭﻨﺪس اﻟﻌﻜﺴﻲ ﻓﻲ اﻟﻤﻮﺿﻊ أﻗﻮل أﻧﮫ رﺑﻤﺎ ﯾﻔﻜﺮ ﻓﻲ اﻟﻜﺴﺮ ﻟﺬﻟﻚ ﻧﺤﻦ ﻧﺮﯾﺪه أن ﯾﻜﺴﺐ اﻟﺠﺎﺋﺰة
ﺑﻌﺮق ﺟﺒﯿﻨﮫ وﻟﯿﺲ ﺑﺴﮭﻮﻟﺔ ﻟﺬﻟﻚ ﺳﻨﺠﻌﻞ ﻋﻤﻠﯿﺎﺗﻨﺎ ﻣﺨﻔﯿﺔ ﻋﻠﯿﮫ ﺑﻌﺾ اﻟﺸﻲء ﻟﻨﻜﺴﺒﮫ ﺑﻌﺾ اﻟﺨﺒﺮة وﯾﻜﻮن اﻟﻜﺴﺮ ﺗﻢ ﺑﺘﻌﺒﮫ
وﻋﺮق ﺟﺒﯿﻨﮫ و إﻻ ﻓﻨﺤﻦ ﻧﺘﺤﺮى اﻟﺨﯿﺮ ﻓﻲ اﻟﻨﺎس وﻓﻲ ﻋﻤﻼﺋﻨﺎ أﻧﮭﻢ ﻻ ﯾﺤﺎوﻟﻮا ﻛﺴﺮ ﺑﺮاﻣﺠﻨﺎ وﯾﺘﺮﻛﻮﻧﺎ ﻧﺘﺴﺒﺐ.
ﻧﺘﺎﺑﻊ ﻣﻊ ﺑﻌﺾ اﻟﻨﺼﺎﺋﺢ :ﻻ ﺗﺠﻌﻞ ﻣﻜﺎن اﻟﺘﻔﻌﯿﻞ ھﻮ ﻧﻔﺴﮫ ﻣﻜﺎن اﻟﻤﻘﺎرﻧﺔ وإﻋﻄﺎء اﻟﺼﻼﺣﯿﺎت
اﻟﻤﻘﺼﻮد أﺣﺒﺘﻲ :أﻧﻨﺎ ﻋﻨﺪ ﺗﻔﻌﯿﻞ ﺑﺮﻧﺎﻣﺠﻨﺎ ﺑﺸﻜﻠﮫ اﻟﺼﺤﯿﺢ ﻓﺄﻧﮫ ﻻ ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺮﻗﻢ اﻟﺨﺎﻃﺊ و ﯾﺘﻢ ﺗﺨﺰﯾﻦ اﻟﺮﻗﻢ ﻷﻧﮫ ﺻﺤﯿﺢ
ﻓﻘﻂ أﻣﺎ ﺗﻔﻌﯿﻞ اﻟﻤﯿﺰات ﻓﺘﺤﺘﺎج ﻟﻤﻘﺎرﻧﺔ أﺧﺮى ﻓﻲ ﻓﻮرم أﺧﺮ ﺑﻌﯿﺪا ﻋﻦ ﻣﻜﺎن اﻟﺘﻔﻌﯿﻞ ﺑﺸﺮح ﺑﺴﯿﻂ ﻟﻮ أدﺧﻞ اﻟﻤﺴﺘﺨﺪم رﻗﻢ
اﻟﺘﻔﻌﯿﻞ اﻟﺼﺤﯿﺢ ﺳﺘﻈﮭﺮ رﺳﺎﻟﺔ ﺗﻔﯿﺪ ﺑﺬﻟﻚ وﺑﻨﻔﺲ اﻟﻮﻗﺖ ﻧﺨﺰن اﻟﺮﻗﻢ اﻟﺼﺤﯿﺢ ﻓﻲ ﻣﻜﺎن ﻣﻌﯿﻦ )اﻟﺒﺮﻧﺎﻣﺞ -اﻟﺮﯾﺠﺴﺘﺮي-ﻣﻠﻒ (
وﻋﻨﺪ إﻗﻼع اﻟﺒﺮﻧﺎﻣﺞ ﯾﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﻣﺮة أﺧﺮى ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ ﻻن اﻟﺒﺮﻧﺎﻣﺞ رﺑﻤﺎ ﯾﺘﻢ ﺗﺠﺎوزه ﻣﻦ ﺧﻼل اﻟﮭﻨﺪﺳﺔ اﻟﻌﻜﺴﯿﺔ وﯾﺘﻢ
ﺗﺪﻣﯿﺮ ﻗﺴﻢ اﻟﻤﻘﺎرﻧﺔ ﻟﺬﻟﻚ اﻟﻤﻘﺎرﻧﺔ اﻷﺳﺎﺳﯿﺔ ﺗﺘﻢ ﻓﻲ ﻣﻜﺎن أﺧﺮ وواﺟﮭﺔ اﻟﺘﻔﻌﯿﻞ ھﻲ ﻓﻘﻂ ﻟﺘﺨﺰﯾﻦ اﻟﺮﻗﻢ اﻟﺼﺤﯿﺢ وﻋﻨﺪ إﻗﻼع
اﻟﺒﺮﻧﺎﻣﺞ ﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ رﻗﻢ اﻟﺘﻔﻌﯿﻞ واﻟﺮﻗﻢ اﻟﻤﺨﺰن ﻣﻦ ﺟﺪﯾﺪ ﺻﺢ ﯾﻔﻌﻞ اﻟﻤﯿﺰات وإﻻ ﻓﻼ وھﻜﺬا ﻧﻘﻮم ﺑﺤﺸﻮ ﺑﺮﻧﺎﻣﺠﻨﺎ
ﺑﻌﺸﺮة ﻣﻘﺎرﻧﺎت وﻧﻀﻊ ﻋﺸﺮة ﻣﻘﺎرﻧﺎت أﺧﺮى اﺣﺘﯿﺎط ﻣﺜﻞ ﺑﻌﺪ اﻟﺘﺸﻐﯿﻞ اﻟﺨﺎﻣﺲ ﻟﻠﺒﺮﻧﺎﻣﺞ ﻓﻲ اﻟﯿﻮم اﻷول ﻣﻦ ﻛﻞ ﺷﮭﺮ وﺑﻌﺪ
ﺷﮭﺮﯾﻦ ﺑﺬﻟﻚ ﻧﻀﻤﻦ أن ﻗﻔﺰات اﻟﺠﻤﻞ اﻟﺸﺮﻃﯿﺔ ﻣﮭﻤﺎ ﺣﻄﻢ ﻣﻨﮭﺎ ﯾﺒﻘﻰ ﺷﻲء ﻣﻔﻌﻮﻟﮫ ﻣﻮﺟﻮد
اﻟﮭﺪف :ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ اﻟﺘﻤﻮﯾﮭﯿﺔ ﻧﺠﻌﻞ أﻣﺮ ﺗﺠﺎوز اﻟﻤﻘﺎرﻧﺎت ﺻﻌﺐ ﺑﺎﻟﺘﺎﻟﻲ ﻟﻦ ﯾﻜﺴﺮ وﻃﺒﻌﺎ ھﻨﺎ ﻟﻦ ﻧﺴﺒﯿﺔ ﺑﻄﺮﯾﻘﺔ اﻟﻘﻔﺰ
وﺗﺪﻣﯿﺮ اﻟﻤﻘﺎرﻧﺎت ﻣﺎذا ﻟﻮ ﻓﻜﺮ ﺑﺘﺪﻣﯿﺮ ﺟﻤﯿﻊ اﻟﻤﻘﺎرﻧﺎت ﻓﺎﻷﻣﺮ ﺻﻌﺐ ﻻن ﺑﺮﻧﺎﻣﺠﻚ رﺑﻤﺎ ﯾﺤﻮي ﻣﻘﺎرﻧﺎت ﻋﺎدﯾﺔ ﻛﺎﻟﺒﺤﺚ
وﻏﯿﺮه ﺑﺎﻟﺘﺎﻟﻲ ﻟﻦ ﯾﻌﻤﻞ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺸﻜﻞ ﺻﺤﯿﺢ ﻓﻠﯿﺲ أﻣﺎﻣﮫ ﻓﻲ ﻃﺮﯾﻘﺔ اﻟﻘﻔﺰ إﻻ اﻟﻌﻤﻞ ﻋﻠﻰ اﻟﺒﺮﻧﺎﻣﺞ ﻟﻤﺪة ﺳﻨﺔ ﻛﺎﻣﻠﺔ وﺑﻌﺪﯾﻦ
ﯾﻌﻄﯿﻨﺎ ﻧﺴﺨﺔ ﻣﻜﺴﻮرة ﺗﻌﻤﻞ ﺑﻄﻼﻗﺔ .
اﻟﻄﺮﻗﺔ اﻟﺜﺎﻧﯿﺔ ﻟﻠﻤﮭﻨﺪس اﻟﻌﻜﺴﻲ :ھﻲ اﺳﺘﻨﺘﺎج اﻟﺮﻗﻢ ﻃﺒﻌﺎ ﺳﯿﻜﻮن ھﺬا اﻷﻣﺮ ﻣﺠﺪي ﻟﮫ أﻛﺜﺮ ﺑﺨﻼف اﻟﻌﺎدة ﻓﺒﻤﺠﺮد اﻟﻮﺻﻮل
ﻷول ﻣﻘﺎرﻧﺔ ﺑﯿﻦ رﻗﻢ اﻟﺘﻔﻌﯿﻞ و اﻟﺮﻗﻢ اﻟﻤﺪﺧﻞ ﺳﯿﻜﺸﻔﮫ إذا ﻛﺎن ذﻛﻲ ﻗﻠﯿﻼ ﺣﺴﺐ ﻣﻌﻠﻮﻣﺎﺗﻲ اﻟﻤﺘﻮاﺿﻌﺔ ﻋﻦ ھﺬه اﻷﻣﻮر.
اﻷول :أﻧﮫ ﺳﯿﻜﺸﻒ اﻟﺮﻗﻢ ﻟﻠﺠﮭﺎز اﻟﺬي ﯾﺤﺎول اﻟﻜﺴﺮ ﻋﻠﯿﮫ ﺑﺎﻟﺘﺎﻟﻲ ﯾﺠﺐ ﻋﻠﯿﮫ اﻟﺬھﺎب ﻟﻜﻞ ﺟﮭﺎز واﻟﻜﺴﺮ ﻋﻠﯿﮫ ﺑﮭﺬه اﻟﺤﺎﻟﺔ
ﻧﻀﻤﻦ أن اﻟﻨﺴﺦ اﻟﻤﻜﺴﻮرة ﺳﺘﻜﻮن أﻗﻞ ﻣﺎ ﯾﻤﻜﻦ ﻷﻧﮫ ﻣﺶ ﻣﻌﻘﻮل ﯾﺤﻤﻞ اﻟﻌﺪة وﯾﺠﻮب ﻋﻠﻰ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ﯾﺎھﻮ ﻛﺴﺮ ﺑﺮﻧﺎﻣﺞ
ﻓﻼن .
اﻟﺜﺎﻧﻲ :ھﻮ اﻟﺨﻄﯿﺮ ﻟﻮ اﺳﺘﻄﺎع ﻛﺸﻒ اﻟﻤﻌﺎدﻟﺔ ﺑﺎﻟﺘﺎﻟﻲ ﯾﺴﺘﻄﯿﻊ ﻋﻤﻞ ﻣﻮﻟﺪ أرﻗﺎم ﻣﺜﻞ اﻟﺬي ﻟﺪﯾﻨﺎ وھﺬا ﺳﻨﺤﺎول ﺗﺠﻨﺒﮫ ﺑﺘﻌﻘﯿﺪ
اﻟﻤﻌﺎدﻟﺔ اﻟﻤﺨﺼﺼﺔ ﻻﺳﺘﺨﺮاج رﻗﻢ اﻟﻤﻌﺎﻟﺞ وﺗﺸﻔﯿﺮه ﺑﺤﯿﺚ ﻻ ﯾﺴﺘﻄﯿﻊ ﻓﻚ ﻋﻤﻠﯿﺎت اﻟﺘﺸﻔﯿﺮ ﻋﻠﻰ اﻟﺮﻗﻢ.
أﺗﻮﻗﻊ ﻛﺎﻓﻲ ﻧﻈﺮي ﺣﻮل ﺗﺠﻨﺐ اﻟﻜﺴﺮ و ﻻ أﻗﻮل ﻻ أو اﻧﮫ ﺻﻌﺐ اﻟﻜﺴﺮ ﻓﺎﻟﺴﻮق أﻛﺒﺮ دﻟﯿﻞ ﻟﻜﻦ ﻛﺎن ﺳﻌﯿﻲ ﻟﺘﻮﻟﯿﺪ ﻓﻜﺮة ﺣﻮل
اﻷﻣﺮ ﻟﻠﺠﻤﯿﻊ ﺣﺘﻰ ﯾﻨﺎﻗﺸﻮه ﻓﻲ ﺑﺮاﻣﺠﮭﻢ وﯾﺴﺘﺨﺪﻣﻮه ﺑﺎﻟﺸﻜﻞ اﻷﻣﺜﻞ اﻟﺬي ﯾﻨﺎﺳﺒﮭﻢ.
www.vb4arab.com nabhan170@hotmail.com ﺑﻘﻠﻢ :ﻧﻮر ﻧﺒﮭﺎن
ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻟﻠﻌﺮب
ﻧﻌﻮد ﻟﻜﻮدﻧﺎ ﻓﻲ اﻟﺰر ﻃﺒﻌﺎ اﻟﺪاﻟﺔ ﯾﻤﻜﻨﻚ أن ﺗﺮﻣﯿﮭﺎ ﻓﻲ ﻣﻮدﯾﻮل وﺗﺨﻠﺺ ﻣﻦ رؤﯾﺘﮭﺎ أﻣﺎﻣﻚ ﻷﻧﮭﺎ ﺟﺎھﺰة وﻟﻦ ﻧﻌﺪل ﻋﻠﯿﮭﺎ وإﻧﻤﺎ
. ﺳﻨﺴﺘﺪﻋﯿﮭﺎ ﻓﻘﻂ ﻟﺬﻟﻚ أول ﺷﻲء ﻗﻢ ﺑﻘﺺ اﻟﺪاﻟﺔ و اﻟﺼﻘﮭﺎ ﻓﻲ اﻟﻤﻮدﯾﻞ
GetIdButton_Click اﻵن ﺳﻨﺠﻌﻞ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﯾﻈﮭﺮ ﺑﻤﺠﺮد ﻓﺘﺢ اﻟﻔﻮرم ﻃﺒﻌﺎ ﻓﻘﻂ ﻧﻨﻘﻞ اﻟﻜﻮد ﻣﻦ ﺣﺪث ﺿﻐﻂ اﻟﺰر
وﻟﺴﻨﺎ ﺑﺤﺎﺟﺔ ﻷﻛﺜﺮ ﻣﻦ ﺻﻨﺪوﻗﯿﻦ ﻧﺺ واﺣﺪ ﺗﺴﺠﯿﻞ واﻷﺧﺮ ﺗﻔﻌﯿﻞ واﻟﻘﯿﻢ اﻟﻮﺳﻄﻰForm1_Load إﻟﻰ ﺗﺤﻤﯿﻞ اﻟﻔﻮرم
: ﻓﯿﺼﺒﺢ اﻟﻜﻮد ﻛﺎﻷﺗﻲidp2 idp1 idp ﻧﺨﺰﻧﮭﺎ ﺿﻤﻦ ﻣﺘﻐﯿﺮات
Imports System.Management
ﻟﻮ اﻧﺘﺒﮭﺖ ﻟﻠﻜﻮد ﻓﺠﻤﻠﺔ 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
0383F9FF000006B1
16=:ODSUACEGIQ_P
49546158796883856567697173819580
ﻻﺣﻆ ﻣﻦ ﺟﺪﯾﺪ ھﺬا اﻟﺮﻗﻢ ﯾﺨﺘﻠﻒ ﻋﻦ اﻟﻘﯿﻤﺔ اﻟﺴﺎﺑﻘﺔ ﻷﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺘﺸﻮﯾﺶ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﻗﺒﻞ ﺗﺤﻮﯾﻠﮫ إﻟﻰ ﻗﯿﻢ اﻻﺳﻜﻲ ﻃﺒﻌﺎ أﻧﺖ
ﺗﺴﺘﻄﯿﻊ اﻟﺘﻔﻌﯿﻞ ﺑﺎﻟﻘﯿﻢ اﻟﺤﺮﻓﯿﺔ ﻟﻜﻦ اﻟﺮﻗﻤﯿﺔ ﺗﺒﻘﻰ أﺳﮭﻞ ﻟﻠﺘﻠﻘﯿﻦ ﻛﻤﺎ ذﻛﺮﻧﺎ أول اﻟﻤﻮﺿﻮع
ﺣﺎول اﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ اﻟﻠﻮﻧﯿﻦ اﻷﺣﻤﺮﯾﻦ ﻓﻲ رﻗﻢ اﻟﻤﻌﺎﻟﺞ ورﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻟﻦ ﺗﺴﺘﻨﺘﺞ ﺷﻲء ﻻن اﻟﺘﺸﻮﯾﺶ ﻗﻀﻰ ﻋﻠﻰ ھﺬا اﻷﻣﺮ.
ﻻﺣﻆ اﻟﻔﺮق اﻟﺴﺎﺑﻖ ﻓﻼ ﻋﻼﻗﺔ واﺿﺤﺔ أﺑﺪا ﺧﻤﺴﺔ أﺻﻔﺎر وﻛﻞ ﺷﻔﺮة ﻟﮭﺎ ﻣﻘﺎﺑﻞ ﻣﺨﺘﻠﻒ ھﻜﺬا ﯾﺼﺒﺢ اﻷﻣﺮ ﻣﺸﻔﺮ أﻛﺜﺮ
وﺑﻌﺪھﺎ اﻟﻤﻘﺎرﻧﺔ ﻓﻲ ﺣﺪث اﻟﺰر ﻟﻦ أﻛﺮر اﻟﻤﺴﺞ ﺑﻮﻛﺲ ﺑﺲ ﻟﻠﺘﻮﺿﯿﺢ ﺣﻮل اﻟﻤﻘﺎرﻧﺔ وﻟﯿﺲ ﻟﻼﺳﺘﺨﺪام.
اﻵن رﺑﻤﺎ ﺗﺘﻤﻠﻤﻞ ﻣﻦ أن رﻗﻢ اﻟﻤﻌﺎﻟﺞ ١٦رﻗﻢ ﯾﻨﺘﺞ ﻋﻨﮭﺎ رﻗﻢ ﺗﺴﺠﯿﻞ ٣٢رﻗﻢ ورﻗﻢ اﻟﺘﻔﻌﯿﻞ ﺳﯿﻜﻮن ﺑﺎﻟﺘﺎﻟﻲ ٦٤رﻗﻢ ﻓﮭﺬا ﻛﺜﯿﺮ
ﻣﻊ أﻧﻨﻲ أﻓﻀﻞ ﻃﻮل اﻟﺮﻗﻢ ﻟﻜﻨﻨﺎ ﺳﻨﻜﺘﻔﻲ ﺑﻄﻮل رﻗﻢ اﻟﺘﺴﺠﯿﻞ ٣٢رﻗﻢ وﻧﻘﻮم ﺑﺘﺼﻐﯿﺮ رﻗﻢ اﻟﺘﻔﻌﯿﻞ إﻟﻰ ١٤رﻗﻢ ﻣﺜﻼ وذﻟﻚ
ﺑﻌﻤﻠﯿﺔ اﻗﺘﺼﺎص ﻣﻦ رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﻛﺎﻵﺗﻲ وذﻟﻚ ﺑﺈﺿﺎﻓﺔ اﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ ﻓﻲ أﺧﺮ اﻟﻔﻮرم ﻟﻮود )اﻗﺘﺼﺎص ﺳﻠﺴﺔ ﻧﺼﯿﺔ(
رﻗﻢ 14اﻗﺘﺼﺎص'
))Idp1 = (Idp1.Substring(0, 14
ﻃﺒﻌﺎ ﻟﻚ اﻟﺤﺮﯾﺔ ﻓﻲ اﺧﺘﯿﺎر ﻃﻮل اﻟﺮﻗﻢ ﺑﺘﻐﯿﺮ اﻟﺮﻗﻢ ١٤إﻟﻰ أي رﻗﻢ آﺧﺮ ﻟﻜﻦ ﻃﻮل اﻟﺮﻗﻢ ﯾﺼﻌﺐ ﻋﻤﻠﯿﺔ اﻻﺷﺘﻘﺎق أﺻﻼ.
اﻵن ﯾﺴﺄل اﻟﺴﺎﺋﻞ إذا ﻗﺎم اﻟﻌﻤﯿﻞ ﺑﺎﻟﺘﻔﻌﯿﻞ ﻓﮭﻞ ﺳﺄﻗﻮل ﻟﮫ ﻣﺒﺮوك ﻓﻘﻂ أﻣﺎ ﻣﺎذا ﯾﺤﺪث
ﻋﻨﺪ إدﺧﺎل اﻟﺮﻗﻢ اﻟﺼﺤﯿﺢ ﺳﻨﻘﻮم ﺑﺘﺨﺰﯾﻨﮫ وأﻛﺮر ﻟﻚ اﻟﺤﺮﯾﺔ ﻓﻲ اﺧﺘﯿﺎر ﻣﻮﺿﻊ اﻟﺘﺨﺰﯾﻦ وﻻ ﯾﮭﻢ ﻇﮭﻮر اﻟﺮﻗﻢ ﻷﻧﮫ ﺻﺤﯿﺢ
وﻧﺤﻦ ﻣﻦ زودﻧﺎه ﺑﮫ ﻟﺬﻟﻚ ﺳﺄﻟﺠﺄ إﻟﻰ Settings
ﻧﺘﺠﮫ إﻟﻰ Solution Explorerوﻧﻀﻐﻂ ﻋﻠﻰ اﻟﻤﺸﺮوع ﺑﺎﻟﺰر اﻷﯾﻤﻦ وﻧﺨﺘﺎر Propertiesوﻧﺬھﺐ ﻟﺘﺒﻮﯾﺐ Settings
وﻧﻀﯿﻒ إﻟﯿﮫ ﻣﺘﻐﯿﺮ ﺟﺪﯾﺪ ﺳﺄﺳﻤﯿﮫ nameuserوﻟﯿﺲ numactﺷﻮﯾﺔ ﺗﻤﻮﯾﮫ ﯾﺒﺪو اﻟﺘﺠﻨﯿﺪ ﻣﺆﺛﺮ ﺑﻲ ﻛﺜﯿﺮ.
اﺳﻢ اﻟﻤﺘﻐﯿﺮ
Name = nameuser
ﻧﻮع اﻟﻤﺘﻐﯿﺮ
Type = String
ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ
= Value
ﻻﺣﻆ اﻟﻜﻮد اﻟﺴﺎﺑﻖ ﻓﻲ ﺣﺎل اﻟﺘﺴﺎوي ﻓﺈﻧﮫ ﯾﺴﻨﺪ اﻟﺮﻗﻢ إﻟﻰ اﻹﻋﺪادات ﺛﻢ ﯾﺤﻔﻈﮭﺎ ﻓﻘﻀﯿﺔ اﻟﺘﻔﻌﯿﻞ ﻛﻠﮭﺎ ھﻨﺎ ھﻲ ھﻞ اﻟﺮﻗﻢ
ﻣﺘﺴﺎوي إذا ﻛﺎن اﻟﺠﻮاب ﻧﻌﻢ ﻓﻌﻨﺪھﺎ ﻻ ﯾﻔﻌﻞ اﻟﻤﯿﺰات ﺑﻞ ﯾﺤﻔﻆ اﻟﺮﻗﻢ ﻓﻘﻂ وﻋﻤﻠﯿﺔ اﻟﺘﻔﻌﯿﻞ ﻓﻲ أﻣﻜﻨﺔ أﺧﺮى ﺑﻌﯿﺪا ﻋﻦ
ﻣﺮﻛﺰ اﺧﺘﺒﺎر اﻟﺮﻗﻢ اﻟﻈﺎھﺮ ﻟﻠﻌﻤﯿﻞ و ﺑﺬﻟﻚ ﻟﻦ ﯾﻈﮭﺮ ﻟﻠﻌﻜﺴﻲ اﻷﻣﺮ واﺿﺢ ﻛﺎﻟﻌﺎدة .
اﻟﻤﻮدﯾﻮل :
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
:واﻟﺘﺼﻤﯿﻢ اﻟﺘﺎﻟﻲ
اﻧﺘﮭﻰ أﻣﺮ اﻟﺘﻔﻌﯿﻞ إذا ﺧﻄﺄ ﻟﻦ ﯾﻘﻮم ﺑﺄي إﺟﺮاء ﻣﻨﻌﺎ ﻹﺟﺮاء اﻟﺘﺠﺎرب ﻣﻦ ﻗﺒﻞ اﻟﻤﻌﺘﺪﯾﻦ و إذا ﺻﺢ ﯾﺤﻔﻆ اﻟﺮﻗﻢ ﻓﻘﻂ
Imports System.Management
ﻓﻔﻲ أي ﻓﻮرم أو ﻓﻮرﻣﺎ ﻣﺤﺪدة ﻋﻠﻰ ﻣﺰاﺟﻚ ﺳﯿﺘﻢ اﺳﺘﻨﺘﺎج اﻟﺮﻗﻢ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﺳﺎﺑﻘﺎ ﻓﻲ ﻓﻮرم اﻟﺘﻔﻌﯿﻞ وﺣﻔﻆ اﻟﺮﻗﻢ ﻓﻲ ﻣﺘﻐﯿﺮ
ﻛﻤﺎ ﺗﻼﺣﻆ ﻣﻦ اﻟﻜﻮد أﺧﺮ ﻗﯿﻤﺔ ﻛﺎﻧﺖ رﻗﻢ اﻟﺘﻔﻌﯿﻞ اﻟﻤﻜﻮن ﻣﻦ ١٤رﻗﻢ واﻟﻤﺘﻐﯿﺮ ھﻮ Idp1
اﻟﻤﻘﺎرﻧﺔ ﻛﺎﻟﺘﺎﻟﻲ
If My.Settings.nameuser = Idp1 Then
'do thing
Else
'end
End If
واﻵن ﺿﻊ اﻟﻤﻘﺎرﻧﺔ أﯾﻨﻤﺎ ﺗﺮﯾﺪ ﻓﻲ زر اﻟﻄﺒﺎﻋﺔ ﻓﻲ زر اﻟﺒﺤﺚ ﻓﻲ ﺗﺤﻤﯿﻞ ﻓﻮرم اﻟﻤﺒﯿﻌﺎت ﻓﻲ ....اﻟﺦ ....
واﺧﺘﺮ اﻹﺟﺮاء اﻟﻤﻨﺎﺳﺐ ﺳﻮاء ﺑﺈﻏﻼق اﻟﺒﺮﻧﺎﻣﺞ أو ﺑﺘﻌﻄﯿﻞ ﺑﻌﺾ اﻷزرار أو ﺑﺈﺧﻔﺎء ﻧﻮاﻓﺬ أو ....اﻟﺦ.....
وﻛﻞ ﻣﺎ ﻛﺜﺮت اﻟﻤﻘﺎرﻧﺎت ﺻﺎر اﻟﺒﺮﻧﺎﻣﺞ أﺑﻄﺄ ﻋﻔﻮاً أﻗﺼﺪ ﺻﺎر اﻷﻣﺮ ﻣﺒﮭﻢ أﻛﺜﺮ )ﻣﻠﺢ وﻓﻠﻔﻞ(
ﻋﺪاك ﻋﻨﺪ وﺿﻊ ﻣﻘﺎرﻧﺎت زﻣﻨﯿﺔ) .ﺷﮭﺮﯾﺔ ...ﺳﺎﻋﯿﺔ ...ﺑﻌﺪ ١٠اﺳﺘﻌﻤﺎﻻت ...اﻟﺦ (.....ﺑﻤﺤﺾ إرادﺗﻚ .
ﻣﺪاﺧﻠﺔ :
ﺣﺎول أﯾﻀﺎ ﺗﻔﺤﺺ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻷﺧﯿﺮ اﻟﺬي ﺳﻨﺨﺰن ﻓﯿﮫ رﻗﻢ اﻟﺘﻔﻌﯿﻞ ﺑﺤﯿﺚ إذا ﻛﺎﻧﺖ ﻓﺎرﻏﺔ اﻟﺨﺮوج ﻣﻦ اﻹﺟﺮاء وﻋﺪم
اﻟﺘﻔﻌﯿﻞ أو اﺳﺘﺨﺪم .Try
ﻷﻧﮫ رﺑﻤﺎ ﺑﻌﺪ ﻋﺸﺮﯾﻦ ﺳﻨﺔ ﯾﺨﺮج ﻧﻈﺎم وﯾﻨﺪوز ﻻ ﯾﺪﻋﻢ اﻟﻤﻜﺘﺒﺔ ﻓﯿﻜﻮن اﺳﺘﺨﺮاج رﻗﻢ اﻟﻤﻌﺎﻟﺞ ﺧﺎﻟﻲ وﺗﺘﻢ اﻟﻤﻘﺎرﻧﺔ ﻣﻊ ﻗﯿﻤﺔ
ﺧﺎﻟﯿﺔ ﻓﺘﺘﺴﺎوى اﻟﻘﯿﻤﺔ وﯾﺘﻢ اﻟﺘﻔﻌﯿﻞ أو ﯾﻮﻟﺪ ﺧﻄﺄ .
وھﻮ ﺟﺰء ﻣﻦ ﻣﺸﺮوﻋﻨﺎ ﻓﮭﻮ رﻗﻢ اﻟﺘﺴﺠﯿﻞ ﻣﺸﻮش وﻣﺤﻮل ﻻﺳﻜﻲ وﻣﻘﺘﺺ ١٤رﻗﻢ
ﻧﻨﺸﺄ ﻣﺸﺮوع ﺟﺪﯾﺪ وﻧﻀﯿﻒ ﻓﯿﮫ ﻣﻮدﯾﻮل ﻧﻀﻊ ﻓﯿﮫ اﻟﺪوال اﻟﺴﺎﺑﻘﺔ ﻛﻤﺎ ﻓﻲ اﻟﺘﺴﺠﯿﻞ ﻛﺎﻟﻤﻮدﯾﻮل اﻟﺴﺎﺑﻖ ﺗﻤﺎﻣﺎً
اﻟﺘﺼﻤﯿﻢ :
ﻃﺒﻌﺎ ﻻ ﺣﺎﺟﺔ ﻟﻠﺸﺮح ﻓﺎﻷﻣﺮ واﺿﺢ ﻣﻤﺎ ﺳﺒﻖ وﻣﻦ اﻟﻜﻮد )ﻓﻘﻂ ﺑﻌﺾ اﻟﺘﻌﺪﯾﻼت ﻋﻠﻰ رﻗﻢ اﻟﺘﺴﺠﯿﻞ(
. وﺑﺬﻟﻚ ﻧﻜﻮن ﻗﺪ ﻧﺎﻗﺸﻨﺎ اﻟﻤﻮﺿﻮع ﺑﻄﺮﯾﻘﺔ ﻣﻄﻮﻟﺔ ﺑﻌﺾ اﻟﺸﻲء ﻟﺬﻟﻚ ﻣﻌﺬرة ﻣﻨﻲ إﻟﯿﻜﻢ
C#
:اﻟﻜﻮد
using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
namespace WMI_ProcessorInformation
{
public class WMI_Processor_Information
{
//اﻟﺘﺸﻮﯾﺶ
public static string Obfuscate(string origText)
{
byte[] bytes = Encoding.Unicode.GetBytes(origText);
int num2 = bytes.Length - 1;
for (int i = 0; i <= num2; i++)
{
}
وﻓﻲ اﻟﺨﺘﺎم: