Skip to content

Instantly share code, notes, and snippets.

@khchen
Created November 9, 2021 18:25
Show Gist options
  • Select an option

  • Save khchen/580316abcd76699f13f3fe91d6f357b1 to your computer and use it in GitHub Desktop.

Select an option

Save khchen/580316abcd76699f13f3fe91d6f357b1 to your computer and use it in GitHub Desktop.
#[
Author: Ward
Example of RegEnumValue
References:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowa
]#
import winim/lean
import strformat
type
RegKind = enum
regNone = (0, "REG_NONE")
regSz = (1, "REG_SZ")
regExpandSz = (2, "REG_EXPAND_SZ")
regBinary = (3, "REG_BINARY")
regDword = (4, "REG_DWORD")
regDwordBigEndian = (5, "REG_DWORD_BIG_ENDIAN")
regLink = (6, "REG_LINK")
regMultiSz = (7, "REG_MULTI_SZ")
regResourceList = (8, "REG_RESOURCE_LIST")
regFullResourceDescriptor = (9, "REG_FULL_RESOURCE_DESCRIPTOR")
regResourceRequirementsList = (10, "REG_RESOURCE_REQUIREMENTS_LIST")
regQword = (11, "REG_QWORD")
regError = (12, "REG_ERROR")
var hkey: HKEY
if RegOpenKeyEx(HKEY_CLASSES_ROOT, "*", 0, KEY_READ, &hkey) == ERROR_SUCCESS:
defer:
RegCloseKey(hkey)
var
buffer = T(32767) # generate wstring or mstring buffer depend on conditional symbol
size, kind, i: DWORD = 0
while true:
size = DWORD buffer.len
if RegEnumValue(hkey, i, &buffer, &size, nil, &kind, nil, nil) != ERROR_SUCCESS:
break
echo fmt"{$buffer.nullTerminated} <{RegKind kind}>"
i.inc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment