Ver Mensaje Individual
  #2  
Antiguo 30-05-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita