#DEFINE SAMPLE_WIN_PROPERTY "MyWinProperty"
DO declare
LOCAL hWindow, hProperty, cBuffer, nBufsize
hWindow = _screen.HWnd
IF VARTYPE(oProperty) <> "O"
* this variable must not be released until
* the window property is not required anymore
PUBLIC oProperty As PChar
oProperty = CREATEOBJECT("PChar",;
TRANSFORM(DATETIME()))
* creating and assigning window property
IF SetProp(hWindow, SAMPLE_WIN_PROPERTY,;
oProperty.GetAddr()) = 0
? "SetProp failed with error code:", GetLastError()
RETURN
ENDIF
ENDIF
* reading window property
hProperty = GetProp(hWindow, SAMPLE_WIN_PROPERTY)
IF hProperty = 0
? "GetProp failed with error code:", GetLastError()
RETURN
ENDIF
nBufsize = GlobalSize(hProperty)
cBuffer = REPLICATE(CHR(0), nBufsize)
= MemToStr(@cBuffer, hProperty, nBufsize)
? "Property read:", cBuffer
* end of main
PROCEDURE declare
DECLARE INTEGER GetLastError IN kernel32
DECLARE INTEGER GlobalSize IN kernel32 INTEGER hMem
DECLARE RtlMoveMemory IN kernel32 As MemToStr;
STRING @, INTEGER, INTEGER
DECLARE INTEGER SetProp IN user32;
INTEGER hWindow, STRING lpString,;
INTEGER hData
DECLARE INTEGER GetProp IN user32;
INTEGER hWindow, STRING lpString
DEFINE CLASS PChar As Session
PROTECTED hMem
PROCEDURE Init(lcString)
THIS.hMem = 0
THIS.setValue(lcString)
PROCEDURE Destroy
THIS.ReleaseString
FUNCTION GetAddr
RETURN THIS.hMem
FUNCTION GetValue
LOCAL lnSize, lcBuffer
lnSize = THIS.GetAllocSize()
lcBuffer = SPACE(lnSize)
IF THIS.hMem <> 0
DECLARE RtlMoveMemory IN kernel32 As MemToStr;
STRING @, INTEGER, INTEGER
= MemToStr(@lcBuffer, THIS.hMem, lnSize)
ENDIF
RETURN lcBuffer
FUNCTION GetAllocSize
DECLARE INTEGER GlobalSize IN kernel32 INTEGER hMem
RETURN Iif(THIS.hMem=0, 0, GlobalSize(THIS.hMem))
PROCEDURE SetValue(lcString)
#DEFINE GMEM_FIXED 0
THIS.ReleaseString
DECLARE INTEGER GlobalAlloc IN kernel32 INTEGER, INTEGER
DECLARE RtlMoveMemory IN kernel32 As StrToMem;
INTEGER, STRING @, INTEGER
LOCAL lnSize
lcString = lcString + Chr(0)
lnSize = Len(lcString)
THIS.hMem = GlobalAlloc(GMEM_FIXED, lnSize)
IF THIS.hMem <> 0
= StrToMem(THIS.hMem, @lcString, lnSize)
ENDIF
PROCEDURE ReleaseString
IF THIS.hMem <> 0
DECLARE INTEGER GlobalFree IN kernel32 INTEGER
= GlobalFree (THIS.hMem)
THIS.hMem = 0
ENDIF
ENDDEFINE
|