Attribute VB_Name = "handler"
OPTION Explicit
' Window Styles
Public CONST WS_POPUP = &H80000000
Public CONST WS_CHILD = &H40000000
Public CONST WS_VISIBLE = &H10000000
Public CONST WS_GROUP = &H20000
Public CONST WS_TABSTOP = &H10000
Public CONST E_NOTIMPL = &H80004001
Public CONST IDCANCEL = 2
Public CONST IDNO = 7
Public CONST IDYES = 6
Public CONST GMEM_MOVEABLE = &H2
Public CONST MAX_PATH = 260
Public CONST PAGE_EXECUTE_READWRITE = &H40&
Public CONST S_FALSE = 1
Public CONST S_OK = 0
Public CONST SWP_NOSIZE = &H1
Public CONST SWP_NOZORDER = &H4
Public CONST SWP_SHOWWINDOW = &H40
Public CONST GWL_STYLE = (-16)
Public CONST GWL_EXSTYLE = (-20)
Public CONST WS_EX_CONTROLPARENT = &H10000
Public TYPE GUID
Data1 AS LONG
Data2 AS INTEGER
Data3 AS INTEGER
Data4(7) AS Byte
END TYPE
TYPE DLGTEMPLATE
Style AS LONG
dwExtendedStyle AS LONG
cdit AS INTEGER
x AS INTEGER
y AS INTEGER
cx AS INTEGER
cy AS INTEGER
Menu AS INTEGER
Class AS STRING * 7
Caption AS INTEGER
END TYPE
Public g_tDlgTemplate AS DLGTEMPLATE
Public m_lPropSheet AS LONG
Public m_lSheet AS LONG
DECLARE FUNCTION GetWindowLong Lib "user32" ALIAS "GetWindowLongA" (BYVAL hwnd AS LONG, BYVAL nIndex AS LONG) AS LONG
DECLARE FUNCTION SetWindowLong Lib "user32" ALIAS "SetWindowLongA" (BYVAL hwnd AS LONG, BYVAL nIndex AS LONG, BYVAL dwNewLong AS LONG) AS LONG
Public DECLARE FUNCTION AddPropertyPage Lib "propext.dll" (BYVAL lpfn AS LONG, BYVAL hPage AS LONG, BYVAL lparam AS LONG) AS LONG
Public DECLARE SUB CopyMemory Lib "kernel32" ALIAS "RtlMoveMemory" (pDest AS ANY, pSource AS ANY, BYVAL ByteLen AS LONG)
Public DECLARE FUNCTION CreatePropertySheetPage Lib "comctl32.dll" ALIAS "CreatePropertySheetPageA" (p AS PROPSHEETPAGE) AS LONG
Public DECLARE SUB DestroyPropertySheetPage Lib "comctl32.dll" (BYVAL hPage AS LONG)
Public DECLARE FUNCTION DragQueryFile Lib "shell32.dll" ALIAS "DragQueryFileA" (BYVAL HDROP AS LONG, BYVAL pUINT AS LONG, BYVAL lpStr AS STRING, BYVAL ch AS LONG) AS LONG
Public DECLARE FUNCTION GetDlgItem Lib "user32" (BYVAL hDlg AS LONG, BYVAL nIDDlgItem AS LONG) AS LONG
Public DECLARE FUNCTION GetPrivateProfileString Lib "kernel32" ALIAS "GetPrivateProfileStringA" (BYVAL lpApplicationName AS STRING, BYVAL lpKeyName AS ANY, BYVAL lpDefault AS STRING, BYVAL lpReturnedString AS STRING, BYVAL nSize AS LONG, BYVAL lpFileName AS STRING) AS LONG
Public DECLARE FUNCTION GetWindowText Lib "user32" ALIAS "GetWindowTextA" (BYVAL hwnd AS LONG, BYVAL lpString AS STRING, BYVAL cch AS LONG) AS LONG
Public DECLARE FUNCTION GlobalAlloc Lib "kernel32" (BYVAL wFlags AS LONG, BYVAL dwBytes AS LONG) AS LONG
Public DECLARE FUNCTION GlobalFree Lib "kernel32" (BYVAL hMem AS LONG) AS LONG
Public DECLARE FUNCTION GlobalLock Lib "kernel32" (BYVAL hMem AS LONG) AS LONG
Public DECLARE FUNCTION GlobalUnlock Lib "kernel32" (BYVAL hMem AS LONG) AS LONG
Public DECLARE FUNCTION InsertMenu Lib "user32" ALIAS "InsertMenuA" (BYVAL hMenu AS LONG, BYVAL nPosition AS LONG, BYVAL wFlags AS LONG, BYVAL wIDNewItem AS LONG, BYVAL lpNewItem AS STRING) AS LONG
Public DECLARE FUNCTION OleRegEnumFormatEtc Lib "ole32.dll" (refclsid AS GUID, BYVAL dwDirection AS DATADIR, lpEnumFormatEtc AS IEnumFORMATETC) AS LONG
Public DECLARE FUNCTION ReleaseStgMedium Lib "ole32.dll" (pmedium AS STGMEDIUM) AS LONG
Public DECLARE FUNCTION SendDlgItemMessage Lib "user32" ALIAS "SendDlgItemMessageA" (BYVAL hDlg AS LONG, BYVAL nIDDlgItem AS LONG, BYVAL wMsg AS LONG, BYVAL wParam AS LONG, BYVAL lparam AS LONG) AS LONG
DECLARE FUNCTION SetDlgItemText Lib "user32" ALIAS "SetDlgItemTextA" (BYVAL hDlg AS INTEGER, BYVAL nIDDlgItem AS INTEGER, BYVAL lpString AS STRING) AS INTEGER
Public DECLARE FUNCTION SetWindowText Lib "user32" ALIAS "SetWindowTextA" (BYVAL hwnd AS LONG, BYVAL lpString AS STRING) AS LONG
Public DECLARE FUNCTION VirtualProtect Lib "kernel32" (BYVAL lpAddress AS LONG, BYVAL dwSize AS LONG, BYVAL flNewProtect AS LONG, ByRef lpflOldProtect AS LONG) AS LONG
Public DECLARE FUNCTION WPPString Lib "kernel32" ALIAS "WritePrivateProfileStringA" (BYVAL lpApplicationName AS STRING, BYVAL lpKeyName AS ANY, BYVAL lpString AS ANY, BYVAL lpFileName AS STRING) AS LONG
Public DECLARE FUNCTION SetParentAPI Lib "user32" ALIAS "SetParent" (BYVAL hWndChild AS LONG, BYVAL hWndNewParent AS LONG) AS LONG
Public DECLARE FUNCTION GetParent Lib "user32" (BYVAL hwnd AS LONG) AS LONG
Public DECLARE FUNCTION SetWindowPos Lib "user32" (BYVAL hwnd AS LONG, BYVAL hWndInsertAfter AS LONG, BYVAL x AS LONG, BYVAL y AS LONG, BYVAL cx AS LONG, BYVAL cy AS LONG, BYVAL uFlags AS LONG) AS Boolean
Public FUNCTION LOWORD(BYVAL lVal AS LONG) AS INTEGER
LOWORD = lVal AND &HFFFF&
END FUNCTION
Public FUNCTION HIWORD(BYVAL lVal AS LONG) AS INTEGER
HIWORD = 0
IF lVal THEN
HIWORD = lVal &H10000 AND &HFFFF&
END IF
END FUNCTION
Public FUNCTION GetAddress(BYVAL lpfn AS LONG)
GetAddress = lpfn
END FUNCTION
Public SUB StrFromPtrW(pOLESTR AS LONG, strOut AS STRING)
DIM ByteArray(255) AS Byte
DIM intTemp AS INTEGER
DIM intCount AS INTEGER
DIM i AS INTEGER
intTemp = 1
'Walk the string and retrieve the first byte of each WORD.
WHILE intTemp <> 0
CopyMemory intTemp, BYVAL pOLESTR + i, 2
ByteArray(intCount) = intTemp
intCount = intCount + 1
i = i + 2
WEND
'Copy the byte array to our string.
CopyMemory BYVAL strOut, ByteArray(0), intCount
END SUB
Public SUB StrFromPtrA(pOLESTR AS LONG, strOut AS STRING)
DIM ByteArray(255) AS Byte
DIM intTemp AS INTEGER
DIM intCount AS INTEGER
DIM i AS INTEGER
intTemp = 1
'Walk the string and retrieve the first byte of each WORD.
WHILE intTemp <> 0
CopyMemory intTemp, BYVAL pOLESTR + i, 1
ByteArray(intCount) = intTemp
intCount = intCount + 1
i = i + 1
WEND
'Copy the byte array to our string.
CopyMemory BYVAL strOut, ByteArray(0), intCount
END SUB
Public FUNCTION SwapVtableEntry(pObj AS LONG, EntryNumber AS INTEGER, BYVAL lpfn AS LONG) AS LONG
DIM lOldAddr AS LONG
DIM lpVtableHead AS LONG
DIM lpfnAddr AS LONG
DIM lOldProtect AS LONG
CopyMemory lpVtableHead, BYVAL pObj, 4
lpfnAddr = lpVtableHead + (EntryNumber - 1) * 4
CopyMemory lOldAddr, BYVAL lpfnAddr, 4
CALL VirtualProtect(lpfnAddr, 4, PAGE_EXECUTE_READWRITE, lOldProtect)
CopyMemory BYVAL lpfnAddr, lpfn, 4
CALL VirtualProtect(lpfnAddr, 4, lOldProtect, lOldProtect)
SwapVtableEntry = lOldAddr
END FUNCTION
Public FUNCTION TrimNull(str AS STRING) AS STRING
str = Trim(str)
TrimNull = Left(str, LEN(str) - 1)
END FUNCTION
Public SUB LOG(sMsg AS STRING)
DIM hFile AS INTEGER
hFile = FREEFILE
OPEN App.Path & "/" & "raddata.log" FOR APPEND AS #hFile
WRITE #hFile, sMsg
CLOSE #hFile
END SUB