تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
لا استطيع الحصول على الرقم التسلسلي للقرص C
#1
سلام الله عليكم جميعا

استخدم كود لجلب الرقم التسلسلي للقرص الصلب C ولكن يجلب لي رقم لقرص اخر

كود :
Operators.ConditionalCompareObjectEqual(current("Tag"), "\\.\PHYSICALDRIVE0", False) Then

وحسب ما افهم ان PHYSICALDRIVE0 المفترض ان تكون للقرص الاول او الذي عليه النظام

وشكرا
الرد }}}
تم الشكر بواسطة:
#2
PHP كود :
Imports System.Management

Public Function GetSerialNumber() As String
    Dim disk 
As ManagementObject = New ManagementObject("Win32_LogicalDisk.DeviceID=""C:""")
 
   disk.Get()
 
   Return disk("VolumeSerialNumber").ToString()
End Function 

يمكنك استدعاءه كالتالي :
PHP كود :
Dim serialNumber As String GetSerialNumber()
MessageBox.Show("C drive serial number: " serialNumber
الرد }}}
تم الشكر بواسطة: kebboud , kebboud , ابو محمد محمد محمد
#3
جزاك الله كل خير ساحاول التغيير فيه فيبدو انه يجلب الرقم المنطقي وليس الحقيقي للقرص الصلب
الرد }}}
تم الشكر بواسطة:
#4
(25-04-23, 11:18 PM)ابو محمد محمد محمد كتب : جزاك الله كل خير ساحاول التغيير فيه فيبدو انه يجلب الرقم المنطقي وليس الحقيقي للقرص الصلب

بالنسبة للهارديسك يوجد فيه النالي :
1. disk id
2. disk serial number
3. disk modle

وهذه فنكشين تجلبهم 

كود :
Public diskId As String 'Digital ID
   Public diskSerialNumber As String 'This we will call it the serial number for the time being.
   Public diskModel As String 'serial number

Public Sub Get_Hard_Serial()
       Dim cmicWmi As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")

       For Each cmicWmiObj As ManagementObject In cmicWmi.Get
           diskId = cmicWmiObj("signature")
           diskSerialNumber = cmicWmiObj("serialnumber")
           diskModel = cmicWmiObj("Model")
       Next
   End Sub
الرد }}}
تم الشكر بواسطة:
#5
جزاك الله كل خير

جربتها من قبل ولا تفلح المشكلة تحدث عندما تكون هناك العديد من الاقراص بالكمبيوتر ويكون القرص C الذي عليه النظام ليس هو الاول في التسجيل
فمثلا هذا الاستعلام

كود :
SELECT * FROM Win32_DiskDrive  WHERE Index = '0'

لن يفيد لان القرص الذي عليه النظام ليس هو القرص الاول والنظام يفهرسه على انه الثاني او الثالث

ولهذا الخيار هو الاستعلام بحرف القرص وليس الفهرس

والحل هنا

كود :
class Program
{
   static void Main(string[] args)
   {
       const string drive = "C:";

       Console.WriteLine("Drive {0}'s Model Number is {1}", drive, GetModelFromDrive(drive));
   }

   public static string GetModelFromDrive(string driveLetter)
   {
       // Must be 2 characters long.
       // Function expects "C:" or "D:" etc...
       if (driveLetter.Length != 2)
           return "";

       try
       {
           using (var partitions = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" + driveLetter +
                                            "'} WHERE ResultClass=Win32_DiskPartition"))
           {
               foreach (var partition in partitions.Get())
               {
                   using ( var drives = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" +
                                                        partition["DeviceID"] +
                                                        "'} WHERE ResultClass=Win32_DiskDrive"))
                   {
                       foreach (var drive in drives.Get())
                       {
                           return (string) drive["Model"];
                       }
                   }
               }
           }
       }
       catch
       {
           return "<unknown>";
       }

       // Not Found
       return "<unknown>";
   }
}

ولكنه سي شارب ويحتاج الى تحويل وحولته عن طريق احد المواقع كالتالي:

كود :
Class Program
   Private Shared Sub Main(ByVal args As String())
       Const drive As String = "C: "
       Console.WriteLine("Drive {0}'s Model Number is {1}", drive, GetModelFromDrive(drive))
   End Sub

   Public Shared Function GetModelFromDrive(ByVal driveLetter As String) As String
       If driveLetter.Length <> 2 Then Return ""

       Try

           Using partitions = New ManagementObjectSearcher("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" & driveLetter & "'} WHERE ResultClass=Win32_DiskPartition")

               For Each Partition In partitions.[Get]()

                   Using drives = New ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & Partition("DeviceID") & "'} WHERE ResultClass=Win32_DiskDrive")

                       For Each drive In drives.[Get]()
                           Return CStr(drive("Model"))
                       Next
                   End Using
               Next
           End Using

       Catch
           Return "<unknown>"
       End Try

       Return "<unknown>"
   End Function
End Class


ولكن يوجد خطاء يقول الـ Partition غير معروف
مع العلم مستخدمي سي شارب يقولون انه يعمل
 التحويل ينقص شئ ما
الرد }}}
تم الشكر بواسطة:
#6
اذا كانت المشكلة بتحويل الكود .. فالأمر بسيط جداً

وهذا هو الكود بعد التحويل :
كود :
Public Shared Function GetModelFromDrive(driveLetter As String) As String
    Dim result As String
    If driveLetter.Length <> 2 Then
        result = ""
    Else
        Try
            Using partitions As ManagementObjectSearcher = New ManagementObjectSearcher("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" + driveLetter + "'} WHERE ResultClass=Win32_DiskPartition")
                For Each partition As ManagementBaseObject In partitions.[Get]()
                    Dim str As String = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"
                    Dim obj As Object = partition("DeviceID")
                    Using drives As ManagementObjectSearcher = New ManagementObjectSearcher(str + If((obj IsNot Nothing), obj.ToString(), Nothing) + "'} WHERE ResultClass=Win32_DiskDrive")
                        Using enumerator2 As ManagementObjectCollection.ManagementObjectEnumerator = drives.[Get]().GetEnumerator()
                            If enumerator2.MoveNext() Then
                                Dim drive As ManagementBaseObject = enumerator2.Current
                                Return CStr(drive("Model"))
                            End If
                        End Using
                    End Using
                Next
            End Using
        Catch
            Return "<unknown>"
        End Try
        result = "<unknown>"
    End If
    Return result
End Function

والاستدعاء يكون بالأمر :
كود :
MsgBox("Drive C:'s Model Number is  " & GetModelFromDrive("C:"),, "The Serial :")

الكود جربته عندي وهو يعمل #C  و VB

فهذا الكود هو يجلب الرقم التسلسلي للهارد ديسك الذي تقوم بتحديد القرص منه وليس الرقم التسلسلي للقرص نفسه..

لكن هل هذا الكود الذي تريده ويلبي طلبك  أم لا ؟؟ فهذا شأنك..

بالتوفيق ..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: ابو محمد محمد محمد
#7
جزاك الله خير

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  ارجو التعديل على الدالة المرفقة - الدالة تعيد الرقم -1 new_programer 4 169 20-03-24, 01:18 PM
آخر رد: تركي الحلواني
  [سؤال] كود اظهار رساله في حال وجود الرقم في اكثر من عمود مبرمج صغير 1 6 448 09-01-24, 01:41 AM
آخر رد: Taha Okla
  خطأ عن مقارنه الرقم التفعيل Ashraf Elafify 2 289 31-12-23, 11:49 PM
آخر رد: Ashraf Elafify
  كود لعدم تكرار الرقم في قاعدة البيانات yossefsaad370 1 382 28-10-23, 10:29 AM
آخر رد: atefkhalf2004
  كود لا يكرر الرقم yossefsaad370 1 238 26-10-23, 09:54 AM
آخر رد: قناص المدينة
  تكرار الرقم القومى salah525 1 300 02-10-23, 10:14 PM
آخر رد: سالم العنزي
  كيف الحصول على قيمة الخلية بعد تحديد الصف في datagridview؟ hazim1 2 575 06-08-23, 01:12 AM
آخر رد: hazim1
  [سؤال] كيف استطيع ان اعمل مثل هذه التبويبات في الواجهة كما في المرفق ادناه aYHAMMMS 0 335 14-07-23, 10:21 AM
آخر رد: aYHAMMMS
  الصفر في شمال الرقم Hassan.syria 2 507 30-06-23, 12:14 AM
آخر رد: أبو خالد الشكري
  [VB.NET] كود لاظهار الاسماء بدالالة الرقم عبدالرحمن الأصبحي 1 490 14-01-23, 06:02 AM
آخر رد: سعود

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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم