| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 
 | #include "X-Tension.h" 
#include <string>
#include <fstream>
#include <Windows.h>
 
using namespace std;
 
 
/////////////////////////////////////////////////////////////////////////////
// XT_Init = fonction lancée en premier après le démarrage de l'X-Tension
 
LONG __stdcall XT_Init(DWORD nVersion, DWORD nFlags, HANDLE hMainWnd, void* lpReserved)
{
 
	XT_RetrieveFunctionPointers();
 
	// messages d'accueil /
	XWF_OutputMessage(L"INIT --- INIT --- INIT", 0);
	XWF_OutputMessage(L"---------> Bienvenue dans ma première X-Tension!!!", 0);
 
	return 1;
 
}
 
///////////////////////////////////////////////////////////////////////////////////////////////
// XT_About = fonction lancée quand on clique sur les trois petits points du menu X-Tensions 
 
LONG __stdcall XT_About(HANDLE hParentWnd, void* lpReserved)
{
	XWF_OutputMessage(L"---------> About", 0);
 
	return 0;
}
 
//////////////////////////////////////////////////////////////////////////////
// XT_Prepare
 
LONG __stdcall XT_Prepare(HANDLE hVolume, HANDLE hEvidence, DWORD nOpType, void* lpReserved)
{
 
	return 0;
}
 
 
//////////////////////////////////////////////////////////////////////////////
// XT_ProcessItem
 
LONG __stdcall XT_ProcessItem(LONG nItemID, void* lpReserved)
{
 
	XWF_OutputMessage(L"PROCESS ITEM --- PROCESS ITEM --- PROCESS ITEM", 0);
 
	return 0;
}
 
///////////////////////////////////////////////////////////////////////////////
// XT_ProcessItemEx
 
LONG __stdcall XT_ProcessItemEx(LONG nItemID, HANDLE hItem, void* lpReserved)
{
	XWF_OutputMessage(L"PROCESS ITEM EX --- PROCESS ITEM EX --- PROCESS ITEM EX", 0);
 
	// on ajoute un commentaire à cet objet 
	XWF_AddComment(nItemID, L"mon_commentaire_cool", 1);
 
	// donne le nom et la taille du fichier traité 
	wstring str;
	auto num = XWF_GetItemSize(nItemID);
	str = XWF_GetItemName(nItemID);
	str += L" ";
	str += to_wstring(num);
	str += L" bytes";
	XWF_OutputMessage(str.c_str(), 0);
 
	return 0;
}
 
 
////////////////////////////////////////////////////////////////////////////////
// XT_PrepareSearch
 
LONG __stdcall XT_PrepareSearch(struct PrepareSearchInfo* PSInfo, struct CodePages* CPages)
{
	XWF_OutputMessage(L"PREPARE SEARCH - PREPARE SEARCH - PREPARE SEARCH", 0);
 
	return 1;
}
 
 
///////////////////////////////////////////////////////////////////////////////
// XT_ProcessSearchHit
 
LONG __stdcall XT_ProcessSearchHit(struct SearchHitInfo* info)
{
 
	return 0;
 
}
 
//////////////////////////////////////////////////////////////////////////////
// XT_Finalize
 
LONG __stdcall XT_Finalize(HANDLE hVolume, HANDLE hEvidence, DWORD nOpType, void* lpReserved)
{
	XWF_OutputMessage(L"FINALIZE --- FINALIZE --- FINALYSE", 0);
 
	SearchInfo SInfo;
	SearchInfo *SIPtr = &SInfo;
 
	SIPtr->iSize = sizeof(*SIPtr);
	SIPtr->hVolume = 0;
	//SIPtr->lpSearchTerms = L"[a-zA-Z]+:\/\/\0";        // une expression régulière avec GREP,  nFlags=65 (GREP + logical search)
	SIPtr->lpSearchTerms = L"tartes\r\nflambee";
	SIPtr->nFlags = 1;
	SIPtr->nSearchWindow = 0;
 
	CodePages CPages;
	CodePages *CPPtr = &CPages;
 
	CPPtr->iSize = sizeof(*CPPtr);
	CPPtr->nCodePage1 = 1252;
	CPPtr->nCodePage2 = 1200;
	CPPtr->nCodePage3 = 65001;
	CPPtr->nCodePage4 = 0;
	CPPtr->nCodePage5 = 0;
 
 
	// fonction qui permet une recherche simultanée selon les lpSearchTerms définis
	XWF_Search(&SInfo, &CPages);
 
 
	// a l'issue de la recherche on alimente un fichier txt sur le bureau de l'utilisateur 
	string const nomFichier{ R"(C:\Users\tux\Desktop\history_search.txt)" };
	ofstream monFlux{ nomFichier };
 
	if (monFlux)
	{
		int taille;
		taille = SIPtr->iSize;
 
		wstring str;
		str = SIPtr->lpSearchTerms;
		XWF_OutputMessage(str.c_str(), 0);
 
		XWF_OutputMessage(L"mon fichier est ouvert", 0);
		monFlux << "Historique de recherche : " << endl;
		monFlux << taille << endl;
 
	}
	else
	{
		XWF_OutputMessage(L"erreur ouverture fichier", 0);
	}
 
	return 0;
}
 
 
///////////////////////////////////////////////////////////////////////////////
// XT_Done
 
LONG __stdcall XT_Done(void* lpReserved)
{
	XWF_OutputMessage(L"DONE --- DONE --- DONE", 0);
	XWF_OutputMessage(L"------------------------------------------------------------------------------------", 0);
	return 0;
} | 
Partager