Главная | Новости | Статьи | Книги | Ссылки |
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); }
... WNDCLASS WndClass; WndClass.lpszClassName =(LPSTR)"BalonHelp"; WndClass.hInstance =hInstance; WndClass.lpfnWndProc =BalonWndProc; WndClass.style =CS_SAVEBITS; // восстановление возлагаем на Win WndClass.hbrBackground =GetStockBrush(NULL_BRUSH); WndClass.hCursor =LoadCursor(NULL,IDC_ARROW); WndClass.hIcon =NULL; WndClass.lpszMenuName =NULL; WndClass.cbClsExtra =0; WndClass.cbWndExtra =0; RegisterClass(&WndClass); ... LRESULT CALLBACK BalonWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { case WM_PAINT: // отpисовка всего окна ложится на твои плечи :-) ... case ... } return DefWindowProc(hWnd,msg,wParam,lParam); }
Как полностью перекрыть доступ к файлу во время работы с ним?
После создания с помощью следующего кода файл даже не читается:
CreateFile(f,GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
Как сделать так, чтобы во время выполнения длинного метода приложение реагировало на сообщения?
BOOL ProcessMessages() { MSG msgCur; if (!::GetMessage(&msgCur, NULL, NULL, NULL)) { return FALSE; } // обрабатываем это сообщение ::TranslateMessage(&m_msgCur); ::DispatchMessage(&m_msgCur); return TRUE; }
Как сделать цикличным проигрывание MIDI-файла?
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if(message==MM_MCINOTIFY) if(wParam!=MCI_NOTIFY_ABORTED) { if(m_bIsPlaing) { if(SetMidi()) PlayMidi(); } } return CFrameWnd::WindowProc(message, wParam, lParam); } BOOL CMainFrame::SetMidi() { StopMidi(); MCI_OPEN_PARMS OpenParm; OpenParm.dwCallback = (DWORD)GetSafeHwnd(); OpenParm.lpstrDeviceType = NULL; OpenParm.lpstrElementName = filename; DWORD flags=MCI_OPEN_ELEMENT; MCIERROR err; err=mciSendCommand(0, MCI_OPEN, flags,(DWORD)&OpenParm); if(!err){ m_nMidideviceID=OpenParm.wDeviceID; return TRUE; } else return FALSE; } BOOL CMainFrame::PlayMidi(void) { MCI_PLAY_PARMS PlayParm; PlayParm.dwCallback =(DWORD)GetSafeHwnd(); PlayParm.dwFrom=0; MCIERROR err; err=mciSendCommand(m_nMidideviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)&PlayParm); if(!err) { m_bIsPlaing=TRUE; return TRUE; } m_bIsPlaing=FALSE; return FALSE; } BOOL CMainFrame::StopMidi(void) { m_bIsPlaing=FALSE; MCI_GENERIC_PARMS generic_params; generic_params.dwCallback=(DWORD)GetSafeHwnd(); mciSendCommand(m_nMidideviceID,MCI_CLOSE,MCI_WAIT,(DWORD)&generic_params); return TRUE; }
Как перехватывать ВСЕ исключения в процессе?
main() { try { ... } catch(...) { ^^^именно так и напиши! ... } }
Так как функция main() совсем не типична для Win32, предлагаю уделить внимание SetUnhandledExceptionFilter().
Как узнать, кто в данный момент присоединен через Сеть к машине?
Это можно узнать по сессиям:SESSION_INFO_2 *psi2; NET_API_STATUS Result; wchar_t wcServerName[MAX_COMPUTERNAME_LENGTH + 1]; DWORD prefmaxlen = MAX_PREFERRED_LENGTH; DWORD entriesread; DWORD totalentries; StringToWideChar( name, wcServerName, MAX_COMPUTERNAME_LENGTH ); Result = NetSessionEnum( (LPTSTR) wcServerName, NULL, NULL, 2, (unsigned char**) &psi2, prefmaxlen, &entriesread, &totalentries, NULL ); if( Result != NERR_Success ) throw Exception("Информация о сессиях не получена!");
Предыдущая часть | Содержание | Следующая часть |