SitemapInfoHomeTips und Tricks - Bildwiederholungsrate

Homepage

Software,
Download

Software-
entwicklung

  Tips und Tricks

Nachrichten-
technik

Internet

Aktuelles,
Sonstiges

Infos,
Kontakt

Sitemap


Mit der nachfolgenden Funktion können Sie unter Win32 die Bildwiederholungsrate des Monitors ermitteln.


#include <ddraw.h>

// GetVerticalRefreshRate()
//
// Ermittelt die Bildwiederholungsrate des Monitors in Hz
//
DWORD GetVerticalRefreshRate(void)
{
   
// Bildwiederholungsrate via GetDeviceCaps ermitteln
   
// Der Index VREFRESH wird nur von Windows NT unterstützt
   HDC hdcScreen = GetDC(NULL);
   DWORD dwVRefresh = GetDeviceCaps(hdcScreen, VREFRESH);
   ReleaseDC(NULL, hdcScreen);

   // Wenn nicht ermittelbar, Bildwiederholungsrate
   // via DirectX bestimmen.
   if (dwVRefresh == 0 || dwVRefresh == 1)
      {
      
// Zugriff auf DirectDraw-Bibliothek via LoadLibrary
      // und GetProcAddress, da nicht sichergestellt ist,
      // daß DirectX (min. Version 1.0) vorhanden ist.
      UINT uErrMode = SetErrorMode(SEM_NOOPENFILEERRORBOX);
      HINSTANCE hInstDDraw = LoadLibrary("DDRAW.DLL");
      SetErrorMode(uErrMode);

      if (hInstDDraw != NULL)
      {
         typedef HRESULT (WINAPI *DIRECTDRAWCREATE)(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);

         DIRECTDRAWCREATE DirectDrawCreate = (DIRECTDRAWCREATE)GetProcAddress(hInstDDraw, "DirectDrawCreate");
         if (DirectDrawCreate != NULL)
         {
            LPDIRECTDRAW lpDD;

            // DirectDraw-Objekt erzeugen
            if (SUCCEEDED(DirectDrawCreate(NULL, &lpDD, NULL)))
            {
               DWORD dwTime1, dwTime2;

               // GetMonitorFrequency wird nicht von
               // jedem Grafiktreiber unterstützt
               // lpDD->GetMonitorFrequency(&dwVRefresh);

               // Zeit zwischen den Austastlücken ermitteln.
               // Aufgrund der Timerauflösung fünf mal hintereinander.
               lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND, NULL);
               dwTime1 = timeGetTime();
// Erster Meßpunkt
               lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND, NULL);
               lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND, NULL);
               lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND, NULL);
               lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND, NULL);
               lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND, NULL);
               dwTime2 = timeGetTime();
// Zweiter Meßpunkt

               // Aus der Dauer von fünf Bildern
               // Vertikalfrequenz ermitteln
               if (dwTime2 > dwTime1)
                  dwVRefresh = 5000 / (dwTime2 - dwTime1);

               // DirectDraw-Objekt freigeben
               lpDD->Release();
            }
         }

         // DirectDraw-Bibliothek freigeben
         FreeLibrary(hInstDDraw);
      }
   }

   return dwVRefresh;
}

[ refrate.cpp ]

[ << Vorheriger ] [ Übersicht ] [ Nächster >> ]

TopHomepage » Softwareentwicklung » Tips und Tricks » Bildschirmfrequenz