HPC.ru lite - Все форумы
Форум: Программирование для КПК
Тема: Как из VB.NET кода определить подключен ли PocketPC к ПК?
[Ответить]
KarlsonAK [12.05.2005 12:47] Как из VB.NET кода определить подключен ли PocketPC к ПК?:
Добрый день. Как в 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 он не работает.
Есть неплохая статья http://msdn.microsoft.com/library/rus/default.asp?url=/library/RUS/vbcon/html/vbup1048.asp как заменить 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'"
Max_v [12.05.2005 14:55] Re: Как из VB.NET кода определить подключен ли PocketPC к ПК:
посмотри OpenNETCF.org Desktop.Communication Library
http://www.opennetcf.org/PermaLink.aspx?guid=d7b7cbef-4ab6-477b-924c-0498a523beaf
KarlsonAK [13.05.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()
зависает намертво.
[Ответить]