Give this a whirl. Proof of concept only. Usual warnings apply - add error traps etc. Will only work on current document, so you will have to plant events for all documents that are open and opened.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using acadApp = Autodesk.AutoCAD.ApplicationServices.Application;
namespace WblockTests
{
public class Entrypoint : IExtensionApplication
{
#region Class vars
Document currentDoc;
Database currentDb, wblockedDb;
Editor ed;
bool wblockCommandStarted;
#endregion
#region IExtensionApplication Members
public void Initialize()
{
// grab standarad things of interest
currentDoc = acadApp.DocumentManager.MdiActiveDocument;
currentDb = currentDoc.Database;
ed = currentDoc.Editor;
// plant doc events
currentDoc.CommandWillStart += new CommandEventHandler(currentDoc_CommandWillStart);
currentDoc.CommandCancelled += new CommandEventHandler(currentDoc_CommandCancelled);
currentDoc.CommandEnded += new CommandEventHandler(currentDoc_CommandEnded);
currentDoc.CommandFailed += new CommandEventHandler(currentDoc_CommandFailed);
// plant database events
Database.DatabaseConstructed += new EventHandler(Database_DatabaseConstructed);
}
void currentDoc_CommandFailed(object sender, CommandEventArgs e)
{
if (wblockCommandStarted)
wblockCommandStarted = false;
}
void currentDoc_CommandEnded(object sender, CommandEventArgs e)
{
if (wblockCommandStarted)
wblockCommandStarted = false;
}
void currentDoc_CommandCancelled(object sender, CommandEventArgs e)
{
if (wblockCommandStarted)
wblockCommandStarted = false;
}
void Database_DatabaseConstructed(object sender, EventArgs e)
{
if (wblockCommandStarted)
{
wblockedDb = sender as Database;
// plant some events for this wblocked dbase
wblockedDb.SaveComplete += new DatabaseIOEventHandler(wblockedDb_SaveComplete);
}
}
void wblockedDb_SaveComplete(object sender, DatabaseIOEventArgs e)
{
if (wblockCommandStarted)
{
if (wblockedDb.LastSavedAsVersion != DwgVersion.AC1800)
{
wblockedDb.SaveAs(e.FileName, DwgVersion.AC1800);
}
}
}
void currentDoc_CommandWillStart(object sender, CommandEventArgs e)
{
if (e.GlobalCommandName == "WBLOCK")
{
wblockCommandStarted = true;
}
}
public void Terminate()
{
// Nothing to see here - move along...
}
#endregion
}
}
I think you will get the idea.
Cheers,
Glenn.