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

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем BattleMage, 15 фев 2008.

Наш партнер Genesis Hackspace
  1. BattleMage

    BattleMage Гость

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

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    <!--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]
    Лучше так:
    Код (Text):
    if( GetKeyState(VK_NUMLOCK) ) Edit1->Text="включена";
    else Edit1->Text="выключена";
     
  3. BattleMage

    BattleMage Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    <!--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]
    И? Не понимаю в чем вопрос?
     
  5. BattleMage

    BattleMage Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    <!--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]
    Ах, вот оно что :)
    Код (Text):
    CPINFO Info = {0};
    if( GetCPInfo( CP_ACP, &Info ) )
    {
    // доступна
    }
     
  7. BattleMage

    BattleMage Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    <!--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]
    Вот я и думаю, что у тебя там могло вызвать вопросы ;)
     
  9. BattleMage

    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 не видит...
     
  10. BattleMage

    BattleMage Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    <!--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) подключи
     
  12. BattleMage

    BattleMage Гость

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

    BattleMage Гость

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

    Код (Text):
    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);
    }
     
  14. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    не компилируется или не работает?

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

    BattleMage Гость

    вот такого:
    bool f;
     
  16. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    Так проблема где?
     
  17. BattleMage

    BattleMage Гость

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

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

    Pasha Гость

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

    BattleMage Гость

    всем спасибо!
     
Загрузка...
Похожие Темы - Простейшие Winapi функции
  1. bestguru
    Ответов:
    0
    Просмотров:
    935
  2. DreamForse
    Ответов:
    0
    Просмотров:
    2.336
  3. Vadik(R)
    Ответов:
    1
    Просмотров:
    1.550
  4. Vadik(R)
    Ответов:
    1
    Просмотров:
    1.509
  5. alekssgor
    Ответов:
    0
    Просмотров:
    1.933

Поделиться этой страницей