Студия web-дизайна Хостмэйк
Наши работыКонтактыО компанииОтзывыГлоссарийСтатьи

Разные вопрос и ответы по C++ Builder

Статьи Программирование на С/С++


  1. Регистрация редактора свойства типа
    AnsiString


    // Регистрация редактора свойства
    типа AnsiString производится следующим образом. Напишите вспомогательную
    функцию:
    TTypeInfo
    *AnsiStringTypeInfo(void)
    {
    TTypeInfo *typeinfo = new
    TTypeInfo;
    typeinfo->Kind = tkLString;
    typeinfo->Name =
    "AnsiString";
    return typeinfo;
    }
    // ... и
    используйте ее в вызове RegisterPropertyEditor
    // (где TMyComponent - имя
    класса компонента,
    // MyStringProperty - имя свойства типа AnsiString,
    //
    TMyStringPropertyEditor - имя класса редактора свойства
    // типа
    AnsiString).
    RegisterPropertyEditor(AnsiStringTypeInfo(),
    __classid(TMyComponent),
    "MyStringProperty",
    __classid(TMyStringPropertyEditor));


  2. Мигание иконкой в панели задач

    color=green>// Чтобы помигать иконкой приложения в панели задач, разместите на
    форме компонент TTimer (Timer1) и напишите следующий обработчик события OnTimer
    (предварительно выставив интервал таймера и сделав его
    активным):
    void __fastcall TForm1::Timer1Timer(TObject
    *Sender)
    {
    FlashWindow(Application->Handle,
    false);
    FlashWindow(Application->Handle,
    true);
    }


  3. Запуск скринсейвера из программы

    color=green>// Следующий код запустит скринсейвер Handle - дескриптор окна вашей
    программы (программисты на C++Builder могут использовать
    Application->Handle):
    SendMessage(Handle, WM_SYSCOMMAND,
    SC_SCREENSAVE, 0);


  4. Скрытие таскбара

    // Напишите
    следующий код:

    void __fastcall TForm1::Button1Click(TObject
    *Sender)
    {
    HWND H;
    H=FindWindow("Shell_TrayWnd",NULL); color=green> //находим хандл окна таскбара
    ShowWindow(H,
    SW_HIDE);//делаем его
    невидимым

    Sleep(2000);
    ShowWindow(H, SW_SHOW); color=green>//делаем его видимым
    }


  5. Переключение раскладки клавиатуры (конкретный
    язык)


    // Напишите следующий
    код:

    LoadKeyboardLayout("00000409", KLF_ACTIVATE); color=green>// Английская
    LoadKeyboardLayout("00000419",
    KLF_ACTIVATE);// Русская


  6. Переключение раскладки клавиатуры

    color=green>// Напишите следующий код:
    ActivateKeyboardLayout(0,
    0);


  7. Программная очистка корзины (для Windows
    98)


    // Напишите следующий код:
    void
    __fastcall TForm1::Button1Click(TObject *Sender)
    {
    /*
    Очистка корзины
    Есть флаги - NULL - как обычно, т.е. по
    умолчанию
    SHERB_NOCONFIRMATION 0x00000001 - без запроса на
    удаление
    SHERB_NOPROGRESSUI 0x00000002 - без показа удаления

    SHERB_NOSOUND 0x00000004 - без звука
    при желании флаги можно сочетать
    через | */

    char sh[500];
    SHEmptyRecycleBin(Handle,
    sh, SHERB_NOSOUND|SHERB_NOCONFIRMATION);
    }


  8. Запуск браузера

    // Напишите
    следующий код:

    void __fastcall TForm1::Label1Click(TObject
    *Sender)
    {
    ShellExecute(Handle, "open", "http://google.com/",
    0,
    0, SW_SHOWNORMAL);
    }


  9. Запуск почтового клиента

    //
    Напишите следующий код:

    void __fastcall
    TForm1::Label1Click(TObject
    *Sender)
    {
    ShellExecute(Handle,NULL,"mailto:newcb@narod.ru?subject=Tema",
    NULL,NULL,SW_SHOWNORMAL);
    }


  10. Как добавить код на ассемблере

    color=green>// Ассемблеровские вставки делаются так:
    asm
    {
    // код ассемблера
    }


  11. Как сделать Shutdown (закрыть все запущенные
    приложения)


    // напишите следующий код:

    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    // Get a token for this process.
    if (!OpenProcessToken(GetCurrentProcess(),
    TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    ShowMessage("OpenProcessToken");
    // Get the LUID for the shutdown privilege.
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
    &tkp.Privileges[0].Luid);
    tkp.PrivilegeCount = 1; // one privilege to set
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    // Get the shutdown privilege for this process.
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
    (PTOKEN_PRIVILEGES)NULL, 0);
    // Cannot test the return value of AdjustTokenPrivileges.
    if (GetLastError() != ERROR_SUCCESS)
    ShowMessage("AdjustTokenPrivileges");
    // Shut down the system and force all applications to close.
    if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE , 0))
    ShowMessage("ExitWindowsEx");



  12. Какая на программа активна

    color=green>// Для того что бы узнать какая программа активна кинте на форму
    таймер Timer1 и метку Label1 напишите следующий код:

    void __fastcall
    TForm1::Timer1Timer(TObject *Sender)
    {
    HANDLE hWnd;
    hWnd =
    GetForegroundWindow();
    char szTitle[41] =
    {0};
    GetWindowText(hWnd,szTitle,40);
    Label1->Caption =
    AnsiString(szTitle);
    }


  13. Блокировка клавиатуры и мыши

    color=green>// Для блокировки клавиатуры и мыши напишите следующий
    код:

    void __fastcall TForm1::Button1Click(TObject
    *Sender)
    {
    HINSTANCE hDll;
    //ниже прототип будущей
    функции

    DWORD __stdcall (*BlockInput)(bool Status);
    DWORD
    Result;
    Memo1->Lines->Add("");
    Memo1->Lines->Add("Загрузка
    функции BlockInput()...");
    hDll =
    LoadLibrary("User32.dll");
    Memo1->Lines->Add("hDll = " +
    IntToHex(int(hDll), 8));
    BlockInput = (DWORD __stdcall (*)(bool
    Status))GetProcAddress(hDll,
    "BlockInput");
    Memo1->Lines->Add("BlockInput
    = " + IntToHex(int(BlockInput),
    8));
    if(!BlockInput)
    {
    Memo1->Lines->Add("Ошибка!!!");
    FreeLibrary(hDll);
    return;
    }
    Memo1->Lines->Add("Выполняем
    BlockInput(true)...");
    Result =
    BlockInput(true);
    Memo1->Lines->Add("Result = " +
    IntToStr(Result));
    if(Result)
    {
    Memo1->Lines->Add("Теперь
    клиатура и мышь доступны только, если нажать
    CTRL+ALT+DEL");
    Memo1->Lines->Add("Ждем 15
    сек...");
    Sleep(15000);
    }
    else
    Memo1->Lines->Add("Ошибка!!!");
    Memo1->Lines->Add("Восстанавливаем
    все как
    было...");
    BlockInput(false);
    FreeLibrary(hDll);
    Memo1->Lines->Add("Готово.");
    }


  14. Как из тела программы запустить обработчик события (как
    функцию)


    // напишите следующий код в нужном
    месте:

    {
    ...
    Form1->Button1Click(Form1);
    ...
    }


  15. Определение количества элементов в
    массиве


    Чтобы в Run Time определить количество
    элементов в массиве, можно воспользоваться макросом ARRAYSIZE,
    определённым в файле sysopen.h следующим образом:

    #define ARRAYSIZE(a)
    (sizeof(a)/sizeof(a[0]))


  16. Имитации нажатия левой кнопки мыши

    color=green>// Напищите слеующий код в нужном месте:
    INPUT
    inp[2];
    memset(inp,0,sizeof(inp));
    inp[0].type=INPUT_MOUSE;
    inp[0].mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
    inp[1].type=INPUT_MOUSE;
    inp[1].mi.dwFlags=MOUSEEVENTF_LEFTUP;
    SendInput(2,inp,sizeof(INPUT));

  17. По материаллам сайта: www.realcoding.net

    16.02.2006

Телефон

+7 8636 237-836

Поиск

VSESMI.ru — новости в СМИ.
Один из больших по объему информации проектов, работающих под управлением HostCMS.

Tur-Hotel.ru — отзывы об отелях
На сайте представлено описание отелей, рейтинг отелей с отзывами туристов.