This script will print data(proudly owning PID) about seen home windows.
And data for the window that modified place inside a 5 second interval.
Credit score goes to superuser reply
#!/usr/bin/env python
import Quartz
import time
from Basis import NSSet, NSMutableSet
def transformWindowData(knowledge):
list1 = []
for v in knowledge:
if not v.valueForKey_('kCGWindowIsOnscreen'):
proceed
row = (
str(v.valueForKey_('kCGWindowOwnerPID') or '?').rjust(7) +
' ' + str(v.valueForKey_('kCGWindowNumber') or '?').rjust(5) +
' {' + ('' if v.valueForKey_('kCGWindowBounds') is None else
(
str(int(v.valueForKey_('kCGWindowBounds').valueForKey_('X'))) + ',' +
str(int(v.valueForKey_('kCGWindowBounds').valueForKey_('Y'))) + ',' +
str(int(v.valueForKey_('kCGWindowBounds').valueForKey_('Width'))) + ',' +
str(int(v.valueForKey_('kCGWindowBounds').valueForKey_('Top')))
)
).ljust(21) +
'}' +
't[' + ((v.valueForKey_('kCGWindowOwnerName') or '') + ']') +
('' if v.valueForKey_('kCGWindowName') is None else (' ' + v.valueForKey_('kCGWindowName') or ''))
).encode('utf8')
list1.append(row)
return list1;
def printBeautifully(dataSet):
print 'PID'.rjust(7) + ' ' + 'WinID'.rjust(5) + ' ' + 'x,y,w,h'.ljust(21) + ' ' + 't[Title] SubTitle'
print '-'.rjust(7,'-') + ' ' + '-'.rjust(5,'-') + ' ' + '-'.ljust(21,'-') + ' ' + 't-------------------------------------------'
# print textList1
for v in dataSet:
print v;
#seize preliminary set
wl = Quartz.CGWindowListCopyWindowInfo( Quartz.kCGWindowListOptionAll, Quartz.kCGNullWindowID)
wl = sorted(wl, key=lambda ok: ok.valueForKey_('kCGWindowOwnerPID'))
#convert into readable format
textList1 = transformWindowData(wl);
#print every thing we've got on the display
print 'all home windows:'
printBeautifully(textList1)
print 'Transfer goal window'
time.sleep(5)
#seize window knowledge the second time
wl2 = Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListOptionAll, Quartz.kCGNullWindowID)
textList2 = transformWindowData(wl2)
#examine the distinction
w = NSMutableSet.setWithArray_(textList1)
w.minusSet_(NSSet.setWithArray_(textList2))
#print the distinction
printBeautifully(w)
Output:
all home windows:
PID WinID x,y,w,h [Title] SubTitle
------- ----- --------------------- -------------------------------------------
204 2 {0,0,1280,800 } [Window Server] Desktop
479 36 {0,0,1280,800 } [Dock] Desktop Image - DefaultDesktop.jpg
731 2893 {640,0,640,800 } [Finder] /Customers/wolf/Downloads
731 260 {-608,-1440,2560,1440 } [Finder]
731 259 {0,0,1280,800 } [Finder]
1301 321 {0,366,1280,411 } [Audio Hijack] Utility Audio
Transfer goal window
PID WinID x,y,w,h [Title] SubTitle
------- ----- --------------------- -------------------------------------------
1301 321 {0,366,1280,411 } [Audio Hijack] Utility Audio