Hi,
Here is a detailed description of how single-instance support can be
implemented on Windows. This feature will allow users to open LyX files
using the Windows explorer in the current LyX process, so copy & paste
works and data is shared between all windows. Like on Mac OS X, this is
the standard behavior for Windows applications.
* LyX startup
A mutex should be created using CreateMutex and a unique identifier. If
this succeeds, the usual startup can continue.
If the return value is ERROR_ALREADY_EXISTS, the current user is already
running LyX. In this case a new window should be created in the existing
process. Any files specified on the command line should be opened in
this window.
* Communicating to existing LyX process
After it has determined that LyX is already running, the HWND of one of
the current windows needs to be found. This can be done by creating a
unique window message with RegisterWindowMessage and the unique
identifier. This message should be sent to all open windows using
EnumWindows. In GuiApplication.C, a WinEventHandler function can capture
this message and send a return value, so the calling process knows that
LyX is found.
To open files in this process a WM_COPYDATA message with a
COPYDATASTRUCT can be used to send the filename (probably in Unicode?),
which will also be handled in the WinEventHandler.
* Command line option
A command line option can be added to disable this behavior (that is,
start a new instance). I think this is better than a preference because
it allows one to create a shortcut to start a new instance.
Regards,
Joost