Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Как изменить яркость монитора и контрастность   Найти похожие ветки 

 
Sergeika   (2004-10-03 06:33) [0]

Значит нужно сделать так, что бы можно было узнать какая сейчас яркость установлена в настройках для монитора и  потом её изменить.
В MSDN СКАЗАНО, что нужно юзать ChangeDisplaySettingsEx.
Так вот юзал, а толку нет, не хочет работать.
Кто сталкивался с подобной задачей или может просто знает как, помогите разобраться.
Зараннее благодарен.


 
KilkennyCat ©   (2004-10-03 07:46) [1]

как же Вы ее юзали-то?

LONG ChangeDisplaySettingsEx(
 LPCTSTR lpszDeviceName,  
 LPDEVMODE lpDevMode,    
 HWND hwnd,              
 DWORD dwflags,          
 LPVOID lParam);

lpszDeviceName - это у нас девайс
lpDevMode - имеет следующее:
 dmBitsPerPel  
 dmPelsWidth  
 dmPelsHeight  
 dmDisplayFlags  
 dmDisplayFrequency  
 dmPosition

hwnd - ну это явно

dwflags - флажок, все перечислять не буду, наиболее интересный - CDS_VIDEOPARAMETERS

что с ним можно:
ежели он стоит, то lParam указывает на следующее:
dwOffset;
dwCommand;
dwFlags;
dwMode;
dwTVStandard;
dwAvailableModes;
dwAvailableTVStandard;
dwFlickerFilter;
dwOverScanX;
dwOverScanY;
dwMaxUnscaledX;
dwMaxUnscaledY;
dwPositionX;
dwPositionY;
dwBrightness; ----- вот они!
dwContrast;   -----/
dwCPType;
dwCPCommand;
dwCPStandard;
dwCPKey;
bCP_APSTriggerBits;
bOEMCopyProtection[256];


Что сложного?


 
XProger ©   (2004-10-03 08:30) [2]


// получение текущей гаммы в процентах (69% по дефолту у большинства)
function xglGamma_Get: integer; stdcall;
var
ramp : array [0..256 * 3 - 1] of WORD;
rgb  : array [0..2] of double;

sum   : double;
count : integer;
min   : integer;
max   : integer;
A, B  : double;
i, j  : integer;
begin
rgb[0] := 1;
rgb[1] := 1;
rgb[2] := 1;

GetDeviceGammaRamp(DC, ramp);
// проходим по цветам в rgb
for i := 0 to 2 do
begin
sum   := 0;
count := 0;
min   := 256 * i;
max   := min + 256;
// разбираем формулу из xglGamma_Set
for j := min to max - 1 do
 if ramp[j] > 0 then
  begin
  B := (j mod 256)/256;
  A := ramp[j]/65536;
  sum := sum + ln(A)/ln(B);
  inc(count);
  end;
rgb[i] := sum / count;
end;

Result := 100 - trunc(((rgb[0] + rgb[1] + rgb[2])/3 - 0.23) * 100/(2.7 - 0.23));
end;

// установка гаммы (0 - темно 100 - ярко)
procedure xglGamma_Set(gamma: integer); stdcall;
var
ramp : array [0..256*3 - 1] of WORD;
i    : integer;
r    : double;
g    : double;

function Pow(x, y: double): double;
begin
Result := exp(y * ln(x));
end;

begin
xglGamma := gamma;
g := (100 - gamma)*(2.7 - 0.23)/100 + 0.23;

for i := 0 to 255 do
begin
r := pow(i/256, g)*65536;
if r < 0 then
 r := 0
else
 if r > 65535 then
  r := 65535;

ramp[i]       := trunc(r);
ramp[i + 256] := trunc(r);
ramp[i + 512] := trunc(r);
end;

SetDeviceGammaRamp(DC, ramp);
end;


 
KilkennyCat ©   (2004-10-03 16:27) [3]

хе... а я-то, дурилка картонная, считал всегда, что гамма - это вовсе не яркость с контрастностю...


 
Sergeika   (2004-10-05 21:37) [4]

Мне нужно изменить либо контрастность либо яркость, так как это можно сделать кнопками на мониторе. KilkennyCat © привёл структуру, какую надо, только вот напишите как её использовать и инизиализировать.
Заранне благодарен.


 
Sergeika   (2004-10-05 21:37) [5]

Мне нужно изменить либо контрастность либо яркость, так как это можно сделать кнопками на мониторе.
KilkennyCat © привёл структуру, какую и надо, только вот напишите как её использовать и инизиализировать.
Заранне благодарен.


 
Sergeika   (2004-10-06 21:42) [6]

Ну кто-нибудь помогите. Мастера!!!



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.034 c
4-1096971769
Shira333
2004-10-05 14:22
2004.11.14
Обработка нажатия чужой кнопки...


3-1097562054
zuk
2004-10-12 10:20
2004.11.14
Create/Update View (Access)


1-1098942518
NeyroSpace
2004-10-28 09:48
2004.11.14
Как отсортировать TVirtualStringTree?


1-1099116369
SSSdd
2004-10-30 10:06
2004.11.14
Как подсчитать время прошедшее между двумя датами?


14-1098942290
ИМХО
2004-10-28 09:44
2004.11.14
Рекордная серия Арсенала оборвалась...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский