Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Русский_Проект: Изучение Visual Basic


Здравствуйте! Я окончательно перешел на Visual Studio 2008 и снес старые версии Visual Studio 2005. А вы?

Справочник по функциям WinAPI для Visual Basic 6.0

Сегодня мы познакомимся с функцией GetLastInputInfo. Ей удобно пользоваться, чтобы определить активность пользователя. Этот прием, например, используется в Аське (ICQ), когда значок пользователся меняется на статус Отошел.

Функция GetLastInputInfo

Declare Function GetLastInputInfo Lib "user32" (plii As Any) As Long

GetLastInputInfo возвращает время, прошедшее с последнего нажатия клавиатуры или мыши.

В случае ошибки возвращается 0. В успешном случае возвращается ненулевое значение.

Параметры

plii
Структура LASTINPUTINFO, получающее время с последнего события ввода

Пример

Private Sub Command1_Click()
   Timer1.Enabled = Not Timer1.Enabled
   
   Select Case Timer1.Enabled
      Case True
         Command1.Caption = "Стоп"
      Case False
         Command1.Caption = "Старт"
   End Select

End Sub

Private Sub Form_Load()
   Command1.Caption = "Стоп"
   Timer1.Interval = 10
   Timer1.Enabled = True
   Label1.Caption = "Простой системы (сек):"

End Sub

Private Sub Form_Unload(Cancel As Integer)
   Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
   Dim lii As LASTINPUTINFO

   lii.cbSize = Len(lii)
   Call GetLastInputInfo(lii)
   
   With Label1
      .Caption = "Простой системы (сек): " & 

FormatNumber((GetTickCount() - lii.dwTime) / 1000, 2)
      .Refresh
   End With
End Sub

Справочник по функциям WinAPI для .NET Framework

Приведу пример с функцией GetLastInputInfo уже для .NET Framework

[C#]
[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

[Visual Basic] <DllImport("user32.dll")> _ Shared Function GetLastInputInfo(ByRef plii As LASTINPUTINFO) As Boolean End Function
[Visual Basic]
Dim idletime As Integer
Dim lastInputInf As New LASTINPUTINFO()

   Public Function GetLastInputTime() As Integer

    idletime = 0
    lastInputInf.cbSize = Marshal.SizeOf(lastInputInf)
    lastInputInf.dwTime = 0

    If GetLastInputInfo(lastInputInf) Then
        idletime = Environment.TickCount - lastInputInf.dwTime
    End If

    If idletime > 0 Then
        Return idletime / 1000
    Else : Return 0
    End If

   End Function

Полное описание функции и пример для C# будет доступен зарегистрированным пользователям справочника.

Справочник по .NET Framework

Продолжаем знакомиться с новинками .NET Framework 2.0. Чтобы узнать имя диска, можно воспользоваться свойством DriveInfo.Name, которое возвращает имена дисков типа C:\ или D:\

public string Name { get; }

Пример

DriveInfo[] allDrives = DriveInfo.GetDrives();

foreach (DriveInfo d in allDrives)
{
    MessageBox.Show(String.Format("Диск {0}", d.Name));
}

Проект: Телефонные звонки

Продолжаем работать над проектом. Некоторые участники прислали свои варианты разбора формата файлов и свои соображения по поводу сравнения файлов. Наиболее активными оказались три человека, которые прислали интересные идеи. С помощью жребия я определил одного участника, который получил бесплатный очередной выпуск справочника по .NET Framework. Им оказался Владимир из Владивостока. А я хочу обратить вниманию на одну вещь. В предыдущем задании я просил загрузить файлы в список. Большинство из участников применили элемент OpenFileDialog. Решение правильное, но ошибка заключается в том, что один и тот же код был дважды продублирован для каждой кнопки. Нужно стремиться к универсальности и компактности. Если у нас есть две кнопки, которые должны открывать файлы, то нужно вынести операцию открытия файла в отдельную процедуру. Например, так.

// Процедура для выбора файла и загрузки его содержимого в список
private void OpenPhoneTextFile()
{
    oFileDiag.DefaultExt = "txt";
    oFileDiag.Filter = "Текстовые файлы (*.txt)|*.txt";
    DialogResult result = oFileDiag.ShowDialog();
    if (result == DialogResult.OK)

    // Открываем файл, копируем содержимое в список,
    {
        this.Text = oFileDiag.FileName; //  и так далее
    }      
}

Преимущество подобного подхода особенно заметно в сложных проектах. Итак, нам осталось изучить еще раз форматы файлов и закрузить записи файлов в список. Пробуйте.

Файлы проекта, которые служат учебным материалом для этой задачи можно скачать с сайта Проекта. Поехали!

Удачного вам программирования!


©2007 А.Климов
Русский_Проект

В избранное