• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

BattleMage

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

P.S.: заранее спасибо!
 
E

European

<!--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

1) предположим CP_ACP (кодовая страница ANSI по умолчанию)
2) спасибо...
 
E

European

<!--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

как это написать на языке программирования? первый параметр я так понимаю и будет CP_ACP, а второй какой? в результате функция выдаст 0, если не доступна кодовая страница, и 1, если да?
 
E

European

<!--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

блин... так просто? :) спасибо! никуда не уходи, ща че-нить ещё спрошу... я же только учусь ;)
 
E

European

<!--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

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

глобальные переменные:
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

ну предупреждения :) суть от этого не очень меняется...
 
E

European

<!--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

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

BattleMage

Со всем предыдущим разобрался! Спасибо! Вот ещё вопросик. Нужно воспользоваться константой 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);
}
 
E

European

не компилируется или не работает?

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

BattleMage

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

Код:
SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT,StrToInt(Edit16-Text)*60,0,SPIF_UPDATEINIFILE);

про умножение на 60 прочитал на каком-то сайте... вообще не понимаю зачем, мы в секундах что ли его выстанавливаем?
 
P

Pasha

Для: BattleMage
MSDN по SystemParametersInfo: This value is the amount of time, in seconds, that the system must be idle before the screen saver activates.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!