我有一台运行Windows Mobile 5.0的设备。它有一个程序,每当它运行时,它都能动态创建和删除手持设备的GPRS连接。
我正在尝试构建一个小程序,它可以做类似的事情。可以用一个参数调用它来启动连接,但是连接需要保持,这样即使我的程序没有运行,手机也可以在以后使用。
我用this MSDN article写了一些代码,创建了一个GPRS连接(连接成功),然而,它似乎不是手机可以使用的连接。
在我的程序运行后,有没有什么方法可以使连接对设备可用?如果是,这是特定于设备的吗?
const int _syncConnectTimeOut = 60000;
[DllImport("CellCore.dll")]
static extern int ConnMgrMapURL(string url, ref Guid networkGuid, int passZero);
[DllImport("CellCore.dll")]
static extern int ConnMgrEstablishConnection(ConnMgrConnectionInfo connectionInfo, ref IntPtr connectionHandle);
[DllImport("CellCore.dll")]
static extern int ConnMgrEstablishConnectionSync(ConnMgrConnectionInfo connectionInfo, ref IntPtr connectionHandle, uint dwTimeout, ref ConnMgrStatus dwStatus);
[DllImport("CellCore.dll")]
static extern int ConnMgrReleaseConnection(IntPtr connectionHandle, int cache);
[DllImport("CellCore.dll")]
static extern int ConnMgrConnectionStatus(IntPtr connectionHandle, ref ConnMgrStatus status);
public void Start(string name)
{
string url = "http://internet.com/";
IntPtr _connectionHandle = IntPtr.Zero;
Guid networkGuid = Guid.Empty;
ConnMgrStatus status = ConnMgrStatus.Unknown;
ConnMgrMapURL(url, ref networkGuid, 0);
ConnMgrConnectionInfo info = new ConnMgrConnectionInfo(networkGuid, ConnMgrPriority.HighPriorityBackground);
ConnMgrEstablishConnectionSync(info, ref _connectionHandle, _syncConnectTimeOut, ref status);
if (status == ConnMgrStatus.Connected) {
Debug.WriteLine("Connect Succeeded");
} else {
Debug.WriteLine("Connect failed: " + status.ToString());
}
}
[Flags]
enum ConnMgrParam : int
{
GuidDestNet = 0x1,
MaxCost = 0x2,
MinRcvBw = 0x4,
MaxConnLatency = 0x8
}
[Flags]
enum ConnMgrProxy : int
{
NoProxy = 0x0,
Http = 0x1,
Wap = 0x2,
Socks4 = 0x4,
Socks5 = 0x8
}
enum ConnMgrPriority
{
UserInteractive = 0x8000,
HighPriorityBackground = 0x0200,
LowPriorityBackground = 0x0008
}
enum ConnMgrStatus
{
Unknown = 0x00,
Connected = 0x10,
Suspended = 0x11,
Disconnected = 0x20,
ConnectionFailed = 0x21,
ConnectionCanceled = 0x22,
ConnectionDisabled = 0x23,
NoPathToDestination = 0x24,
WaitingForPath = 0x25,
WaitingForPhone = 0x26,
PhoneOff = 0x27,
ExclusiveConflict = 0x28,
NoResources = 0x29,
ConnectionLinkFailed = 0x2a,
AuthenticationFailed = 0x2b,
NoPathWithProperty = 0x2c,
WaitingConnection = 0x40,
WaitingForResource = 0x41,
WaitingForNetwork = 0x42,
WaitingDisconnection = 0x80,
WaitingConnectionAbort = 0x81
}
[StructLayout(LayoutKind.Sequential)]
class ConnMgrConnectionInfo
{
Int32 cbSize; // DWORD
public ConnMgrParam dwParams = 0; // DWORD
public ConnMgrProxy dwFlags = 0; // DWORD
public ConnMgrPriority dwPriority = 0; // DWORD
public Int32 bExclusive = 0; // BOOL
public Int32 bDisabled = 0; // BOOL
public Guid guidDestNet = Guid.Empty; // GUID
public IntPtr hWnd = IntPtr.Zero; // HWND
public UInt32 uMsg = 0; // UINT
public Int32 lParam = 0; // LPARAM
public UInt32 ulMaxCost = 0; // ULONG
public UInt32 ulMinRcvBw = 0; // ULONG
public UInt32 ulMaxConnLatency = 0; // ULONG
public ConnMgrConnectionInfo()
{
cbSize = Marshal.SizeOf(typeof(ConnMgrConnectionInfo));
}
public ConnMgrConnectionInfo(Guid destination, ConnMgrPriority priority, ConnMgrProxy proxy)
: this()
{
guidDestNet = destination;
dwParams = ConnMgrParam.GuidDestNet;
dwPriority = priority;
dwFlags = proxy;
}
public ConnMgrConnectionInfo(Guid destination, ConnMgrPriority priority)
: this(destination, priority, ConnMgrProxy.NoProxy) { }
public ConnMgrConnectionInfo(Guid destination)
: this(destination, ConnMgrPriority.UserInteractive) { }
}发布于 2013-07-16 02:17:47
Josef让我走上了正确的道路。我找到了this answer和随后的链接,这些链接解释了如何使用OMA客户端配置来更改设备配置,并最终允许我创建GPRS连接。
http://msdn.microsoft.com/en-us/bb737297
代码:
/// <summary>
/// Creates a GPRS Connection with the specified name.
/// </summary>
/// <param name="name">The name of the connection to create.</param>
public void Start(string name)
{
string xml = "<wap-provisioningdoc>" +
"<characteristic type=\"CM_GPRSEntries\">" +
"<characteristic type=\"" + name + "\">" +
"<parm name=\"DestId\" value=\"{436EF144-B4FB-4863-A041-8F905A62C572}\" />" +
"<parm name=\"UserName\" value=\"\" />" +
"<parm name=\"Password\" value=\"\" />" +
"<parm name=\"Domain\" value=\"\" />" +
"<characteristic type=\"DevSpecificCellular\">" +
"<parm name=\"GPRSInfoValid\" value=\"1\" />" +
"<parm name=\"GPRSInfoAccessPointName\" value=\"internet.com\" />" +
"</characteristic>" +
"</characteristic>" +
"</characteristic>" +
"</wap-provisioningdoc>";
XmlDocument configDoc = new XmlDocument();
configDoc.LoadXml(xml);
XmlDocument result = ConfigurationManager.ProcessConfiguration(configDoc, true);
}发布于 2013-07-11 00:21:45
我没有任何GPRS设备,但它可以像关闭手柄并释放您打开的资源一样简单。
发布于 2013-07-11 23:27:27
要创建或删除连接,请使用带有wap配置xml文件的dmprocessconfig。msdn提供了相关的示例
https://stackoverflow.com/questions/17551551
复制相似问题