ヤルキデナイズド

Unclassified Articles on Software and IT

Mission Control の仮想デスクトップ番号が取得できない

デスクトップの番号を表示するだけの他愛ないアプリを作ろうとしたのだが。

Snow Leopard までの)Spaces で現在の仮想デスクトップ番号を取得する方法はある:objective c - Detecting when a space changes in Spaces in Mac OS X - Stack Overflow

が、 Lion の Mission Control になってからうまくいかなくなった(参照:rdar://9241430: kCGWindowWorkspace returns seemingly random numbers)。

次善の策として Dock のウィンドウ ID を使う方法を思い付いた。 Dock のウィンドウは各仮想デスクトップに1つずつ存在し、それらのウィンドウ ID は連番になっている。そこで、仮想デスクトップ1の Dock ウィンドウ ID を取得しておき、現在の仮想デスクトップの Dock ウィンドウ ID と比較すれば、現在の仮想デスクトップ番号が割り出せる寸法だ。しか、仮想デスクトップを追加・削除したりアプリケーションをフルスクリーン化したりすると Dock のウィンドウ ID が変動し連番ではなくなってしまう。

どうにも使えないので詰まっている。さっさと API を直してもらいたい。