Detecter activite sur port impression

revelata Messages postés 19 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 16 juin 2003 - 16 juin 2003 à 10:25
revelata Messages postés 19 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 16 juin 2003 - 16 juin 2003 à 12:23
Je souhaite detecter lorsque l'utilisateur lance une impression en C! Quelqu'un a une idée?

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 juin 2003 à 10:40
Salut mignonne,
la func dessous (win32) te donne le nbr impressions en cours. Tu peux donc mettre une boucle dans un thread par exemple pour voir quand nombre augmente, etc. Doit pas etre trop dur a modifier, vois dans msdn.

int NbrImprimEnCours() // -1 si erreur
{
char szname[80];
HANDLE hprnt, hheap;
BYTE *pmem;
DWORD len = 80;
int val = -1;
if(!GetDefaultPrinter(szname, &len)) return -1;
if(!OpenPrinter(szname, &hprnt, 0)) return -1;
len = 0;
GetPrinter(hprnt, 2, 0, 0, &len);
if(len) {
hheap = GetProcessHeap();
pmem = (BYTE*) HeapAlloc(hheap, 0, len);
if(pmem) {
if(GetPrinter(hprnt, 2, pmem, len, &len))
val = (int) ((PRINTER_INFO_2*)pmem)->cJobs;
HeapFree(hheap, 0, pmem);
}
}
ClosePrinter(hprnt);
return val;
}

BruNews, ciao...
0
revelata Messages postés 19 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 16 juin 2003
16 juin 2003 à 10:52
N'oublie pas que je suis blonde! Je voudrais scanner le port et lancer un truc du style:

hr = ADsOpenObject(...,
IID_IADsPrintQueue,
(void **) &pq);

if( !SUCCEEDED(hr) ) { return false; }
MessageBox(NULL,TEXT("OK1"),TEXT("OK1"),MB_OK);
hr = pq->QueryInterface(IID_IADsPrintQueueOperations,(void**)&pqo);
if(FAILED(hr)) {return false; }
hr = pqo->PrintJobs(&pColl);
MessageBox(NULL,TEXT("OK2"),TEXT("OK1"),MB_OK);
if(FAILED(hr)){
return false;}

hr = pColl->get__NewEnum(&pUnk);
if(FAILED(hr)){return false;;}

hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
if(FAILED(hr)){return false;}

VariantInit(&var);
hr = pEnum->Next(1, &var, &lFetch);
while(hr == S_OK)
{
if (lFetch == 1)
{
pDisp = V_DISPATCH(&var);

hr=pDisp->QueryInterface(IID_IADsPrintJob, (void**)&pJob);
if(FAILED(hr)){return false;}
hr=pJob->get_TotalPages(&numberPages);
if(FAILED(hr)){return false;}
hr=pJob->get_User(&Demandeur);
if(FAILED(hr)){return false;}

WCHAR * Quota=settingsInfo->printQuota;
MessageBox(NULL,Quota,TEXT("Quota"),MB_OK);
long pquota=_wtol(Quota);
pquota=pquota-numberPages;
WCHAR * Pquota=NULL;
_ltow(pquota,Pquota,10);
MessageBox(NULL,Pquota,TEXT("Pquota"),MB_OK);
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 juin 2003 à 11:07
Ce genre de chose ne tournera qu'avec un client Active Directory, faut y penser.
Je t'avais fait au + court, y a pas mal de taf en ce moment.
BruNews, ciao...
0
revelata Messages postés 19 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 16 juin 2003
16 juin 2003 à 11:28
Je travaille sur adsi le probleme c'est de savoir quand je recupere les printjob pour decrementer un quota de pages! Je voulais faire un scan du port, enfin plutot faire un demon d'impression améliorer
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
revelata Messages postés 19 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 16 juin 2003
16 juin 2003 à 12:23
Bon courage pour ton taf
0
Rejoignez-nous