winfo , a builtin Tk command, returns information about a window.
To ensure that the window is fresh, it's usually best to call winfo from a script bound to <Configure>.
You probably don't need to use these subcommands, either because they couple to functionality that is largely obsolete in the days of universal full-depth displays or because they require deep knowledge of the X protocol to make use of.
RS 2006-04-12: winfo class returns for toplevels the app name (as from the topmost script), else the Titlecased widget type. Here's a little convenience proc that returns the suitable Tk command for deserializing a widget:
proc winfo'class w { if {[winfo toplevel $w] eq $w} {return toplevel} string tolower [winfo class $w] }
MG: This seems to only be the case for ".". Other toplevels seem to return "Toplevel" as you'd expect. (Anyone know why it returns the app name for ".", though? Curious what the thought behind it was.)
DKF: It relates to option database support. In particular, other names would be used by completely different applications (e.g. Firefox, Xterm, etc.)
MG Ahh, I see. Thanks :)
PYK 2017-05-16: auriocus provided this in the Tcl Chatroom:
# print the window name under the mouse cursor proc pickwin {} { after 1000 { set pickwidget [winfo containing {*}[winfo pointerxy .]] if { $pickwidget ne {} } { puts $pickwidget foreach option [$pickwidget configure] { # leave out synonym options if { [llength $option] != 5 } continue lassign $option name dbname dbclass defvalue currentvalue if { $defvalue != $currentvalue } { puts " $name $currentvalue" } } } else { puts "No widget under cursor." } } }