Новые книги

Книга посвящена вопросам становления и профессионального развития копирайтера. В доступной и легкой форме автор на собственных примерах показывает многие ошибки начинающих авторов, рассказывает о профессиональных секретах копирайтинга, делится своими наблюдениями о профессии. Книга будет интересна как уже практикующим авторам, так и тем, кто только решил связать свою жизнь с написанием текстов. Рекомендуется самому широкому кругу читателей.
Данная работа адресована прежде всего практикующим специалистам, и мы сознательно избегали сложных теоретических выкладок и ссылок на научную литературу. Любознательные найдут библиографию в конце книги, а регулярно обновляемую информацию об исследованиях и дополнительное программное обеспечение — на нашем веб-сайте по адресу http://www.bmi-lab.ch/.

Описанные нами методы работают удивительно хорошо и пользуются огромной популярностью во многих компаниях и организациях. Практики полюбили Навигатор, как и мы! Надеемся, что наши старания хоть в какой-то степени помогут вам в разработке будущих инновационных бизнес-моделей. Наш метод не гарантирует успеха, но определенно повысит ваши шансы. И помните: не рискуя, вы не достигните цели!

FAQ Part 3

Visual C++ / FAQ Part 3

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