Re: pointers for newbie wanting to write a 'window' logger
Re: pointers for newbie wanting to write a 'window' logger
- Subject: Re: pointers for newbie wanting to write a 'window' logger
- From: Philip Aker <email@hidden>
- Date: Mon, 8 Sep 2008 09:45:38 -0700
On Sep 8, 2008, at 9:15 AM, Joel Sherriff wrote:
Hmm, well it looks like the thing I expected to be hard is easy
(thank's to Philip's pointer), but the thing I expected to be easy
isn't so much. This is also not particularly a kernel thing, but I
might as well continue the thread if no one objects...
Any thoughts on how to get the window title of the "active" window?
The event mechanism doesn't give a lot of detail since it's at such
a low level - Process Serial Number, PID, and a bunch of other
things I don't understand...but not Window Id, so I know now that an
event occurred, but not what window it was sent to. That's half the
battle. It looks like there's a new CGWindow interface in Leopard
that has some details - but only the application name
(kCGWindowName), not the title. And, without a window id in the
CGEvent data I couldn't link the two together anyway. But
application name isn't sufficient for my needs - I really need the
title.
Look into the facilities available Accessibility.h (in sub-framework
HIServices.h of ApplicationServices.framework). Note there is also an
alternate and perhaps easier method using an EventMonitor target in
Carbon proper but this requires "Enable access for assistive devices"
to be checked in the user's preferences. Consequently, I'm not sure if
it must be enabled when using Accessibility services directly.
Here is an AppleScript call which illustrates how to get every window
(also requires "Enable access for assistive devices" to be enabled).
tell application "System Events" to get title of every window of
every application process
Untitled windows usually show up as {} in the resulting list.
You can map the window to the process by a choice of means including
PID.
Philip Aker wrote:
On Sep 5, 2008, at 2:43 PM, Joel Sherriff wrote:
New to OS X, but I need to write an app that records activity
similiar to a keylogger - only that I don't want the keys that are
recorded, only to know that a key or mouse button was pressed and
what the window title of the window that got the event was. A
window-activity logger, versus a keylogger. I'd prefer not to go
to as low a level as a kernel extension,
Sounds like you could do this with the event tap and window
facilities available in CoreGraphics (CGEvent.h for starters). Look
here <http://prefabsoftware.com/> to see an illustration of the tap
portion of your needs.
as I'd really like to keep this in user space (but I will, if I
have to). I've done the same thing in Windows (using hooks) and
Linux (X11 using the XRecord extension to the X server), but I
know little or nothing about Quartz, Aqua, Carbon, kernel
extensions, etc, etc, so I'm asking for guidance as to the right
layer to target and technology to use. In the X11 version, the
monitor loads from the Xsession config - that is it starts when
the user logs in and runs only while the user is logged in...
ideally I'd like to mimic that. Can someone with more experience
on OS X features give me some pointers?
Btw, I know this isn't specifically a kernel question, but I
figure the kernel guru's would know best when something shouldn't
be done in a kernel extension. If a kernel extension is the only
way to do it though, then that's the way I'll go.
Philip Aker
echo email@hidden@nl | tr a-z@. p-za-o.@
Democracy: Two wolves and a sheep voting on lunch.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-kernel mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
Philip Aker
echo email@hidden@nl | tr a-z@. p-za-o.@
Democracy: Two wolves and a sheep voting on lunch.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-kernel mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden