2016-05-24 10 views
0

Ist es möglich, eine Datei in einer Art von Drag-Ereignis zu manipulieren?Drag & Drop C++ manipulieren Outlook-Datei vor dem Absturz

Wie Sie meine wissen die meisten Windows-Programme (Outlook in diesem speziellen Fall) verwenden Streams zu einem Drag & Drop-Operation, die bestimmte Programme von Drittanbietern nicht verstehen (z. B. Firefox, Chrome). Da ich nicht in der Lage bin, das Programmverhalten von Drittanbietern zu ändern, habe ich versucht, ein Outlook-Add-In zu codieren, das die Datei in einen temporären Ordner kopiert und die Drop-Informationen manipuliert, bevor das Drop-on-Programm auftaucht.

Ich habe das folgende Problem:

Event, an das ich zu stören bin eine extreme Abhilfe: Das „Dragenter“ COM-Ereignis in Outlook, so dass eine gezogenes E-Mail eines weiteren Ausblick Element überqueren muss ausgelöst werden . Es war nur zu Testzwecken. Die Frage ist, wo kann ich global hängen, wenn eine E-Mail gezogen wird und gleichzeitig die Drop-Informationen manipulieren oder meinen eigenen Drag & Drop (DoDragDrop (..)) zwingen?

HRESULT TDropTarget::DragEnter(IDataObject* pDataObj, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect) { 
    //... 
    //get data from pDataObj, create file and new IDataObject* pDataObject which points to file 
    DWORD dwResult = DoDragDrop(pDataObject, pDropSource, DROPEFFECT_COPY, pdwEffect); 

    if(dwResult == DRAGDROP_S_DROP) { // success! 
     OutputDebugString(TEXT("DRAGDROP_S_DROP\r\n")); 
    } else if (dwResult == DRAGDROP_S_CANCEL) { // cancelled 
     OutputDebugString(TEXT("DRAGDROP_S_CANCEL\r\n")); 
    } 

    pDataObject->Release(); 
    pDropSource->Release();  

    return S_OK; 
} 

Antwort

0

Sie können die DoDragDrop-Windows-API-Funktion zur Laufzeit dynamisch patchen. Sie können ein eigenes IDataObject erstellen, das das CF_HDROP-Format hinzufügt und dieses Objekt an die ursprüngliche Version von DoDragDrop() übergibt.