Главная страница
    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.036 c
14-1098668960
Думкин
2004-10-25 05:49
2004.11.14
С днем рождения! 25 октября


3-1097587001
S@shka
2004-10-12 17:16
2004.11.14
Запрос на выборку


1-1099384385
WondeRu
2004-11-02 11:33
2004.11.14
Assert... Зачем он нужен???


3-1098082300
Леван
2004-10-18 10:51
2004.11.14
Что за чушь?


3-1098168809
Draught
2004-10-19 10:53
2004.11.14
Доступные SQL сервера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский