Страница 3 из 10 Как я могy закpыть пpиложение, запyщенное по ShellExecute? Как любое другое: получить HWND его окна; по этому HWND получить ID процесса и TerminateProcess() & WM_CLOSE для окна.
Как программно переключить раскладку клавиатуры? Используйте функцию ActivateKeyboardLayout (...), которая позволяет установить язык для текущего потока.
Как программно сделать eject для CD-ROM'a, ZIP'a? BOOL EjectDrive95(char *path) { HANDLE hDevice; DWORD dw; BOOL fResult; DIOC_REGISTERS reg;
hDevice = CreateFile("\\\\.\\vwin32", 0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL); if (hDevice == INVALID_HANDLE_VALUE) return FALSE; reg.reg_EAX = 0x440D; reg.reg_EBX = toupper(path[0]) - 'A' + 1; reg.reg_ECX = 0x0849; fResult = DeviceIoControl(hDevice, VWIN32_DIOC_DOS_IOCTL,®, sizeof(reg), ®, sizeof(reg), &dw, 0); CloseHandle(hDevice); return fResult; }
BOOL EjectDriveNT(char *path) { HANDLE hDisk; DWORD dwRc; TCHAR tsz[8]; SECURITY_ATTRIBUTES sa;
wsprintf(tsz, TEXT("\\\\.\\%c:"), TEXT('@') + toupper(path[0]) - 'A' + 1); sa.nLength = sizeof(sa); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; hDisk = CreateFile(tsz, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,&sa, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL); if (hDisk != INVALID_HANDLE_VALUE) { FlushFileBuffers(hDisk); return DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, NULL, 0, NULL, 0,&dwRc, NULL); } return FALSE; }
Как убрать часы из SystemTray? На время их можно убрать с помщью следующего кода: hClockWnd=FindWindowEx(FindWindowEx(FindWindowEx(NULL,NULL,"Shell_TrayWnd",NULL), NULL,"TrayNotifyWnd",NULL),NULL,"TrayClockWClass",NULL); if(hClockWnd!=NULL) ShowWindow(hClockWnd,SW_HIDE);
Как определить, что запущен Screen Saver? Если верить справочнику по Win32 API: bool bIsSaverActive;
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bIsSaverActive, 0); if (bIsSaverActive) { ... }
или BOOL IsSaverRunning() { BOOL isNT; OSVERSIONINFO ovi; ovi.dwOSVersionInfoSize=sizeof(ovi); GetVersionEx(&ovi); isNT=(ovi.dwPlatformId==VER_PLATFORM_WIN32_NT); if (!isNT) { UINT dummy, srunning=0; BOOL res=SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,&srunning,0); SystemParametersInfo(SPI_SCREENSAVERRUNNING,srunning,&dummy,0); if (srunning==0) return FALSE; else return TRUE; } // это прекрасно рабоатет под '95. Но НТ могут быть проблемы HWND hfw=GetForegroundWindow(); if (hfw==NULL) return TRUE; LONG wl=GetWindowLong(hfw,GWL_STYLE); if ((wl&0xF0000000)!=WS_POPUP|WS_VISIBLE) return FALSE; RECT rc; GetWindowRect(hfw,&rc); if (rc.right-rc.left!=GetSystemMetrics(SM_CXSCREEN) || rc.bottom-rc.top!=GetSystemMetrics(SM_CYSCREEN)) return FALSE; return TRUE; }
С помощью каких функций можно написать программу, которая использует соединения, имеющиеся в удаленном доступе? Смотрите Win32 API-фукнции, начинающиеся с RAS.
Как программно сжать/растянуть картинку? Смотрите Win32 API-фукнции: StretchBlt, StretchDIBits и SetStretchBltMode.
Как принудительно завершить MS-DOS задачу, не дожидаясь ее нормального выхода?
DWORD ProcessID; //Здесь будет ProcessId, котоpый получили после CreateProcess HANDLE hProcess;
hProcess=OpenProcess(PROCESS_TERMINATE,0,ProcessID); if(hProcess!=NULL) { TerminateProcess(hProcess,0); CloseHandle(hProcess); } |