[VB6] โค้ดในการกำหนดให้ไฟล์ EXE สามารถ Run As Administrator ได้
http://www.g2gsoft.com/webboard/images/VB6/runasadmin.pngตั้งแต่ Windows 10 มันสร้างความปลอดภัยที่สูงขึ้นมาก ทำให้ผู้ใช้ต้องมาคลิ๊กเมาส์ขวาเพื่อสั่ง Run As Administrator หรือต้องไปกำหนดในคุณสมบัติ (Properties) เพื่อตั้งค่า Compatibility ให้ Run this program as an administrator ซึ่งยุ่งยากเสียเวลาต่อผู้ใช้งาน แต่เราสามารถกำหนดสิ่งนี้ได้โดยตรงผ่านโค้ดโปรแกรม ซึ่งจะต้องใช้ WinAPI32 เพื่อทำการ Read/Write เข้าสู่ระบบ Registry อาจจะดูยากสำหรับหลายๆคนในการทำความเข้าใจ ก็ค่อยๆเรียนรู้กันไป เพราะเจ้าตัว WinAPI32 นี่แหละคือพลังอันล้ำเลิศของ VB6 แม้แต่ .Net Framework ในปัจจุบันยังต้องพึ่งพามันอยู่เลยครับ ...
[คำเตือน: อย่าลืม Make EXE ก่อนด้วยครับ]
มาดูโค้ดในส่วนฟอร์มหลัก
Option Explicit
Private Sub Form_Load()
Call RunAsAdministrator
End Sub
'// ปรับให้ Run As Administrator
Function RunAsAdministrator()
Dim strValue As String
Dim strProgramName As String
Dim SubKey As String
SubKey = "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
strProgramName = App.Path & "\RunAsAdmin.exe"
'// หรือกำหนด strProgramName = "C:\ตำแหน่งโปรเจค\RunAsAdmin.exe"
strValue = "~ RUNASADMIN"
Call SetKeyDataValue(&H80000001, SubKey, 1, strProgramName, strValue)
End Function
โค้ดในส่วนของ Module
Option Explicit
'// -----------------------------------------------------------------------------------------------------
'// Windows API Declarations for Read And Write to the Registry.
'// -----------------------------------------------------------------------------------------------------
Public Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" ( _
ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
ByVal samDesired As Long, ByRef phkResult As Long) As Long
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" ( _
ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" ( _
ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" ( _
ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long
Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" ( _
ByVal hKey As Long, ByVal lpValueName As String) As Long
Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" ( _
ByVal hKey As Long, ByVal lpSubKey As String) As Long
Public Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
Public Const KEY_ALL_ACCESS = &H2003F
Public Sub SetKeyDataValue(RegKeyRoot As Long, RegKeyName As String, KeyDataType As Long, KeyValueName As String, KeyValueDate As Variant)
Dim OpenKey As Long, SetValue As Long, hKey As Long
OpenKey = RegOpenKeyEx(RegKeyRoot, RegKeyName, 0, KEY_ALL_ACCESS, hKey)
If (OpenKey <> 0) Then Call RegCreateKey(RegKeyRoot, RegKeyName, hKey)
Select Case KeyDataType
Case 1:
SetValue = RegSetValueEx(hKey, KeyValueName, 0&, KeyDataType, ByVal CStr(KeyValueDate & Chr$(0)), Len(KeyValueDate))
Case 3:
SetValue = RegSetValueEx(hKey, KeyValueName, 0&, KeyDataType, ByVal CStr(KeyValueDate & Chr$(0)), Len(KeyValueDate))
Case 4:
SetValue = RegSetValueEx(hKey, KeyValueName, 0&, KeyDataType, CLng(KeyValueDate), 4)
End Select
SetValue = RegCloseKey(hKey)
End Sub
ดาวน์โหลดโค้ดต้นฉบับ VB6 ได้ที่นี่ ...
หน้า:
[1]