On 2/29/2008 7:16 AM, Duncan Murdoch wrote: > Dieter Menne wrote: >> Dear Rglers, >> >> when using a callback in rgl (Windows, if it matters) >> >> http://finzi.psych.upenn.edu/R/library/rgl/html/callbacks.html >> >> I would like to get the Asynchronous keyboard status (as least >> Shift/Control, but preferably other key) to set markers in a plot. >> >> getGraphicsEvents seems to be limited to normal graphics windows. >> >> > That's a general hardware problem, not really an rgl problem: you just > want to query the keyboard. It definitely depends on the platform. > Windows has GetKeyState, GetKeyboardState, and GetAsyncKeyState, each > with slightly different behaviour. For example, > > GetKeyState(VK_SHIFT); > > will tell you if either shift key is down. There are also VK_LSHIFT and > VK_RSHIFT constants to distinguish the two shift keys. Here's an inline > version (untested): > > > isshifted <- cfunction(signature(result="integer"), > includes = "#include <windows.h>", > body = "result[0] = getKeyState(VK_SHIFT)", > convention = ".C") > > > Duncan Murdoch >
Now I'm on Windows, I can see that doesn't work. Here's a version that almost does: library(inline) isshifted <- cfunction( includes = "#include <windows.h>", body = "return ScalarInteger(GetKeyState(VK_SHIFT));") The problem with this one is that it puts "#include <R.h>" ahead of "#include <windows.h>", and that causes a compile error because of a clash in the use of names. If you edit the generated source you can fix this, but I suppose cfunction should allow you to put the windows include first, and I suppose R should try to avoid clashing with it. Duncan Murdoch ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.