get current workspace(spaces) id

Is there a way to get the current workspace (i.e spaces) id on OSX? The only ways I know of are either deprecated (CGWindowWorkSpace) or part of a private API (CGSWindows) and therefore would probably get rejected by the Mac App Store.

I have the MBS plugins so if there is something in there that would be great, but I have not been able to find anything.



In case anyone is interested, I found a solution for this. It does require the MBS plugins.

Public Function getActiveSpaceID(dictWindows() as dictionary = nil) as string
  If dictWindows = Nil Then 
    dictWindows = CGWindowMBS.GetWindowListInfo( CGWindowMBS.kCGWindowListOptionOnScreenOnly, CGWindowMBS.kCGNullWindowID )
  Dim oDefaults As NSUserDefaultsMBS = NSUserDefaultsMBS.standardUserDefaults
  oDefaults.removeSuiteNamed( "" )
  oDefaults.addSuiteNamed( "" )
  Dim dictSpaceProps As Dictionary
  Dim aroSpaces( -1 ) As Variant
  Dim iSpaceCount As Integer
  Dim iWindowCount As Integer = dictWindows.ubound
  dictSpaceProps = oDefaults.dictionaryForKey( "SpacesDisplayConfiguration" )
  aroSpaces = dictSpaceProps.value( "Space Properties" )
  iSpaceCount = aroSpaces.ubound
  Dim sSpaceID As String
  For i As Integer = 0 To iWindowCount
    Dim d As Dictionary = dictWindows( i )
    Dim iWindowID As Integer = d.value( CGWindowMBS.kCGWindowNumber ).integervalue
    system.DebugLog "window id: " + str( iWindowID )
    Dim dictSpaces As New Dictionary

    For cnt As Integer = 0 To iSpaceCount
      Dim oWindowDictionary As Dictionary = aroSpaces( cnt )
      Dim aroWindowIDs( -1 ) As Variant
      aroWindowIDs = oWindowDictionary.value( "windows" )
      sSpaceID = oWindowDictionary.value( "name" ).StringValue
      For idx As Integer = 0 To ubound( aroWindowIDs )
        If aroWindowIDs( idx ).IntegerValue = iWindowID Then
          dictSpaces.value( sSpaceID ) = iWindowID
    If dictSpaces.Count = 1 Then 
      Dim v() As Variant
      v = dictSpaces.keys
      Return v( 0 ).StringValue
End Function