Главная страница
    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.038 c
1-1099061998
леха
2004-10-29 18:59
2004.11.14
list


14-1098344148
Игорь Шевченко
2004-10-21 11:35
2004.11.14
Ничего себе...


3-1097573006
Aser
2004-10-12 13:23
2004.11.14
Помогите пожалуйста с SQL-запросом


9-1089775193
Somebody
2004-07-14 07:19
2004.11.14
API vs DelphiX


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