A few interesting things here. I tried to do these things via the new Apple language, Swift.

* You can enum windows, but unlike Microsoft Windows, you have no permissions to hide a window. BTW, hiding a window is a window object method called orderOut(nil), and they only permit it on your own windows, not another application's windows. However, that said, there's a neat AppleScript technique that seems to work in hiding the entire application, rather than just the window.

osascript -e "tell application "System Events" to set visible of process "Installer" to false'

* You can enum Cocoa windows and get x,y,w,h, process ID, window name, and window number (I guess that's an ID) on each. Here's the technique in Swift:

    import Foundation;
    import Cocoa;

    let windows = CGWindowListCopyWindowInfo(
        CGWindowListOption.OptionOnScreenOnly,
        CGWindowID(0))! as NSArray;
    for var i = 0; i < windows.count; i++  {
        let window = windows[i];
        let owner = window["kCGWindowOwnerName"] as! String;
        if owner != "Installer" {
            continue;
        }
       // do something with your window object here
    }

I don't know how to do this in D, but came up with a workaround. My pkg installer will run a Bash script which will hide the Installer window via osascript, show a window that I drew with Swift that basically tells people to wait because it's downloading components, runs curl to download the payload from the server and copy it into the appropriate places (as well as set up system library stuff as needed), and then hide my custom Swift window (the progress window), and then uses osascript again to unhide the installer application.

Reply via email to