Новые книги

Что такое блог, сегодня знает каждый или практически каждый пользователь Интернета. И судя по стремительно возрастающему количеству блогов в Сети, для многих блогинг – достаточно серьезное увлечение. Но далеко не каждый знает, что это увлечение вполне может быть очень прибыльным. Как «заставить» блог приносить деньги? Как создать и раскрутить свой блог? Как выбрать целевую аудиторию и тематику? Ответы на эти и многие другие вопросы вы найдете в практическом руководстве Евгения Литвина.

Откройте для себя профессиональные секреты успеха, узнайте, как хобби может приносить прибыль!

Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги.
C# для профессионалов

Для кого предназначена эта книга

Основные темы книги

Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.

В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.

Эта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.

• Все особенности языка C#

• C# и объектно-ориентированное программирование

• Приложения и службы Windows

• Создание web-страниц и web-служб с помощью ASP NET

• Сборки .NET

• Доступ к данным при помощи ADO NET

• Создание распределённых приложений с помощью NET Remoting

• Интеграция с COM, COM+ и службой Active Directory

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