|
Как определить, что запущен 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);
}
Как
нарисовать рванное окно?
...
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("Информация о сессиях не получена!");
|
|