Как из VB.NET кода определить подключен ли PocketPC к ПК?

Средства разработки, технические вопросы, отвечает (по мере сил) Отдел Разработок
Закрыто
KarlsonAK
Новенький (0 lvl)
Сообщения: 9
Зарегистрирован: Пт дек 24, 2004 20:08

Как из VB.NET кода определить подключен ли PocketPC к ПК?

Сообщение KarlsonAK » Чт май 12, 2005 12:47

Добрый день. Как в VB.NET определить с настольного ПК, подключен ли к нему PoketPC.
В VB6 я использовал следующий модуль:

Код: Выделить всё

Option Explicit

Public Type CEOSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Public Declare Function CeGetVersionEx Lib "rapi.dll" ( _
    lpVersionInformation As CEOSVERSIONINFO) As Boolean

Private Function GetSub(Addr As Long) As Long
    'Used for the init Call.
    GetSub = Addr
End Function

Public Function ConnectedRapi()
    'Used for the init Call - Do not remove.
End Function

Public Function RapiConnect() As Boolean
    'Initiates a connection and returns true
    ' if it connected, false if it did not.
    
    Dim pRapiInit As RAPIINIT
    
    On Error GoTo RapiConnect_Err
    
    With pRapiInit
        .cbSize = Len(pRapiInit)
        .heRapiInit = GetSub(AddressOf ConnectedRapi)
    End With
    Call CeRapiInitEx(pRapiInit)
    RapiConnect = RapiGetCEOSVersionString <> ""
    Exit Function
    
RapiConnect_Err:
    RapiConnect = False
End Function

Public Function RapiGetCEOSVersionString() As String
    ' Returns the Major, Minor, and Build number of the OS In a string.
    Dim ceosver As CEOSVERSIONINFO
    
    ceosver.dwOSVersionInfoSize = Len(ceosver)
    
    If CeGetVersionEx(ceosver) Then
        RapiGetCEOSVersionString = ceosver.dwMajorVersion & "." & _
            ceosver.dwMinorVersion & "." & _
            ceosver.dwBuildNumber & " " & _
            Left$(ceosver.szCSDVersion, _
            InStr(ceosver.szCSDVersion, Chr$(0)) - 1)
    Else
        RapiGetCEOSVersionString = ""
    End If
End Function

Вызываю функцию из RapiConnect модуля:

Код: Выделить всё

    
    Dim bConnected As Boolean
    bConnected = RapiConnect
Получаю значение - присоединен ли КПК к ПК.

К сожалению в VB.NET он не работает.
Есть неплохая статья [b]http://msdn.microsoft.com/library/ru ... 48.asp[/b] как заменить AddressOf.
Я попробовал таким образом выкрутиться:

Код: Выделить всё

    
  Delegate Sub ConnectedRapiDelegate() 

    Private Function GetSub(ByVal Addr As ConnectedRapiDelegate) As Integer 
        'Used for the init Call. 
        GetSub = Addr 
    End Function 

    Public Sub ConnectedRapi() 
        'Used for the init Call - Do not remove. 
    End Sub 

    Public Function RapiConnect() As Boolean 
        'Initiates a connection and returns true 
        ' if it connected, false if it did not. 

        Dim pRapiInit As RAPIINIT 
        Dim a As Integer 
        Try 
            With pRapiInit 
                .cbSize = Len(pRapiInit) 
                Dim myDlg As ConnectedRapiDelegate 
                myDlg = AddressOf ConnectedRapi 
                .heRapiInit = GetSub(myDlg) 'AddressOf ConnectedRapi) 
            End With 
            Call CeRapiInitEx(pRapiInit) 
            RapiConnect = RapiGetCEOSVersionString() <> "" 
            Exit Function 
        Catch ex As Exception 
            RapiConnect = False 
        End Try 
    End Function 
Но в данном случае, что-то не стыкуется в строке GetSub = Addr. Выдает ругательство "Value of Type 'ConnectedRapiDelegate' cannot be converted to 'Integer'"
Anatoliy

Max_v
Новенький (0 lvl)
Сообщения: 5
Зарегистрирован: Вт авг 31, 2004 14:41

Re: Как из VB.NET кода определить подключен ли PocketPC к ПК

Сообщение Max_v » Чт май 12, 2005 14:55

посмотри OpenNETCF.org Desktop.Communication Library
http://www.opennetcf.org/PermaLink.aspx ... 98a523beaf

KarlsonAK
Новенький (0 lvl)
Сообщения: 9
Зарегистрирован: Пт дек 24, 2004 20:08

Сообщение KarlsonAK » Пт май 13, 2005 12:14

Да, там даже есть топик с примером использования библиотеки в VB.NET. (http://www.opennetcf.org/forums/topic.asp?TOPIC_ID=540)
К сожалению, что-то я не так понимаю.
Создал следующий тестовый код:

Код: Выделить всё

    Public Function TestRAPI()
        Dim oRAPI As New OpenNETCF.Desktop.Communication.RAPI
        Dim i As Integer
        Dim sNewFolder As String = "\My Documents\OnlyTest"
        oRAPI.Connect()
        If oRAPI.Connected Then
            For i = 0 To 2
                Try
                    Dim RAPIerr1 As RAPIException
                    oRAPI.CreateDeviceDirectory(sNewFolder & i.ToString)
                Catch RAPIerr1 As RAPIException 'trap the error but don't respond if it is a file exits error
                    MsgBox(RAPIerr1.ToString, MsgBoxStyle.Information, "Create Directory On Device Error")
                End Try
            Next
        End If 'oRAPI.Connected
        oRAPI.Disconnect()

    End Function
По логике в папке My Documents должны будут созданы 3 папки: OnlyTest0, OnlyTest1 и OnlyTest2
Но реально при первом вызове oRAPI.CreateDeviceDirectory возникает ошибка - "No Connected"
И только в последующие вызовы создаются директории OnlyTest1 и OnlyTest2.
Но даже не это главное.
Конечная цель: проверить подсоединен ли PocketPC к настольному ПК.

Код: Выделить всё

   Public Function IsRapiConnect() As Boolean
        Dim oRAPI As New OpenNETCF.Desktop.Communication.RAPI
        Try
            oRAPI.Connect()
            If oRAPI.Connected Then
                oRAPI.Disconnect()
                Return True
            End If 'oRAPI.Connected
        Catch ex As Exception
            Return False
        End Try

    End Function
Если подсоединен - будет возвращено True. А вот если не подсоединен - программа на строке oRAPI.Connect()
зависает намертво.
Anatoliy

Закрыто

Вернуться в «Программирование для КПК»