Простейшие Winapi функции

  • Автор темы BattleMage
  • Дата начала
B

BattleMage

#1
Доброго времени суток. Мой вопрос состоит из 2х частей. Для выполнения задания мне нужно воспользоваться функциями GetCpInfo() и GetKeyState(), определить параметры копьютера. Про первую вообще не понял ничего, хоть много в инете и пересмотрел... подскажите пожалуйста...
а по второй написал для клавиши Num Lock:
if (GetKeyState(VK_NUMLOCK)==1) Edit1->Text="включена"; else Edit1->Text="выключена";
это правильно?

P.S.: заранее спасибо!
 
04.09.2006
2 566
3
#2
<!--QuoteBegin-BattleMage+15:02:2008, 13:05 -->
<span class="vbquote">(BattleMage @ 15:02:2008, 13:05 )</span><!--QuoteEBegin-->Для выполнения задания мне нужно воспользоваться функциями GetCpInfo() и GetKeyState(), определить параметры копьютера.
[snapback]98249" rel="nofollow" target="_blank[/snapback]​
[/quote]
Какие именно параметры? GetCPInfo проверяет доступность указанной кодовой страницы.
Тут есть по-русски: [snapback]98249" rel="nofollow" target="_blank[/snapback]</div>[/quote]
Лучше так:
Код:
if( GetKeyState(VK_NUMLOCK) ) Edit1->Text="включена";
else Edit1->Text="выключена";
 
B

BattleMage

#3
1) предположим CP_ACP (кодовая страница ANSI по умолчанию)
2) спасибо...
 
04.09.2006
2 566
3
#4
<!--QuoteBegin-BattleMage+15:02:2008, 13:44 -->
<span class="vbquote">(BattleMage @ 15:02:2008, 13:44 )</span><!--QuoteEBegin-->1) предположим CP_ACP (кодовая страница ANSI по умолчанию)
[snapback]98259" rel="nofollow" target="_blank[/snapback]​
[/quote]
И? Не понимаю в чем вопрос?
 
B

BattleMage

#5
как это написать на языке программирования? первый параметр я так понимаю и будет CP_ACP, а второй какой? в результате функция выдаст 0, если не доступна кодовая страница, и 1, если да?
 
04.09.2006
2 566
3
#6
<!--QuoteBegin-BattleMage+15:02:2008, 14:00 -->
<span class="vbquote">(BattleMage @ 15:02:2008, 14:00 )</span><!--QuoteEBegin-->как это написать на языке программирования?
[snapback]98267" rel="nofollow" target="_blank[/snapback]​
[/quote]
Ах, вот оно что :)
Код:
CPINFO Info = {0};
if( GetCPInfo( CP_ACP, &Info ) )
{
// доступна
}
 
B

BattleMage

#7
блин... так просто? :) спасибо! никуда не уходи, ща че-нить ещё спрошу... я же только учусь ;)
 
04.09.2006
2 566
3
#8
<!--QuoteBegin-BattleMage+15:02:2008, 14:32 -->
<span class="vbquote">(BattleMage @ 15:02:2008, 14:32 )</span><!--QuoteEBegin-->блин... так просто? :)
[snapback]98281" rel="nofollow" target="_blank[/snapback]​
[/quote]
Вот я и думаю, что у тебя там могло вызвать вопросы ;)
 
B

BattleMage

#9
ещё есть задание определить цвет для символьных констант и изменить его на любой другой. ну определить это точно сделал правильно, а вот изменить - чет не до конца...

глобальные переменные:
COLORREF color1, color2, color3;
int c1=COLOR_DESKTOP, c2=COLOR_WINDOWTEXT, c3=COLOR_INFOTEXT;

по нажатию на эту кнопку должны поменяться цвета:
void __fastcall TForm1::Button5Click(TObject *Sender)
{
color1=0xFF0000; //синий
SetSysColor(1,&c1,&color1);

color2=0x00FF00; //зелёный
SetSysColor(1,&c2,&color2);

color3=0x0000FF; //красный
SetSysColor(1,&c3,&color3);
MessageDlg("Системные цвета изменены",mtInformation, TMsgDlgButtons() << mbOK, 0);
}

однако появляется 4 ошибки, 3 из которых одинаковые:
Build
[C++ Warning] Unit1.cpp(79): W8018 Assigning unsigned long to TColor
[C++ Warning] Unit1.cpp(80): W8018 Assigning unsigned long to TColor
[C++ Warning] Unit1.cpp(81): W8018 Assigning unsigned long to TColor
[C++ Error] Unit1.cpp(161): E2268 Call to undefined function 'SetSysColor'

он почему-то функцию SetSysColor не видит...
 
B

BattleMage

#10
ну предупреждения :) суть от этого не очень меняется...
 
04.09.2006
2 566
3
#11
<!--QuoteBegin-BattleMage+15:02:2008, 14:47 -->
<span class="vbquote">(BattleMage @ 15:02:2008, 14:47 )</span><!--QuoteEBegin-->он почему-то функцию SetSysColor не видит...
[snapback]98293" rel="nofollow" target="_blank[/snapback]​
[/quote]
Соответствующий header (*.h) подключи
 
B

BattleMage

#12
всё понял... просто пишется не SetSysColor, а SetSysColors :))
 
B

BattleMage

#13
Со всем предыдущим разобрался! Спасибо! Вот ещё вопросик. Нужно воспользоваться константой SPI_SETMENUDROPALIGNMENT функции SystemParametersInfo(). При нажатии на RadioButton1 устанавливается выравнивание "право", на RadioButton2 - "лево". Это правильно? Пишу прогу, не до конца понимая её...

Код:
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
f=1;
SystemParametersInfo(SPI_SETMENUDROPALIGNMENT,0,&f,SPIF_UPDATEINIFILE);
}

void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
f=0;
SystemParametersInfo(SPI_SETMENUDROPALIGNMENT,0,&f,SPIF_UPDATEINIFILE);
}
 
04.09.2006
2 566
3
#14
не компилируется или не работает?

f - какого типа? Вроде все должно быть ОК
 
B

BattleMage

#17
проблемы нет... сомнения, что иногда хуже, чем проблема... =))
надеюсь, что последнйи мой вопрос. Нужно воспользоваться константой SPI_SETMENUDROPALIGNMENT функции SystemParametersInfo(), чтобы установить интервал появления скринейвера (заставки) на экран. Правильно сделал?

Код:
SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT,StrToInt(Edit16-Text)*60,0,SPIF_UPDATEINIFILE);
про умножение на 60 прочитал на каком-то сайте... вообще не понимаю зачем, мы в секундах что ли его выстанавливаем?
 
P

Pasha

#18
Для: BattleMage
MSDN по SystemParametersInfo: This value is the amount of time, in seconds, that the system must be idle before the screen saver activates.