Справочник советов и примеров по C++Builder

Разное




  • Регистрация редактора свойства типа 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));

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

    // Чтобы помигать иконкой приложения в панели задач, разместите на форме компонент TTimer (Timer1) и напишите следующий обработчик события OnTimer (предварительно выставив интервал таймера и сделав его активным):

    void __fastcall TForm1::Timer1Timer(TObject *Sender)

    {

    FlashWindow(Application->Handle, false);

    FlashWindow(Application->Handle, true);

    }

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

    // Следующий код запустит скринсейвер Handle - дескриптор окна вашей программы (программисты на C++Builder могут использовать Application->Handle):

    SendMessage(Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

  • Скрытие таскбара

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

    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    HWND H;

    H=FindWindow("Shell_TrayWnd",NULL); //находим хандл окна таскбара

    ShowWindow(H, SW_HIDE);//делаем его невидимым

    Sleep(2000);

    ShowWindow(H, SW_SHOW);//делаем его видимым

    }

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

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

    LoadKeyboardLayout("00000409", KLF_ACTIVATE);// Английская

    LoadKeyboardLayout("00000419", KLF_ACTIVATE);// Русская

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

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

    ActivateKeyboardLayout(0, 0);


  • Программная очистка корзины (для 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);

    }



  • Запуск браузера

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

    void __fastcall TForm1::Label1Click(TObject *Sender)

    {

    ShellExecute(Handle, "open", "http://google.com/",

    0, 0, SW_SHOWNORMAL);

    }



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

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

    void __fastcall TForm1::Label1Click(TObject *Sender)

    {

    ShellExecute(Handle,NULL,"mailto:newcb@narod.ru?subject=Tema",

    NULL,NULL,SW_SHOWNORMAL);

    }



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

    // Ассемблеровские вставки делаются так:

    asm {

    // код ассемблера

    }



  • Как сделать 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");



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

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



    void __fastcall TForm1::Timer1Timer(TObject *Sender)

    {

    HANDLE hWnd;

    hWnd = GetForegroundWindow();

    char szTitle[41] = {0};

    GetWindowText(hWnd,szTitle,40);

    Label1->Caption = AnsiString(szTitle);

    }



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

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

    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("Готово.");

    }



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

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

    {

    ...

    Form1->Button1Click(Form1);

    ...

    }



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

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

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

    Автор: Srpj Сайт:



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

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

    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));

    Автор:


    Содержание раздела