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

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

  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.580
    Симпатии:
    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.580
    Симпатии:
    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.580
    Симпатии:
    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.580
    Симпатии:
    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.580
    Симпатии:
    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.580
    Симпатии:
    0
    не компилируется или не работает?

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

    BattleMage Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    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
    Просмотров:
    916
  2. DreamForse
    Ответов:
    0
    Просмотров:
    2.223
  3. Vadik(R)
    Ответов:
    1
    Просмотров:
    1.449
  4. Vadik(R)
    Ответов:
    1
    Просмотров:
    1.417
  5. alekssgor
    Ответов:
    0
    Просмотров:
    1.918

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