Страница 9 из 17 Разное - Регистрация редактора свойства типа 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", "https://google.com/", 0, 0, SW_SHOWNORMAL); }
- Запуск почтового клиента
// Напишите следующий код: void __fastcall TForm1::Label1Click(TObject *Sender) { ShellExecute(Handle,NULL,"mailto:
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
?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]))
- Имитации нажатия левой кнопки мыши
// Напищите слеующий код в нужном месте: 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));
|