Enviar SMS con C#

tema enviado por tomerqueves en C#
tema iniciado el 22/07/2007

Necesito ayuda.

Un poquito de orientación. Yo sé que esto que os pido no es sencillo de contestar porque se va a notar al vuelo que soy recien iniciado al c sharp. Si tengo suerte y alguien me da un ratillo de su tiempo yo estoy concentrado en este tema ahora.

Resulta que com dice el topic quiero mandarme un sms a mi dispositivo movil (a mi telefono movil normal y corriente) desde una página en aspx con el visual web developer. Debe haber algun tipo de desorden en el modo que yo estructuro el codigo o defino las apis o algun fragmento que no entiendo del todo y no se substituir adecuadamente. Tengo el código por un lado y el default.aspx vacio por un lado asi como el default.aspx.cs

He pensado ponerlo y indicar en que punto da errores y si alguien lo ve claro que me lo ordene adecuadamente para que debiera funcionar o que me explique a que se debe que genere esos errores.

default.aspx

------------------------------

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>P gina sin t¡tulo</title>

</head>

<body>

<form id="form1" runat="server">

<div>

</div>

</form>

</body>

</html>

default.aspx.cs

------------------------------------------

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

 

 

 

protected void Page_Load(object sender, EventArgs e)

{

 

}

 

codigo de msdn

-----------------------

 

public enum AddressType
   {
   Unknown,
      International,
      National,
      NetworkSpecific,
      Subscriber,
      Alphanumeric,
      Abbreviated
   }


public struct PhoneAddress
   {
      public AddressType AddressType;
      public String Address;
   }


private static string   SMS_MSGTYPE_TEXT            = "Microsoft Text SMS Protocol";
      private static long      SMS_MODE_SEND              = 0x00000002;
      private static long      SMS_OPTION_DELIVERY_NONE   = 0x00000000;
      private static long      SMS_OPTION_DELIVERY_NO_RETRY  = 0x00000001;
      private static long      PS_MESSAGE_OPTION_NONE     = 0x00000000;


private enum SMS_DATA_ENCODING
      {
         SMSDE_OPTIMAL=0,
         SMSDE_GSM,
         SMSDE_UCS2,
      }

 


private enum PROVIDER_SPECIFIC_MESSAGE_CLASS

{

PS_MESSAGE_CLASS0 = 0,

PS_MESSAGE_CLASS1,

PS_MESSAGE_CLASS2,

PS_MESSAGE_CLASS3,

}


private enum PROVIDER_SPECIFIC_REPLACE_OPTION
      {
         PSRO_NONE = 0,
         PSRO_REPLACE_TYPE1,
         PSRO_REPLACE_TYPE2,
         PSRO_REPLACE_TYPE3,
         PSRO_REPLACE_TYPE4,
         PSRO_REPLACE_TYPE5,
         PSRO_REPLACE_TYPE6,
         PSRO_REPLACE_TYPE7,
         PSRO_RETURN_CALL,
         PSRO_DEPERSONALIZATION,
      }

 

private struct TEXT_PROVIDER_SPECIFIC_DATA

{

public IntPtr dwMessageOptions;

public PROVIDER_SPECIFIC_MESSAGE_CLASS psMessageClass;

public PROVIDER_SPECIFIC_REPLACE_OPTION psReplaceOption;

}


HRESULT SmsOpen (
const LPCTSTR ptsMessageProtocol,
const DWORD dwMessageModes,
SMS_HANDLE* const psmshHandle,
HANDLE* const phMessageAvailableEvent);

//SmsOpen da error : los const aparecen subrallados en

//rojo y dice que const necesita un tipo.

//supongo que arreglada essta funcion, los demas errores

//se arreglan en cadena pues creo que son el mismo.

[DllImport("sms.dll")]
   private static extern IntPtr SmsOpen(String ptsMessageProtocol,
     IntPtr dwMessageModes, ref IntPtr psmshHandle, IntPtr
     phMessageAvailableEvent);


HRESULT SmsSendMessage (
const SMS_HANDLE smshHandle,
const SMS_ADDRESS * const psmsaSMSCAddress,
const SMS_ADDRESS * const psmsaDestinationAddress,
const SYSTEMTIME * const pstValidityPeriod,
const BYTE * const pbData,
const DWORD dwDataSize,
const BYTE * const pbProviderSpecificData,
const DWORD dwProviderSpecificDataSize,
const SMS_DATA_ENCODING smsdeDataEncoding,
const DWORD dwOptions,
SMS_MESSAGE_ID * psmsmidMessageID);

 

[DllImport("sms.dll")]
private static extern IntPtr SmsSendMessage(IntPtr smshHandle, IntPtr
  psmsaSMSCAddress, IntPtr psmsaDestinationAddress, IntPtr
  pstValidityPeriod, byte[] pbData, IntPtr dwDataSize, byte[]
  pbProviderSpecificData, IntPtr dwProviderSpecificDataSize,
  SMS_DATA_ENCODING smsdeDataEncoding, IntPtr dwOptions,  IntPtr
  psmsmidMessageID);

 

HRESULT SmsClose (
const SMS_HANDLE oCommandBarPopup);

 


[DllImport("sms.dll")]
   private static extern IntPtr SmsClose(IntPtr smshHandle);

 


IntPtr res = SmsOpen(SMS_MSGTYPE_TEXT, (IntPtr)SMS_MODE_SEND, ref hSms,
  IntPtr.Zero);
if (res != IntPtr.Zero)
      throw new Exception("Could not open SMS.");

 

 

Byte[] bDest = new Byte[516];
      fixed (byte* pAddr = bDest)

 

 

 

      byte *pCurrent = pAddr;
      Marshal.WriteInt32((IntPtr)pCurrent, (int)AddressType.Unknown);
      pCurrent +=4;

 

 

 


foreach (byte b in Encoding.Unicode.GetBytes(sPhoneNumber))
      {
         Marshal.WriteByte((IntPtr)pCurrent, b);
         pCurrent++;
      }

 

 


Byte[] ProvData = new Byte[12];

 


byte[] bMessage = Encoding.Unicode.GetBytes(sMessage);
      int nMsgSize = bMessage.Length;

 

 

res = SmsSendMessage(hSms, IntPtr.Zero, (IntPtr)pAddr, IntPtr.Zero,
        bMessage, (IntPtr)nMsgSize, ProvData, (IntPtr)ProvData.Length,
        SMS_DATA_ENCODING.SMSDE_OPTIMAL, (IntPtr)SMS_OPTION_DELIVERY_NONE,
        IntPtr.Zero);

 

 

 

 


Microsoft.Wireless.SMS.SendMessage("Phone Number","Message");

 

 

 

Supongo que el error estará más en estructurar las cabeceras de las apis

que en un fallo debido al soporte de asp. En cualquier caso yo no lo veo

claro y si me informan les estaria agradecido.

Por otra parte, busco sms.dll y no aparece en mi equipo.

Donde debe ir instalado dicho archivo(en que carpeta) y donde

podria conseguirlo. No lo encuentro.

 

Doy las gracias de antemano.

Espero que puedan ayudarme.

Gracias de nuevo.