ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 888|ตอบกลับ: 0

[VB6] โค้ดในการกำหนดให้ไฟล์ EXE สามารถ Run As Administrator ได้

[คัดลอกลิงก์]

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
5973



ตั้งแต่ Windows 10 มันสร้างความปลอดภัยที่สูงขึ้นมาก ทำให้ผู้ใช้ต้องมาคลิ๊กเมาส์ขวาเพื่อสั่ง Run As Administrator หรือต้องไปกำหนดในคุณสมบัติ (Properties) เพื่อตั้งค่า Compatibility ให้ Run this program as an administrator ซึ่งยุ่งยากเสียเวลาต่อผู้ใช้งาน แต่เราสามารถกำหนดสิ่งนี้ได้โดยตรงผ่านโค้ดโปรแกรม ซึ่งจะต้องใช้ WinAPI32 เพื่อทำการ Read/Write เข้าสู่ระบบ Registry อาจจะดูยากสำหรับหลายๆคนในการทำความเข้าใจ ก็ค่อยๆเรียนรู้กันไป เพราะเจ้าตัว WinAPI32 นี่แหละคือพลังอันล้ำเลิศของ VB6 แม้แต่ .Net Framework ในปัจจุบันยังต้องพึ่งพามันอยู่เลยครับ ...

[คำเตือน: อย่าลืม Make EXE ก่อนด้วยครับ]

มาดูโค้ดในส่วนฟอร์มหลัก
  1. Option Explicit

  2. Private Sub Form_Load()
  3.     Call RunAsAdministrator
  4. End Sub

  5. '// ปรับให้ Run As Administrator
  6. Function RunAsAdministrator()
  7.     Dim strValue As String
  8.     Dim strProgramName As String
  9.     Dim SubKey As String
  10.     SubKey = "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
  11.     strProgramName = App.Path & "\RunAsAdmin.exe"
  12.     '// หรือกำหนด strProgramName = "C:\ตำแหน่งโปรเจค\RunAsAdmin.exe"
  13.     strValue = "~ RUNASADMIN"
  14.    
  15.     Call SetKeyDataValue(&H80000001, SubKey, 1, strProgramName, strValue)

  16. End Function
คัดลอกไปที่คลิปบอร์ด

โค้ดในส่วนของ Module
  1. Option Explicit

  2. '// -----------------------------------------------------------------------------------------------------
  3. '// Windows API Declarations for Read And Write to the Registry.
  4. '// -----------------------------------------------------------------------------------------------------
  5. Public Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" ( _
  6.     ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
  7.     ByVal samDesired As Long, ByRef phkResult As Long) As Long

  8. Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" ( _
  9.     ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

  10. Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" ( _
  11.     ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
  12.     ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

  13. Public Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" ( _
  14.     ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
  15.     ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long

  16. Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" ( _
  17.     ByVal hKey As Long, ByVal lpValueName As String) As Long

  18. Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" ( _
  19.     ByVal hKey As Long, ByVal lpSubKey As String) As Long

  20. Public Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long

  21. Public Const KEY_ALL_ACCESS = &H2003F

  22. Public Sub SetKeyDataValue(RegKeyRoot As Long, RegKeyName As String, KeyDataType As Long, KeyValueName As String, KeyValueDate As Variant)
  23.    
  24.     Dim OpenKey As Long, SetValue As Long, hKey As Long
  25.    
  26.     OpenKey = RegOpenKeyEx(RegKeyRoot, RegKeyName, 0, KEY_ALL_ACCESS, hKey)
  27.    
  28.     If (OpenKey <> 0) Then Call RegCreateKey(RegKeyRoot, RegKeyName, hKey)
  29.    
  30.     Select Case KeyDataType
  31.         Case 1:
  32.             SetValue = RegSetValueEx(hKey, KeyValueName, 0&, KeyDataType, ByVal CStr(KeyValueDate & Chr$(0)), Len(KeyValueDate))
  33.         Case 3:
  34.             SetValue = RegSetValueEx(hKey, KeyValueName, 0&, KeyDataType, ByVal CStr(KeyValueDate & Chr$(0)), Len(KeyValueDate))
  35.         Case 4:
  36.             SetValue = RegSetValueEx(hKey, KeyValueName, 0&, KeyDataType, CLng(KeyValueDate), 4)
  37.     End Select
  38.    
  39.     SetValue = RegCloseKey(hKey)
  40.    
  41. End Sub
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ดต้นฉบับ VB6 ได้ที่นี่ ...


ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-3-29 22:28 , Processed in 0.149628 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้