KeyHit() when AppSuspended()?

BlitzMax Forums/BlitzMax Programming/KeyHit() when AppSuspended()?

kronholm(Posted 2006) [#1]
Is it possible, in any way, via maybe win32 functions, to have a BlitzMax application detect input from the keyboard, even though the application is not active?

Asking because I want to make a small program that has to have "global" windows shortcuts.


kronholm(Posted 2006) [#2]
Surely someone must have an idea if this is possible or not?


Dreamora(Posted 2006) [#3]
Yes it is possible through WinAPI


FlameDuck(Posted 2006) [#4]
What, like a keylogger? You naughty boy!


kronholm(Posted 2006) [#5]
I suppose it could be used for a keylogger yes, but that's not my purpose. I want to make a small app that runs in the background, enabling multiple clipboards.


kronholm(Posted 2006) [#6]
getasynckeystate() had what I needed :)
Now I've got another stupid question.. Is it possible to draw anything directly onto the desktop/over active windows? Sort of like a superlayer on top of everything (look at control panel > display > settings > identify monitors - the numbers showing there, that's what I mean) - and if so, what would be needed to do this?

'prints out keys hit/pressed in win32, irregardles of what is focused
Framework BRL.RamStream
Import BRL.StandardIO
Import pub.win32

Extern "win32"
	Function GetAsyncKeyState(character)
EndExtern

Local loop = True
While loop
	Delay 40
	For Local i = 8 To 222
		Local state = getasynckeystate(i)
		Select state
			Case 32767 Print "special key hit: "+Chr(i)+" ("+i+") "+state
			Case 32768 Print "special key down: "+Chr(i)+" ("+i+") "+state
			Case -32767	Print "key hit: "+Chr(i)+" ("+i+") "+state
				If i = 27 Then loop = False
			Case -32768 Print "key down: "+Chr(i)+" ("+i+") "+state
		EndSelect
	Next
Wend



ziggy(Posted 2007) [#7]
You need to make a top most window, with a color-transparent key. Both things can be done using WinApi. I can't remember wich apis were, but I did exactly this a long time ago.


kronholm(Posted 2007) [#8]
Lol nice bump ziggy :) But thanks mate, good to know that.


ziggy(Posted 2007) [#9]
This is the winapi declaration to make a windows topmost on visual basic 6. I think it should be easy for you to convert it to BlitzMax. I think Long integers on Visual basic 6 were 32 bits, so you should consider this longs as integers on blitzmax (I think)
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal iWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 

Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE 


this was a typic call to make a window topmost:
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS) 

to the transparency thing of the window, I think there was a blitzmax sample on the maxgui forum, take a look.