On Jul 2, 2008, at 9:28 PM, Bill Vlahos wrote:

How do I get the path to a file that was double-clicked in the OS (Mac, Windows, and Linux) that opens my standalone?

The association of the standalone to files with a particular extension is set on the Mac and Windows gives the user the ability to set up the association if I didn't set it in the registry.

I want the document files for my application to live in a particular folder and not be anywhere on the drive. When the user double clicks the file on the file system or as an email attachment, I want to catch it and offer the user the ability to copy the file from where it is to where I want it to be.

I assume getting the path will be the same for all the platforms and I can write the copy/move routine.

Hey Bill,

Mac:

Here is some appleEvent code you should put in the message path. Since you use the splash stack design I would put it in a library stack so that it catches the message regardless of which stack is frontmost. Note that you may need to check that your application has finished loading in the appleEvent. If double-clicking on the file causes the OS to launch your application then the appleEvent might be received before all of your application stacks have opened.

on appleEvent pClass, pID, pSender
    if pClass is "aevt" and pID is "odoc" then
        request appleEvent data
put it into theFiles ## files OS is requesting your application opens.

        if theFiles is not "not found" then
            if theFiles is not empty then

                ## DON'T PASS, CRASHES CAN OCCUR (TESTING UNDER 2.8)
            else
                pass appleEvent
            end if
        else
            pass appleEvent
        end if
    else
        pass appleEvent
    end if
end appleEvent

Windows:

If your application is not running yet then the file paths will be passed in the command line arguments - $1, $2, etc. Revolution 2.9 added $# which tells you how many command line arguments were passed to the application so the following code will create a return delimited list of argument passed to your application at launch. It is up to you to verify the params are paths to one of your files.

repeat with i = 1 to $#
   put value("$" & i) into theValue
   put theValue & cr after theFiles
end repeat

If your application is already running then you need to handle the 'relaunch' command in the stack you use to create the executable. Again, you should check that your application has finished loading before doing anything as the relaunch command could be sent before your application has completely loaded (you are using splash stack technique).

on relaunch
    repeat with theCounter = 1 to the paramcount
        put param(theCounter) & cr after theFiles
    end repeat
end relaunch

Linux:

No idea, sorry.

Regards,

--
Trevor DeVore
Blue Mango Learning Systems
ScreenSteps: http://www.screensteps.com
Developer Resources: http://revolution.bluemangolearning.com
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to