เรื่อง VB กับการ check HDD ตอบทีครับ
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 411   7
URL.หัวข้อ / URL
เรื่อง VB กับการ check HDD ตอบทีครับ

คืองี้ครับผมได้ดูโค๊ตที่ให้มาเกี่ยวกะ การดู Serieal Number ของ HDD แล้วแต่ใช้ไม่ได้นะครับ
คือผมอยากจะใช้จริงครับ แล้วอีกอย่าง อยากได้โค๊ตและการอธิบายด้วยอะครับ รบกวนอย่างแรงครับ
อ้อ อีกอย่างนะครับ คือ S/N ของ HDD เขาจะเป็นเลขฐาน 16 แล้วเราจะต้องใช้ในการคำนวน มีคำสั่งแปลงเป็นฐาน 10 ด้วยก็ดีนะครับ ขอบคุณมากๆ ครับผม คอนเซปที่ต้องการก็ตามที่บอกมาครับ
ส่วนรูปร่างก็คือ มี Text1 เป็นตัวแสดงค่า S/N HDD มีปุ่ม OK พอกดก็ให้โชว์ที่ TEXT1 อะครับ
ผมถามไป แล้วมีคนตอบมาแบบนี้ครับ.......

ผมได้ส่งโค๊ดไว้ในกระทู้แล้วนี่นา หรือคุณใช้ฟังก์ชั่นไม่เป็น?
ผมลองใช้ใน vb หรือ access ก็ใช้ได้ไม่มีปัญหา

ให้คุณสร้าง module ใหม่ขึ้นมา เอาโค๊ดนี้ไปวาง แล้วเซฟชื่ออะไรก็ได้

Public Declare Function GetVolumeInformation& Lib "kernel32" _
Alias "GetVolumeInformationA" (ByVal lpRootPathName _
As String, ByVal pVolumeNameBuffer As String, ByVal _
nVolumeNameSize As Long, lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, lpFileSystemFlags As _
Long, ByVal lpFileSystemNameBuffer As String, ByVal _
nFileSystemNameSize As Long)

Public Const MAX_FILENAME_LEN = 256


Public Function GetDriveSerialNumber(Drive As String) As String
'ตรวจสอบ Harddisk Serial ID
Dim No&, s As String * MAX_FILENAME_LEN
Call GetVolumeInformation(Drive + ":\", s, MAX_FILENAME_LEN, _
No, 0&, 0&, s, MAX_FILENAME_LEN)
GetDriveSerialNumber = Mid(Hex(No), 1, 4) & "-" & Mid(Hex(No), 5, 4)
End Function


ที่ฟอร์ม สร้างเท๊กซบ๊อกมา แล้วเขียนโค๊ดตามนี้

text1.text = GetDriveSerialNumber("C:")

มันจะคืนค่าซีเรี่ยลของไดรฟ์ซี กลับมาเป็น string


เรื่องการแปลงเลขฐาน10 ผมว่าคุณน่าจะเขียนฟังก์ชั่นแปลงได้นี่นา ไม่น่ายาก


******แต่ผมเอาไปทำมีปัญหาแบบนี้ครับ********

ผมเอาไปรองกะ VB แล้วไอ้ตรงโมดูลอะครับ จะไปวางจรงไหนของ VB รบกวนแนะนำทีครับ

มัน Error บรรทัดนี้ครับ Public Const MAX_FILENAME_LEN = 256
แล้วอีกอันที่สงสัย text1.text = GetDriveSerialNumber("C:")
ไม่ทราบว่าตรง C: ต้องเป็น C:\ หรือป่าวครับ
****************************************
รบกวนใครทราบ หรืออาจารย์ก็ได้บอกทีครับ
****************************************


7 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R04200
ให้คลิกที่ Insert Module แล้วก็วางโค้ดนั้นลงไปครับ

ส่วน c: ไม่ต้องใส \ ลงไปครับ หรือไม่ต้องใส่ : ด้วยก็ได้

ตอนนี้ผมไม่มี VB อยู่ในเครื่องฯ จึงยังไม่ได้ทดสอบ แต่คงใช้ได้เหมือนกันครับ
2 @R04203
หมายเหตุ มีการเพิ่มเติม code เดิมโดยใช้ Function Hex2Dec
ใช้Code จาก Malcolm Stewart ,Susan Vinson(Microsoft Corporation)

ให้เริ่มแบบนี้ใน VB6 ครับ==================

ไปที่เมนูด้านบน
คลิก project
คลิก add module
คลิก open
จะมีหน้าต่างว่างๆ เปิดรออยู่

ลากคลุม แล้ว copy Code ด้านล่างนี้ ==================================

Public Declare Function GetVolumeInformation& Lib "kernel32" _
Alias "GetVolumeInformationA" (ByVal lpRootPathName _
As String, ByVal pVolumeNameBuffer As String, ByVal _
nVolumeNameSize As Long, lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, lpFileSystemFlags As _
Long, ByVal lpFileSystemNameBuffer As String, ByVal _
nFileSystemNameSize As Long)

Public Const MAX_FILENAME_LEN = 256


Public Function GetDriveSerialNumber(Drive As String) As String
Dim No&, s As String * MAX_FILENAME_LEN
Call GetVolumeInformation(Drive + ":\", s, MAX_FILENAME_LEN, _
No, 0&, 0&, s, MAX_FILENAME_LEN)
GetDriveSerialNumber = Hex2Dec(Mid(Hex(No), 1, 4)) & "-" & Hex2Dec(Mid(Hex(No), 5, 4))
End Function


Public Function Hex2Dec(strValue As String) As Long
On Error GoTo CnvrtErr

If Left(strValue, 2) <> "&H" Then strValue = "&h" & strValue
If InStr(1, strValue, ".") Then strValue = Left(strValue, (InStr(1, strValue, ".") - 1))
Hex2Dec = CLng(strValue)
Exit Function

CnvrtErr:
Hex2Dec = 0

End Function


==========================














แล้ว Paste ลงไปในพื้นที่ว่างๆ ของ หน้าต่าง Module ที่ได้เปิดรออยู่

แล้วให้กลับไปที่ Form

ลากวาง textbox ลงไป ใน Form

เสร็จแล้วให้ Double Click ที่พื้นที่สีเทาของตัว Form
ไม่ใช่ Double Click เข้าไปใน textbox นะครับ


ก็จะได้ Code นี้ขึ้นมา

Private Sub Form_Load()

End Sub

ให้พิมพ์เพิ่มเข้าไปให้ได้ข้อความดังนี้


==================================

Private Sub Form_Load()

Text1.Text = GetDriveSerialNumber("C")

End Sub

================================== จบ.


ถ้าอยากให้แสดงเป็นเลขฐาน 16 ให้เปลี่ยนcode ที่บรรทัด

GetDriveSerialNumber = Hex2Dec(Mid(Hex(No), 1, 4)) & "-" & Hex2Dec(Mid(Hex(No), 5, 4))

=================================
เปลี่ยนเป็น

GetDriveSerialNumber = Mid(Hex(No), 1, 4) & "-" & Mid(Hex(No), 5, 4)






3 @R04242
ขอบคุณมากครับผม ใช้ได้แล้วครับ
คนไทยจะเจริญได้เพราะช่วยกีน ขอบคุณจริงๆ ครับผม
4 @R04257
คุณ VB ริสซึ่ม

ผมไม่รู้จริงๆ ว่าคุณคงเป็นมือใหม่ VB หรือเปล่า ผมอาจจะตอบคำถามยากเกินไปหรือเปล่าเอ่ย คุณต้องบอกผมสักนิดว่าคุณยังใหม่กับตรงนี้ ผมยินดีที่จะอธิบายละเอียดเลยครับ

ป.ล. ไม่ใช่ตอบคำถามก่อกวนหรือล่อเป้านะครับ อย่าคิดมาก :)

5 @R04258
มะเปงไรครับ หุหุหุ ใหม่ก็ใหม่ครับ
อย่างที่คุณ dome บอกครับ คนฉลาดมักไม่พูดถึงความฉลาดของตนเอง
มีเพียงคนโง่เท่านั้นที่พูด และอวดว่าฉลาด พึงสังวอนเอาไว้ว่ามีคนโง่ และฉลาดกว่าเรามากมาย อย่าหยุด และพอใจกับความฉลาดของตนเอง

ผมขอขอบคุณอีกครั้งกับคำตอบเหล่านี้ ขอบคุณคนที่ตอบ และคนที่สนใจ ขอบคุณเวปนี้ ขอบคุณคนทำเวปนี้มากๆๆ ครับ.......สังคมดีได้เพราะมีคนอย่างนี้ครับ............................ ขอบคุณ คุณ Dome ที่แนะนำ........ หุหุหุ (เอ้ะเราโง่ หรือฉลาดหว่า สับสน)
6 @R04273
ก็ขอให้การตอบของคุณ vb rism ในความเห็นที่ 5 ตอบด้วยความจริงใจไม่ประชดกันนะครับ ยินดีช่วยเหลือกันเลย คือ ผมอาจตอบคำถามเกี่ยวกับคำถามของคุณไม่ลงรายละเอียดมาก เพราะทำไม?

เพราะทุกวันนี้ ผมพัฒนาโปรแกรมเล็กๆ ของผมขายด้วย access แต่ผมไม่ได้ใช้ VB ไงครับ แต่คำถามที่คุณถาม คุณถามถึงการใช้ใน VB ซึ่ง VBA ใน access เป็นเพียงแค่เสี้ยวหนึ่งที่ VB สามารถทำได้อยู่แล้ว ผมบอกได้เลยว่า ความสามารถของ VB นั้นมากกว่า Access ที่ผมใช้หากินมากนัก แล้วฟังก์ชั่นที่ผมตอบคำถามหรือแนะนำคุณเนี่ย มันก็เป็น API ของ windows นะครับ

ซึ่ง API มันเป็นแกนกลางของwindow ที่ทุก compiler ที่พัฒนาภายใต้ windows platform สามารถเรียกใช้ได้

ผมเองก็อาจคาดเดาว่า คุณเองคงเป็น VB บ้างพอสมควร เลยตอบคำถามแบบนั้นไป คือไม่ได้ลงรายละเอียดมากนัก

ผมขอออกตัวว่า ผมไม่ได้ฉลาดกว่าใครทั้งนั้น ไม่มีใครโง่กว่าใครครับ ทั้งผมและคุณ VB rism ก็เช่นกัน ผมยังต้องแวะเวียนมาขอคำปรึกษาจากท่านอาจารย์ในเว็บบอร์ดนี้ด้วยซ้ำไป
7 @R04328
ผมขอบคุณ คุณโดมด้วยใจจริงครับ และอยากให้คนไทยเป็นแบนนี้นะครับ หุหุหุ
อาจใช้คำพูดมาถูก อาจทำให้เข้าใจผิด ผมขอโทษคุณโดมเป็นอย่างยิ่งครับ
.........หนึ่งประสพการณ์ หนึ่งความคิดของเราอาจใช้เวลานานกว่าจะค้นเจอ แต่เอามาบอกกล่าว เล่าแจ้งให้ผู้อื่นฟังเพื่อให้ความรู้เขา อันนี้เขาเรียกว่าทาน ดังนั้นผมเหงว่าทุกคนที่ตอบ ที่ถามนั้นได้บุญ และได้ทำทานโดยการให้ความรู้ ขอบคุณเวปนี้ ขอบคุณคุณโดม...........ขอบคุณครับ(ตะโกนดังมากๆๆ)
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.1262s