Разное (C Builder) 2-я часть. Разное (C++ Builder) 2-я часть. Разное (C Builder) 2я часть
Скачать 19.3 Kb.
|
Разное (C++ Builder) 2-я часть Запуск почтового клиента Как добавить код на ассемблере Как сделать Shutdown (закрыть все запущенные приложения) Какая программа активна Блокировка клавиатуры и мыши Как из тела программы запустить обработчик события (как функцию) Определение количества элементов в массиве Имитации нажатия левой кнопки мыши Запуск почтового клиента // Напишите следующий код: 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 Сайт: http://srpj.narod.ru/ Имитации нажатия левой кнопки мыши // Напищите слеующий код в нужном месте: 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 Наверх |