Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как узнать сколько страниц распечатано


Автор: kj20 5.7.2006, 11:12
Значит следующая проблема: есть сеть маленькая, есть 2 принтера, задача в следующем - как узнать сколько страниц распечатано на каждом принтере за определенный период времени? (т.е. кто-то печатает сверх нормы, тратит картридж, необходимо его вычислить).

Как это можно организовать, как отловить?
 

Автор: chaos 6.7.2006, 06:33
один вариант есть - подключиться к диспетчеру печати(те perfmon.msc) 

Автор: kj20 6.7.2006, 09:06
Цитата(chaos @ 6.7.2006,  06:33)
один вариант есть - подключиться к диспетчеру печати(те perfmon.msc)

А как это сделать, ну на примере небольшом? Где можно почитать? 

Автор: chaos 6.7.2006, 15:07
вот тебе пример из msdn думаю разберешься. того гляди и поможет
Код

#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <Pdh.h>
#pragma comment(lib, "Pdh.lib")


#define SAMPLE_INTERVAL_MS  1000
#define MAXPATH 80


int _tmain(int argc, _TCHAR* argv[])
{
   HQUERY          hQuery;
   HCOUNTER        *pCounterHandle;
   PDH_STATUS      pdhStatus;
   PDH_FMT_COUNTERVALUE   fmtValue;
   DWORD           ctrType;
   SYSTEMTIME      stSampleTime;
   PDH_BROWSE_DLG_CONFIG  BrowseDlgData;
   TCHAR            szPathBuffer[MAXPATH];
   int             nRetCode = 0;

   // Open the query object.
   pdhStatus = PdhOpenQuery (0, 0, &hQuery);

   // Allocate the counter handle array. Allocate room for
   //  one handle per command line arg, not including the
   //  executable file name.
   pCounterHandle = (HCOUNTER *)GlobalAlloc(GPTR, sizeof(HCOUNTER));
   // Zero the contents of the structure.
   memset (&BrowseDlgData, 0, sizeof(PDH_BROWSE_DLG_CONFIG));

   // Initialize the browser dialog window settings.
   BrowseDlgData.bIncludeInstanceIndex = FALSE;   
   BrowseDlgData.bSingleCounterPerAdd = TRUE;
   BrowseDlgData.bSingleCounterPerDialog = TRUE;  
   BrowseDlgData.bLocalCountersOnly = FALSE;      
   BrowseDlgData.bWildCardInstances = TRUE;
   BrowseDlgData.bHideDetailBox = TRUE;
   BrowseDlgData.bInitializePath = FALSE;     
   BrowseDlgData.bDisableMachineSelection = FALSE;
   BrowseDlgData.bIncludeCostlyObjects = FALSE;
   BrowseDlgData.bReserved = TRUE;
   BrowseDlgData.hWndOwner = NULL;   
   BrowseDlgData.bReserved = FALSE;           
   BrowseDlgData.szReturnPathBuffer = szPathBuffer;
   BrowseDlgData.cchReturnPathLength = MAXPATH;;
   BrowseDlgData.pCallBack = NULL;   
   BrowseDlgData.dwCallBackArg = 0;
   BrowseDlgData.CallBackStatus = ERROR_SUCCESS;
   BrowseDlgData.dwDefaultDetailLevel = PERF_DETAIL_WIZARD;
   BrowseDlgData.szDialogBoxCaption = L"Select a counter to monitor.";

   // Display the counter browser window.
   pdhStatus = PdhBrowseCounters (&BrowseDlgData);

   
   pdhStatus = PdhAddCounter (hQuery,
                              szPathBuffer, 
                              0, 
                              pCounterHandle);


   //szPathBuffer = 0x0012fe30 "\\HQ-DKONONENKO\Ñèñòåìà\Âðåìÿ ðàáîòû ñèñòåìû"
   pdhStatus = PdhCollectQueryData (hQuery);

   // Print counter values until a key is pressed.
   while (!_kbhit()) {

     // Wait one interval.
     Sleep(SAMPLE_INTERVAL_MS);

     // Get the sample time.
     GetLocalTime (&stSampleTime);

     // Get the current data values.
     pdhStatus = PdhCollectQueryData (hQuery);

     // Print the time stamp for the sample.
     _tprintf (
           TEXT("\n\"%2.2d/%2.2d/%4.4d %2.2d:%2.2d:%2.2d.%3.3d\""),
               stSampleTime.wMonth, 
               stSampleTime.wDay, 
               stSampleTime.wYear,
               stSampleTime.wHour, 
               stSampleTime.wMinute, 
               stSampleTime.wSecond,
               stSampleTime.wMilliseconds);

     // Get the current value of this counter.
     pdhStatus = PdhGetFormattedCounterValue (*pCounterHandle,
                                              PDH_FMT_DOUBLE,
                                              &ctrType,
                                              &fmtValue);

     if (pdhStatus == ERROR_SUCCESS) {
         _tprintf (TEXT(",\"%.20g\""), fmtValue.doubleValue);
     } else {

         // Print the error value.
         _tprintf (TEXT(".\"-1\"")); 
     }
   }

   // Close the query.
   pdhStatus = PdhCloseQuery (hQuery);

   return nRetCode;

    return 0;
}

 

смотри объект очередь печати 

Автор: likehood 6.7.2006, 15:18
Есть специальные утилитки, которые следят за принтером и записывают в лог что и когда на принтере печаталось. Сам как то ставил у себя в сети такую утилитку, только давно только это было, название уже забыл. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)