|
ตั้งแต่ 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 ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|