'SPYINFO.RQB   3A
' BILL K   12/3/02
$OPTIMIZE ON 
$APPTYPE GUI   
$TYPECHECK ON 
'=================
CONST SWP_NOMOVE = &H2
CONST SWP_NOSIZE = &H1
CONST HWND_TOPMOST = -1
CONST HWND_NOTOPMOST = -2
CONST CRLF=CHR$(13) & CHR$(10)
CONST GWL_ID = (-12)
CONST COLOR_ACTIVECAPTION = 2 
CONST COLOR_CAPTIONTEXT = 9 
'===============
TYPE RECT
  LEFT AS LONG
  TOP AS LONG
  RIGHT AS LONG
  BOTTOM AS LONG
END TYPE
TYPE POINTAPI
  X AS LONG
  Y AS LONG
END TYPE
DIM CURSORPOS AS POINTAPI
DIM CRSPOS AS POINTAPI 
DIM BFR AS STRING:BFR =SPACE$(100)
DIM NEWTEXT AS STRING 
DIM NEWHND AS LONG
DIM RCT AS RECT
DIM LH AS LONG
STATIC PREVHND AS LONG 
DIM LOCKHND AS LONG
'======================
DECLARE SUB SHOWXY
DECLARE SUB MOVEME
DECLARE SUB SIZEME
DECLARE SUB doCopy
DECLARE SUB CBoxTopClick
DECLARE SUB GETINFO
'==================
Declare Function ReleaseCapture Lib "user32" Alias "ReleaseCapture" () As Long
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (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 wFlags As Long) As Long
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint"(ByVal xPoint As Long, ByVal yPoint As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect"(ByVal hwnd As Long, lpRect As RECT) As Long
Declare Function GetParent Lib "user32" Alias "GetParent"(ByVal hwnd As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function GetCapture Lib "user32" Alias "GetCapture" () As Long
Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (hwnd as Long, nIndex as Long, dwNewLong as Long) as Long
Declare Function GetSysColor Lib "user32" Alias "GetSysColor" (nIndex As Long) As Long
Declare Function Getfocus LIB "user32" ALIAS "GetFocus"() AS LONG
DECLARE FUNCTION SETFOCUS LIB "user32" ALIAS "SetFocus"(HWND AS LONG) AS LONG

DIM TIMEX AS QTIMER
TIMEX.INTERVAL=100
TIMEX.ONTIMER=GETINFO

'{===========FORMS================
CREATE FORM AS QFORM
CAPTION="INFO"
AUTOSCROLL=0
DelBorderIcons(2) 
CENTER
	WIDTH = 230
	HEIGHT = 275
	ONRESIZE=SIZEME
	ONMOUSEDOWN=MOVEME  ' GRAB FORM ANYWHERE TO MOVE
	CREATE CBOXTOP AS QCHECKBOX
		CAPTION = "ON &TOP"
		LEFT = 12
		TOP =224
		WIDTH = 80
		CHECKED=1
		ONCLICK=CBOXTOPCLICK
	END CREATE
	CREATE CBOXLOCK AS QCHECKBOX
		CAPTION = "&Lock to: "
		LEFT = 12
		TOP = 250
		WIDTH=345
		TABORDER = 1
	END CREATE
	CREATE BTN1 AS QBUTTON
		CAPTION = "&COPY"
		LEFT = 163
		TOP =  224
		WIDTH = 50
		HEIGHT = 21
		TABORDER = 2
		ONCLICK=DOCOPY
	END CREATE
	CREATE REDIT AS QRICHEDIT
		TEXT=""
		LEFT = 8
		TOP = 8
		WIDTH = FORM.CLIENTWIDTH-16
		HEIGHT = FORM.CLIENTHEIGHT-70
		READONLY=1
		HIDESELECTION=0
		COLOR=14869218
		PLAINTEXT=1
		SCROLLBARS=2
		TABORDER = 11    
	END CREATE 'REDIT
END CREATE  ' FORM

'{==================SUBROUTINES======================

SUB SHOWXY
FORM.CAPTION="INFO " & STR$(SCREEN.MOUSEX) & " : " & STR$(SCREEN.MOUSEY)
END SUB

SUB MOVEME(BUTTON AS INTEGER, SHIFT AS INTEGER, X AS SINGLE, Y AS SINGLE)
	RELEASECAPTURE
	SENDMESSAGE FORM.HANDLE, &H112, &HF012, 0
END SUB

SUB SIZEME
	CBOXTOP.TOP=FORM.CLIENTHEIGHT-50
	CBOXLOCK.TOP=FORM.CLIENTHEIGHT-25
	BTN1.TOP=FORM.CLIENTHEIGHT-50			
	REDIT.WIDTH = FORM.CLIENTWIDTH-16
	REDIT.HEIGHT = FORM.CLIENTHEIGHT-70
	BTN1.LEFT=REDIT.LEFT + REDIT.WIDTH - 50
END SUB

SUB DOCOPY
CLIPBOARD.TEXT= REDIT.TEXT
END SUB

SUB CBOXTOPCLICK
IF CBOXTOP.CHECKED = 1 THEN
	SETWINDOWPOS FORM.HANDLE, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE OR SWP_NOSIZE
ELSE
	SETWINDOWPOS FORM.HANDLE, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE OR SWP_NOSIZE
END IF
END SUB

SUB GETINFO
SHOWXY
DEFSTR CLST,TITST
DEFLNG PTOP,PLEFT
GETCURSORPOS CRSPOS
NEWHND = WINDOWFROMPOINT(CRSPOS.X, CRSPOS.Y)
IF NEWHND = FORM.HANDLE THEN EXIT SUB
IF NEWHND = CBOXTOP.HANDLE THEN EXIT SUB
IF NEWHND = CBOXLOCK.HANDLE THEN EXIT SUB
IF NEWHND = BTN1.HANDLE THEN EXIT SUB
IF NEWHND = REDIT.HANDLE THEN EXIT SUB
IF NEWHND <> PREVHND THEN
	PREVHND = NEWHND
	LH=GETFOCUS()
	IF LH=REDIT.HANDLE THEN SETFOCUS(BTN1.HANDLE)
	IF CBOXLOCK.CHECKED THEN EXIT SUB
	NEWTEXT = "Handle= " & STR$(NEWHND) & CRLF
	LH = GETWINDOWTEXT(NEWHND,@BFR, 100)
	NEWTEXT = NEWTEXT & "Title: " & LEFT$(BFR, LH) & CRLF
	TITST=LEFT$(BFR, LH) 	
	LH = GETCLASSNAME(NEWHND,@BFR, 100)
	NEWTEXT = NEWTEXT & "Class: " & LEFT$(BFR, LH) & CRLF
	CLST=LEFT$(BFR, LH)
	GETWINDOWRECT NEWHND, RCT
	PTOP=RCT.TOP:PLEFT=RCT.LEFT
	NEWTEXT = NEWTEXT & "Width= " & STR$(RCT.RIGHT - RCT.LEFT) & CRLF
	NEWTEXT = NEWTEXT & "Height= " & STR$(RCT.BOTTOM - RCT.TOP) & CRLF
	NEWTEXT = NEWTEXT & "Rel. To Screen Top= " & STR$(RCT.TOP) & CRLF
	NEWTEXT = NEWTEXT & "Rel. To Screen Left= " & STR$(RCT.LEFT) & CRLF
	LH = GETPARENT(NEWHND)
	IF LH=0 THEN 
		NEWTEXT = NEWTEXT & "No Parent" & CRLF
	ELSE
		GETWINDOWRECT LH, RCT
		NEWTEXT = NEWTEXT & "Parent= " & STR$(LH)
		LH = GETCLASSNAME(LH,@BFR, 100)
		NEWTEXT = NEWTEXT & "  " & LEFT$(BFR, LH) & CRLF
		NEWTEXT = NEWTEXT & "Rel. To Parent Top= " & STR$(PTOP-RCT.TOP) & CRLF
		NEWTEXT = NEWTEXT & "Rel. To Parent Left= " & STR$(PLEFT-RCT.LEFT) & CRLF
	END IF	
	CBOXLOCK.CAPTION="&LOCK TO: " & STR$(NEWHND) & "  " & CLST & "  " & TITST
	REDIT.TEXT=NEWTEXT
END IF
END SUB
'{===================INITIALIZE CODE=============
FORM.COLOR=GETSYSCOLOR(COLOR_ACTIVECAPTION) 
CBOXTOP.FONT.COLOR=GETSYSCOLOR(COLOR_CAPTIONTEXT)  
CBOXLOCK.FONT.COLOR=GETSYSCOLOR(COLOR_CAPTIONTEXT)
SETWINDOWPOS FORM.HANDLE, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE OR SWP_NOSIZE
'-------  MINIMIZE CORRECTLY--------
SETWINDOWLONG FORM.HANDLE, -8, 0 
SETWINDOWLONG APPLICATION.HANDLE, -8, FORM.HANDLE
'----------------
FORM.SHOWMODAL
'END