Архив за ‘FAQ’ категория

Сайт PInvoke.NET

Ноябрь 21st, 2010

При работе над одним проектом на C# у меня возникала необходимость использования большого количества WinAPI-функций. Как Вы знаете, импортировать в C# функции из динамически загружаемых библиотек DLL можно, используя технологию P/Invoke. При этом нужно прописать все импорты функций и необходимых структур данных.

На это занятие может уйти некоторое время, которое можно было бы потратить на что-то более полезное :)

На сайте PInvoke.NET собрана огромная коллекция импортов WinAPI-функций и структур данных. Интересующую функцию, структуру или перечисление Вы можете найти воспользовавшись поиском в левой части сайта.

Приведу пример прототипа WinAPI-функции из MSDN и PInvoke.NET:

1
BOOL WINAPI Beep(DWORD dwFreq, DWORD dwDuration);
Прототип функции Beep() из MSDN
1
2
3
[DllImport("kernel32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool Beep(uint dwFreq, uint dwDuration);
Прототип функции Beep() из pinvoke.net

А вот например структура SYSTEM_INFO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef struct _SYSTEM_INFO {
  union {
    DWORD  dwOemId;
    struct {
      WORD wProcessorArchitecture;
      WORD wReserved;
    } ;
  } ;
  DWORD     dwPageSize;
  LPVOID    lpMinimumApplicationAddress;
  LPVOID    lpMaximumApplicationAddress;
  DWORD_PTR dwActiveProcessorMask;
  DWORD     dwNumberOfProcessors;
  DWORD     dwProcessorType;
  DWORD     dwAllocationGranularity;
  WORD      wProcessorLevel;
  WORD      wProcessorRevision;
} SYSTEM_INFO;
Структура SYSTEM_INFO из MSDN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_INFO
{
    public ushort processorArchitecture;
    ushort reserved;
    public uint pageSize;
    public IntPtr minimumApplicationAddress;
    public IntPtr maximumApplicationAddress;
    public IntPtr activeProcessorMask;
    public uint numberOfProcessors;
    public uint processorType;
    public uint allocationGranularity;
    public ushort processorLevel;
    public ushort processorRevision;
}
Структура SYSTEM_INFO из pinvoke.net
Вывод

Ресурс PInvoke.NET может здорово сэкономить время при разработке программ на C# под платформу Windows.

C# – как засунуть программу в Tray

Август 26th, 2010

Сделать так, чтобы у нашей программы, написанной на C# была иконка в трее проще простого! Для этого в .NET есть класс NotifyIcon. Он даже размещен в палитре компонентов Toolbox.

Вот его основные свойства:

  • BalloonTipIcon – значок для отображения на всплывающей подсказке
  • BalloonTipText – текст для отображения на всплывающей подсказке
  • BalloonTipTitle – заголовок всплывающей подсказки
  • ContextMenuStrip – контекстное меню, которое будет вызываться при щелчке правой кнопкой мыши по значку в трее
  • Icon – Иконка, которая отображается в трее.
  • Text – текст подсказки, отображаемый при наведении указателя мыши на значок в области уведомлений (tray).
  • Visible – свойство, указывающее, виден ли значок в области уведомлений.

У компонента есть все события, которые могут понадобиться программисту. Среди них:

  • BallonTipClicked
  • BallonTipClosed
  • BallonTipShown
  • Click
  • DoubleClick
  • MouseClick
  • MouseDoubleClick
  • MouseDown
  • MouseMove
  • MouseUp

Я думаю нет нужды рассказывать, для чего нужно то или иное событие. :)

Если у Вас есть вопросы по классу NotifyIcon – милости прошу, задавайте их в комментaриях

Почему возникает WebException: Время ожидания операции истекло?

Май 22nd, 2010

Многие .NET-программисты сталкиваются с исключительной ситуацией WebException: Время ожидания операции истекло (System.Net.WebException: The operation has timed out). Обычно эксепш возникает на операции HttpWebRequest.GetRequestStream() или HttpWebRequest.GetResponse(). Выглядит все довольно странно, потому что эти операции могут выполниться несколько раз, а потом выдают WebException.
» Читать дальше: Почему возникает WebException: Время ожидания операции истекло?

Что такое «Мидлет»?

Май 22nd, 2010

Мидлет (MIDlet, от MID —  mobile information device)  — приложение для профиля платформы Java ME. В моделях сотовых телефонов с поддержкой Java, как правило, реализована именно поддержка MIDP. Иначе говоря, мидлет – это приложение, которое работает на платформе Java Micro Edition. В качестве примера можно привести java-игры. » Читать дальше: Что такое «Мидлет»?

Копирование материалов сайта допускается только с разрешения администрации сайта.