Puedes convertir a tu aplicación en una extensión del Shell, para elle debes ser capaz de recibir el mensaje
WM_SETTINGCHANGE que se envía al Shell y sus extensiones al producirse cambios. Esas notificaciones se envían mediante la API
SHChangeNotify. En tu caso debes controlar el valor SHCNE_CREATE:
Código:
typedef ULONG(WINAPI *PSHChangeNotifyRegister)(HWND hwnd, int fSources, LONG fEvents, UINT wMsg,
int cEntries, const SHChangeNotifyEntry *pshcne);
typedef BOOL (WINAPI *PSHChangeNotifyDeregister)(ULONG ulID);
// Convertir el formulario en receptor del mensaje WM_SETTINGCHANGE
void __fastcall TForm1::StartNotification()
{
PSHChangeNotifyRegister SHChangeNotifyRegister =
(PSHChangeNotifyRegister)GetProcAddress(GetModuleHandle("shell32.dll"), "SHChangeNotifyRegister");
SHChangeNotifyEntry shCNE;
shCNE.pidl = 0;
shCNE.fRecursive = TRUE;
// Eventos que se van a registrar
LONG Events = SHCNE_CREATE |SHCNE_DELETE;
m_ulSHChangeNotifyRegister = SHChangeNotifyRegister(Handle, SHCNRF_INTERRUPT_LEVEL | SHCNRF_SHELL_LEVEL, Events, WM_USER_SHELLCHANGED, 1, &shCNE);
}
//-------------------------------------------------------------------------
// Responder al mensaje
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
if(Message.Msg == WM_USER_SHELLCHANGED){
switch(Message.LParam & 0x7FFFFFF)
{
case SHCNE_CREATE:
// tu código dr creación de fichero
break;
case SHCNE_DELETE:
// tu código de destrucción de fichero
break;
}
}
TForm::WndProc(Message);
}
// Destructor del Form Eliminarnos como extensión del Shell:
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
PSHChangeNotifyDeregister SHChangeNotifyDeregister =
(PSHChangeNotifyDeregister)GetProcAddress(GetModuleHandle("shell32.dll"), "SHChangeNotifyDeregister");
if(m_ulSHChangeNotifyRegister)
SHChangeNotifyDeregister(m_ulSHChangeNotifyRegister);
}
Saludos.