Разное

  1. Регистрация редактора свойства типа AnsiString
  2. Мигание иконкой в панели задач
  3. Запуск скринсейвера из программы
  4. Скрытие таскбара
  5. Переключение раскладки клавиатуры (конкретный язык)
  6. Переключение раскладки клавиатуры
  7. Программная очистка корзины (для Windows 98)
  8. Запуск браузера
  9. Запуск почтового клиента
  10. Как добавить код на ассемблере
  11. Как сделать Shutdown (закрыть все запущенные приложения)
  12. Какая программа активна
  13. Блокировка клавиатуры и мыши
  14. Как из тела программы запустить обработчик события (как функцию)
  15. Определение количества элементов в массиве
  16. Имитации нажатия левой кнопки мыши
  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. Мигание иконкой в панели задач

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

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

    // Следующий код запустит скринсейвер 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); //находим хандл окна таскбара
    ShowWindow(H, SW_HIDE);//делаем его невидимым
    Sleep(2000);
    ShowWindow(H, SW_SHOW);//делаем его видимым
    }

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

    // Напишите следующий код:
    LoadKeyboardLayout("00000409", KLF_ACTIVATE);// Английская
    LoadKeyboardLayout("00000419", KLF_ACTIVATE);// Русская

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

    // Напишите следующий код:
    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. Как добавить код на ассемблере

    // Ассемблеровские вставки делаются так:
    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. Какая на программа активна

    // Для того что бы узнать какая программа активна кинте на форму таймер 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. Блокировка клавиатуры и мыши

    // Для блокировки клавиатуры и мыши напишите следующий код:
    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]))
    Автор: Srpj Сайт: http://srpj.narod.ru/

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

    // Напищите слеующий код в нужном месте:
    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));
    Автор: ant47

Наверх
Hosted by uCoz