api_GetWindowText

Blitz3D Forums/Blitz3D Programming/api_GetWindowText

rickavzstx(Posted 2012) [#1]
hello,

I need your help, I'm trying to run this routine to display the names of the open windows on the desktop .... everything is in decls, but the program does not display anything!! I not understand, thank you for your help


Const GW_HWNDFIRST = 0
Const GW_HWNDLAST = 1
Const GW_HWNDNEXT = 2
Const GW_HWNDPREV = 3
Const GW_OWNER = 4
Const GW_Child = 5

EnumWindows()
WaitKey()
End

Function EnumWindows()
Local hwnd_first = api_GetWindow(GetActiveWindow(),GW_HWNDFIRST)
Local hwnd_temp = hwnd_first

Repeat
; Nächstes Fenster
hwnd_temp = api_GetWindow(hwnd_temp,GW_HWNDNEXT)

;Name Herausfinden
bank_temp = CreateBank(255)
sdf=api_GetWindowText(hwnd_temp,bank_temp,255)

Local pos%=0,name$=""

Repeat
byte=PeekByte(bank_temp,pos)
pos=pos+1
If byte=0 Then Exit
name$=name$+Chr(byte)
Forever

If name$ <> "" Then Print hwnd_temp + ": "+name$
FreeBank bank_temp
Until hwnd_temp =0

End Function


_PJ_(Posted 2012) [#2]
Using DebugLog can help to identify what's going on in your program.


Using the user32.decls this seems to run just fine for me...

Const GW_HWNDFIRST = 0
Const GW_HWNDLAST = 1
Const GW_HWNDNEXT = 2
Const GW_HWNDPREV = 3
Const GW_OWNER = 4
Const GW_Child = 5

EnumWindows()
WaitKey()
End



Function EnumWindows()
	
	Local hwnd_first = api_GetWindow(api_GetActiveWindow(),GW_HWNDFIRST)
	Local hwnd_temp = hwnd_first
	
	Local pos%=0
	Local name$=""
	
	Repeat
		; Nächstes Fenster
		hwnd_temp = api_GetWindow(hwnd_temp,GW_HWNDNEXT)
		DebugLog("WindowHandle="+Str(hwnd_temp))
		;Name Herausfinden
		bank_temp = CreateBank(255)
		sdf=api_GetWindowText(hwnd_temp,bank_temp,255)
		DebugLog("Text Result="+Str(sdf))
		pos%=0
		name$=""
		
		Repeat
			byte=PeekByte(bank_temp,pos)
			If (Not(byte))
				DebugLog("Terminator Character at "+Str(pos))
				Exit
			End If	
			
			name$=name$+Chr(byte)
			pos=pos+1
		Forever
		
		If (name$ <> "")
			DebugLog("Name "+name$)
			Print hwnd_temp + ": "+name$
		End If
		
		FreeBank bank_temp
	Until (Not(hwnd_temp))
End Function 


Last edited 2012


Bobysait(Posted 2012) [#3]
I think you have a wrong decls declaration

mostly, the string are passed as "string" when they should be pointers

so, check if you have this in your decls
api_GetWindowText% (hwnd%, lpString$, cch%) : "GetWindowTextA"


then change the "lpString$" to "lpString*

api_GetWindowText% (hwnd%, lpString*, cch%) : "GetWindowTextA"


then it should work, and you'll be able to pass your bank as pointer.