CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Regulacja jasności monitora

Regulacja jasności monitora

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Regulacja jasności monitora

Nowy postprzez bodjanski » poniedziałek, 3 stycznia 2011, 23:11

Witam.
Szukam biblioteki albo może funkcji w Windows API, które umożliwiłyby mi regulację jasności monitora. Na początku pomyślałem o właściwości AlphaBlend i regulacji przezroczystości formy, ale to nie pozwala na klikanie i obsługę wszystkiego co jest na pulpicie pod formą. Chodzi mi o to, żeby znaleść taką funkcję, która by działała jak pokrętło pod monitorem albo jak suwak we właściwościach karty graficznej.
Avatar użytkownika
bodjanski
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): wtorek, 23 listopada 2010, 18:31
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: BDS2006
Gadu Gadu: 0
    Windows XPOpera

Programowa regulacja jasności monitora

Nowy postprzez Cyfrowy Baron » wtorek, 4 stycznia 2011, 01:00

W pliku nagłówkowym np. Unit1.h w sekcji private:

KOD cpp:     UKRYJ  
private:
        HMODULE hGDI32;

        typedef BOOL(WINAPI *TypSetDevBright)(HDC hDC, LPVOID lpBright);
        TypSetDevBright tSetDevBright;

        void LoadLibrary();
        void FreeLibrary();
        void ChangeBrightness(HDC hDC, int Brightness);
W pliku źródłowym np. Unit1.cpp. Zanim skopiujesz przejrzyj kod, gdyż pewne elementy już masz jak np. konstruktor klasy formularza, a inne to zdarzenia, które trzeba utworzyć:

KOD cpp:     UKRYJ  
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)  /* konstruktor klasy formularza */
        : TForm(Owner)
{
 hGDI32 = NULL;
 tSetDevBright = NULL;
}
//---------------------------------------------------------------------------
void TForm1::LoadLibrary()
{
 FreeLibrary();
 hGDI32 = ::LoadLibrary(L"gdi32.dll");

 if(hGDI32 != NULL)
 {
  tSetDevBright = (TypSetDevBright)GetProcAddress(hGDI32, "SetDeviceGammaRamp");

  if(tSetDevBright == NULL) FreeLibrary();
 }
}
//---------------------------------------------------------------------------
void TForm1::FreeLibrary()
{
 if(hGDI32 != NULL)
 {
  ::FreeLibrary(hGDI32);
  hGDI32 = NULL;
 }
}
//---------------------------------------------------------------------------
void TForm1::ChangeBrightness(HDC hDC, int Brightness)
{
 HDC hGDC = hDC;

 if(hDC == NULL) hGDC = GetDC(NULL); /* NULL = uchwyt do ekranu */

 if(hGDC != NULL)
 {
  unsigned short gArray[3][256];

  for (int x = 0; x < 256; x++)
  {
   int aValue = x * (Brightness + 128);

   if(aValue > 65535) aValue = 65535;

   gArray[0][x] = gArray[1][x] = gArray[2][x] = (USHORT)aValue;
  }

  if(hGDI32 == NULL) LoadLibrary();
  if(tSetDevBright != NULL) tSetDevBright(hGDC, gArray);

 }

 if (hDC == NULL) ReleaseDC(NULL, hGDC);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) /* zdarzenie OnClick - zmiana jasności */
{
 static int brightness = 128;

 if(brightness == 128) brightness = 256;
 else brightness = 128;

 ChangeBrightness(NULL, brightness);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 FreeLibrary();
}


Do zmiany jasności służy tutaj funkcja ChangeBrightness, która pobiera dwa argumenty. Pierwszy to uchwyt do urządzenia któremu chcesz zmienić jasność, podając wartość NULL podajesz uchwyt do ekranu. Drugi to wartość o jaką chcesz zmienić jasność i tutaj wartość 128 przywraca wartość domyślną zdefiniowaną w sterowniku karty graficznej, pokrętła na monitorze nie mają tutaj nic do rzeczy, gdyż jasność zmieniana jest programowo a nie sprzętowo. Wartość powyżej 128 ale nie większa niż 390 rozjaśnia ekran, natomiast wartość poniżej 128 ale nie mniejsza niż 0 przyciemnia ekran. Sterowanie jasnością ekranu działa tylko w takim zakresie w jakim pozwala na to sterownik karty graficznej.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Regulacja jasności monitora

Nowy postprzez bodjanski » piątek, 14 stycznia 2011, 18:59

Wielkie dzięki i pozdrowionka.
Avatar użytkownika
bodjanski
Bladawiec
Bladawiec
 
Posty: 10
Dołączył(a): wtorek, 23 listopada 2010, 18:31
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: BDS2006
Gadu Gadu: 0
    Windows XPOpera


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości

cron