Vereis llevo un tiempo haciendo un bat, para manipular detos de un modem.
Tengo que hacer varias cosas, que las tengo ya resueltas, pero lo ultimo es sacar unos datos de la flash del modem.
Esto no se puede hacer com batch y tengo entendido que tiene que hacerse com java, por lo que tengo leido para usar java es mejor com visualbasic y por eso estoy intentando usar este codigo que os pongo.
Imports System
Public Class Prueba
Public Shared Sub Main()
Public Sub New()
Me.components = Nothing
Me.connected = False
Me.port = &H17
Me.raf = Nothing
Me.bis = Nothing
Me.ps = Nothing
Me.skt = Nothing
Dim num As Integer = 5
If (num < 0) Then
Throw New NegativeArraySizeException
End If
Dim textArray1 As String() = New String(num - 1) {}
textArray1(3) = "perm"
Me.im = textArray1
Me.InitializeComponent
End Sub
Public Overridable Sub connection(ByVal b As Boolean)
Me.connected = b
Me.hostname.set_Enabled((b Xor True))
If Not b Then
Try
Me.skt.close
Catch obj1 As Object When (?)
Dim throwable As Throwable
Dim exception As Exception = throwable
End Try
Try
Me.raf.Close
Catch obj2 As Object When (?)
Dim throwable2 As Throwable
Dim exception2 As Exception = throwable2
End Try
End If
End Sub
Public Overridable Function openFlash(ByVal s As String) As Boolean
Me.send2Serial("cd /flash" & ChrW(13))
Try
Thread.sleep(500)
Catch obj1 As Object When (?)
Dim throwable As Throwable
Dim exception As Exception = throwable
End Try
Me.send2Serial("close" & ChrW(13))
Try
Thread.sleep(500)
Catch obj2 As Object When (?)
Dim throwable2 As Throwable
Dim exception2 As Exception = throwable2
End Try
Me.send2Serial(New StringBuffer().append("open ").append(s).append(ChrW(13)).ToString)
Select Case Me.wait4("Flash driver opened", "ERROR - failed to o", Nothing, Nothing, Nothing)
Case -1
Return False
Case 2
Me.cout("ERROR: Unable to open the flash driver.")
Me.cout("You need to reboot the modem.")
Return False
End Select
Me.cout("Flash driver Opened.")
If (Me.wait4("CM/Flash> ", Nothing, Nothing, Nothing, Nothing) Is -1) Then
Return False
End If
Me.cout(New StringBuffer().append("Flash Device Ready (").append(s).append(" region)").ToString)
Return True
End Function
Public Overridable Sub readFlash(ByVal s As String)
If Not Me.openFlash(s) Then
Return
End If
Dim stream As FileOutputStream = Nothing
Dim flag As Boolean = False
Try
stream = New FileOutputStream(New StringBuffer().append(s).append(".bin").ToString)
If (Not stream Is Nothing) Then
flag = True
End If
Catch obj1 As Object When (?)
Dim throwable As Throwable
Dim exception As Exception = throwable
End Try
If Not flag Then
Me.cout(New StringBuffer().append("Error opening local file ").append(s).append(".bin for writing").ToString)
Return
End If
Me.cout(New StringBuffer().append("Reading ").append(s).append(" Flash region").ToString)
Dim num As Integer = 0
Dim num2 As Integer = 0
Label_0249:
Do While flag
Dim str As String = ""
Me.send2Serial(New StringBuffer().append("readDirect 256 ").append(num).append(ChrW(13)).ToString)
If (Me.wait4("region:", Nothing, Nothing, Nothing, Nothing) Is -1) Then
flag = False
Exit Do
End If
Do While flag
Dim num3 As Integer = Me.getSerialByte
If (num3 Is -1) Then
Me.cout("Communication Error")
flag = False
goto Label_0249
End If
If ((((num2 < &H100) AndAlso (num3 >= &H30)) AndAlso (num3 <= &H39)) OrElse ((num3 >= &H61) AndAlso (num3 <= &H66))) Then
str = New StringBuffer().append(str).append(DirectCast(num3, Char)).ToString
If (StringImpl.length(str) Is 2) Then
Dim num4 As Integer = Integer.parseInt(str, &H10)
Try
stream.write(num4)
Catch obj2 As Object When (?)
Dim throwable2 As Throwable
Dim exception2 As Exception = throwable2
End Try
str = ""
num2 += 1
Continue Do
End If
End If
Select Case num3
Case &H42
Me.cout(New StringBuffer().append("Flash read of ").append(s).append(" region is complete. Output to file: ").append(s).append(".bin").ToString)
Me.send2Serial("close" & ChrW(13))
flag = False
goto Label_0249
Case &H43
Do While (Not Me.getSerialByte Is &H3E)
Loop
num = (num + &H100)
num2 = 0
Me.cout(New StringBuffer().append("Read ").append(num).append(" bytes").ToString)
goto Label_0249
End Select
Loop
Loop
Try
stream.close
Catch obj3 As Object When (?)
Dim throwable3 As Throwable
Dim exception3 As Exception = throwable3
End Try
End Sub
Public Overridable Function wait4(ByVal w1 As String, ByVal w2 As String, ByVal w3 As String, ByVal w4 As String, ByVal w5 As String) As Integer
Dim str As String = ""
Dim i As Integer
For i = 0 To StringImpl.length(w1) - 1
str = New StringBuffer().append(str).append(" ").ToString
Next i
Do
Dim num2 As Integer = Me.getSerialByte
If (num2 Is -1) Then
Return num2
End If
str = New StringBuffer().append(StringImpl.substring(str, 1)).append(DirectCast(num2, Char)).ToString
If StringImpl.equals(str, w1) Then
Return 1
End If
If ((Not w2 Is Nothing) AndAlso StringImpl.equals(str, w2)) Then
Return 2
End If
If ((Not w3 Is Nothing) AndAlso StringImpl.equals(str, w3)) Then
Return 3
End If
If ((Not w4 Is Nothing) AndAlso StringImpl.equals(str, w4)) Then
Return 4
End If
Loop While ((w5 Is Nothing) OrElse Not StringImpl.equals(str, w5))
Return 5
End Function
Console.Read
End Sub
End Class
Esto que os pongo som recortes que e ido pegando, que creo hace lo que necesito, pero como vereis, le sobraran cosas y le faltaran seguro.
Pues si alguien tiene tiempo de hecharle una mirada a este codigo, se lo agredeseria mucho.
Yo lo unico que necesito es que al ejecutar el exe. saque lo que necesito sin mas, osea sin preguntar nada, ejecutar y funcionar.
un saludo
Primero que nada eso es .net
Segundo, esta todo el codigo dentro del Sub Main o.O (deberias ponerlo aparte)
CitarEsto que os pongo som recortes que e ido pegando, que creo hace lo que necesito, pero como vereis, le sobraran cosas y le faltaran seguro.
no se que hace... ni me he fijado, solo te arreglo lo que te dije, el sub main, es aparte. Pero creo que no funciona (a simple vista), lo que hiciste es una clase, deberias implementarlo en un formulario ;)
Imports System
Public Class Prueba
Public Shared Sub Main()
Application.Run(New Prueba())
End Sub
Public Sub New()
Me.components = Nothing
Me.connected = False
Me.port = &H17
Me.raf = Nothing
Me.bis = Nothing
Me.ps = Nothing
Me.skt = Nothing
Dim num As Integer = 5
If (num < 0) Then
Throw New NegativeArraySizeException
End If
Dim textArray1 As String() = New String(num - 1) {}
textArray1(3) = "perm"
Me.im = textArray1
Me.InitializeComponent
End Sub
Public Overridable Sub connection(ByVal b As Boolean)
Me.connected = b
Me.hostname.set_Enabled((b Xor True))
If Not b Then
Try
Me.skt.close
Catch obj1 As Object When (?)
Dim throwable As Throwable
Dim exception As Exception = throwable
End Try
Try
Me.raf.Close
Catch obj2 As Object When (?)
Dim throwable2 As Throwable
Dim exception2 As Exception = throwable2
End Try
End If
End Sub
Public Overridable Function openFlash(ByVal s As String) As Boolean
Me.send2Serial("cd /flash" & ChrW(13))
Try
Thread.sleep(500)
Catch obj1 As Object When (?)
Dim throwable As Throwable
Dim exception As Exception = throwable
End Try
Me.send2Serial("close" & ChrW(13))
Try
Thread.sleep(500)
Catch obj2 As Object When (?)
Dim throwable2 As Throwable
Dim exception2 As Exception = throwable2
End Try
Me.send2Serial(New StringBuffer().append("open ").append(s).append(ChrW(13)).ToString)
Select Case Me.wait4("Flash driver opened", "ERROR - failed to o", Nothing, Nothing, Nothing)
Case -1
Return False
Case 2
Me.cout("ERROR: Unable to open the flash driver.")
Me.cout("You need to reboot the modem.")
Return False
End Select
Me.cout("Flash driver Opened.")
If (Me.wait4("CM/Flash> ", Nothing, Nothing, Nothing, Nothing) Is -1) Then
Return False
End If
Me.cout(New StringBuffer().append("Flash Device Ready (").append(s).append(" region)").ToString)
Return True
End Function
Public Overridable Sub readFlash(ByVal s As String)
If Not Me.openFlash(s) Then
Return
End If
Dim stream As FileOutputStream = Nothing
Dim flag As Boolean = False
Try
stream = New FileOutputStream(New StringBuffer().append(s).append(".bin").ToString)
If (Not stream Is Nothing) Then
flag = True
End If
Catch obj1 As Object When (?)
Dim throwable As Throwable
Dim exception As Exception = throwable
End Try
If Not flag Then
Me.cout(New StringBuffer().append("Error opening local file ").append(s).append(".bin for writing").ToString)
Return
End If
Me.cout(New StringBuffer().append("Reading ").append(s).append(" Flash region").ToString)
Dim num As Integer = 0
Dim num2 As Integer = 0
Label_0249:
Do While flag
Dim str As String = ""
Me.send2Serial(New StringBuffer().append("readDirect 256 ").append(num).append(ChrW(13)).ToString)
If (Me.wait4("region:", Nothing, Nothing, Nothing, Nothing) Is -1) Then
flag = False
Exit Do
End If
Do While flag
Dim num3 As Integer = Me.getSerialByte
If (num3 Is -1) Then
Me.cout("Communication Error")
flag = False
goto Label_0249
End If
If ((((num2 < &H100) AndAlso (num3 >= &H30)) AndAlso (num3 <= &H39)) OrElse ((num3 >= &H61) AndAlso (num3 <= &H66))) Then
str = New StringBuffer().append(str).append(DirectCast(num3, Char)).ToString
If (StringImpl.length(str) Is 2) Then
Dim num4 As Integer = Integer.parseInt(str, &H10)
Try
stream.write(num4)
Catch obj2 As Object When (?)
Dim throwable2 As Throwable
Dim exception2 As Exception = throwable2
End Try
str = ""
num2 += 1
Continue Do
End If
End If
Select Case num3
Case &H42
Me.cout(New StringBuffer().append("Flash read of ").append(s).append(" region is complete. Output to file: ").append(s).append(".bin").ToString)
Me.send2Serial("close" & ChrW(13))
flag = False
goto Label_0249
Case &H43
Do While (Not Me.getSerialByte Is &H3E)
Loop
num = (num + &H100)
num2 = 0
Me.cout(New StringBuffer().append("Read ").append(num).append(" bytes").ToString)
goto Label_0249
End Select
Loop
Loop
Try
stream.close
Catch obj3 As Object When (?)
Dim throwable3 As Throwable
Dim exception3 As Exception = throwable3
End Try
End Sub
Public Overridable Function wait4(ByVal w1 As String, ByVal w2 As String, ByVal w3 As String, ByVal w4 As String, ByVal w5 As String) As Integer
Dim str As String = ""
Dim i As Integer
For i = 0 To StringImpl.length(w1) - 1
str = New StringBuffer().append(str).append(" ").ToString
Next i
Do
Dim num2 As Integer = Me.getSerialByte
If (num2 Is -1) Then
Return num2
End If
str = New StringBuffer().append(StringImpl.substring(str, 1)).append(DirectCast(num2, Char)).ToString
If StringImpl.equals(str, w1) Then
Return 1
End If
If ((Not w2 Is Nothing) AndAlso StringImpl.equals(str, w2)) Then
Return 2
End If
If ((Not w3 Is Nothing) AndAlso StringImpl.equals(str, w3)) Then
Return 3
End If
If ((Not w4 Is Nothing) AndAlso StringImpl.equals(str, w4)) Then
Return 4
End If
Loop While ((w5 Is Nothing) OrElse Not StringImpl.equals(str, w5))
Return 5
End Function
End Class
Te agradezco mucho tus respuestas raul.
Veras yo se que cuesta mucho aprender algo, para que despues llegue alguien pidiendo lo que a uno le a costado años aprender.
Yo no quiero que nadie me de algo ya echo, y te puedo decir que me a costado mucho poner este post, aunque no lo creas.
Eso que e puesto, como dije al principio, som trozos de codigo que se, seguro que es lo que necesito, pero no como un programa normal, como esta ese codigo.
Osea no com interface, si no como consola, osea eso que hace ese codigo,`pasarlo a consola.
Mi hobiie som los modems, y es para lo que necesito ese codigo, en el foro donde suelo andar, son muchas las preguntas que se responden muchas veces, y eso es desesperante, ver que la gente no lee.
Pero como tu sabras, esto que estoy pidiendo, no es que no me guste, pero no es facil de aprender, y no se aprende en dos dias ni mucho menos.
Te agradezco mucho el tiempo dedicado.
un saludo
Ahh...era de consola? porque no lo aclaraste (:xD jaja...se me paso xD, pero..... en el codigo hay un "Initialize component", o sea.... el codigo de donde proviene es una aplicacion de windows o.O)
Bueno, releyendo el codigo, hay partes de las que copiaste que son de una clase que hereda de algo (la pregunta es de que? y no conozco ninguna clase parecida :huh:), fijate bien de donde lo sacaste y si tiene alguna dependencia (fijate si tiene referencias a alguna dll o los "Imports" de arriba de todo)
Hay partes que parecen mezcla de C++ y Vb... de donde sacaron un "Me.cout(..)" :huh:
Nada de lo que dije fue por criticarte, sino que es para ayudarte a mejorar y aprendas de tus errores, porque de un simple copiar & pegar no se aprende, y ahi tu estas haciendo la diferencia, aunque te rompas el coco por que no te sale lo que quieres....ahi estas haciendo la diferencia...
Ya ya se que no era por criticarme, pero me parecio mejor explicarte un poco mis pensamientos y aclararte que de esto estoy totalmente pegado.
Veras todo ese codigo, lo he sacado de demcopilar un programa que tengo, lo que pasa es que ese programa, tiene muchisimos botones, exactamente 14, y te e puesto solo lo que necesito, que som dos botones, una para conectar y el otro hace la lectura de la parte que necesito.
Este programa, no lleva ninguna dll ni ocx, si te puedo decir que necesita el NET.Framework, para que funcione.
Yo e sacado ese codigo como visualbasic, porque creo haber leido que para usar NET, es asin, aunque com el decompilador que tengo puedo sacar el codigo, com el lenguaje que quiera.
Lo de los Imports, no lo comprendo y no se exactamente que necesitarias.
Te puedo decir, que en los dos meses aprosimados que llevo metido en este mundo, he aprendido bastante de batch y de programacion en general, aunque creo que e empezado la casa por el tejado, como se dice por mi tierra y tendria que hacer un curso para novatos aunque sea.
Se que de copiar y pegar no se aprende nada, pero cuanto tardaste tu en saber lo que sabes?.
A mi me encantaria aprender algun lenguaje, pero sinceramente, por la edad que tengo y por lo que llevo leido de programacion, creo que lo que alguien aprenda en un año, yo necesitaria dos años, o mas jejeje.
Pero por supuesto que pienso seguir leyendo sobre programacion, es genial y alomejor algun dia, sea yo quien responda a alguien com sus dudas.
un saludo
Cita de: carlosguay en 22 Diciembre 2009, 14:08 PM
Ya ya se que no era por criticarme, pero me parecio mejor explicarte un poco mis pensamientos y aclararte que de esto estoy totalmente pegado.
Veras todo ese codigo, lo he sacado de demcopilar un programa que tengo, lo que pasa es que ese programa, tiene muchisimos botones, exactamente 14, y te e puesto solo lo que necesito, que som dos botones, una para conectar y el otro hace la lectura de la parte que necesito.
Este programa, no lleva ninguna dll ni ocx, si te puedo decir que necesita el NET.Framework, para que funcione.
Yo e sacado ese codigo como visualbasic, porque creo haber leido que para usar NET, es asin, aunque com el decompilador que tengo puedo sacar el codigo, com el lenguaje que quiera.
Lo de los Imports, no lo comprendo y no se exactamente que necesitarias.
Ok, no lleva ocs, y lo de los Imports indican que parte del .Net framework va a usar el programa (las funciones del framework son muchas y estan separadas por categorias (Nombres de espacio - se llaman con Imports) Ejemplo, si voy a usar Criptografia llamo a System.Criptography (o algo asi..), si voy a usar graficos con GDI llamo a System.Drawing, si llamo a otras DLLs que estan hechas tambien en .net llamo a System.Reflection.
con lo cual arriba de todo quedaria
Imports System.Criptography
Imports System.Drawing
Imports System.Reflection
ahora se entiende mejor? Fijate en los programas decompilados cuales son los "Imports" que usa
Cita de: carlosguay en 22 Diciembre 2009, 14:08 PM
Te puedo decir, que en los dos meses aprosimados que llevo metido en este mundo, he aprendido bastante de batch y de programacion en general, aunque creo que e empezado la casa por el tejado, como se dice por mi tierra y tendria que hacer un curso para novatos aunque sea.
Se que de copiar y pegar no se aprende nada, pero cuanto tardaste tu en saber lo que sabes?.
A mi me encantaria aprender algun lenguaje, pero sinceramente, por la edad que tengo y por lo que llevo leido de programacion, creo que lo que alguien aprenda en un año, yo necesitaria dos años, o mas jejeje.
Pero por supuesto que pienso seguir leyendo sobre programacion, es genial y alomejor algun dia, sea yo quien responda a alguien com sus dudas.
un saludo
Todos pueden programar, no es necesario ser un genio para eso (nadie nacio sabiendo). Yo llevo dentro de este mundo casi 6 años, y tambien estuve como vos, viendo codigos de diversas paginas para juntarlos y hacer algo mio y luego (como sea) cambiar todo, algunas veces salieron, otras no. Es solo cuestion de practicar.
Saludos!
Te agradezco mucho tu comprexion, ahora esta mas claro todo.
En el post inicial, pongo que lo que necesitaria, seria una aplicacion o .exe, que al ejecutarlo haga lo que necesito.
Veras antes de hacer ese paso, tengo que hacer otras cosas que ya tengo superadas com el bat, y ya que esa parte no se puede meter dentro del bat, al menos que pudiera ejecutarlo desde el bat, joder cuantos bats.
Por eso lo que te comento de conectar, osea el boton de conectar no lo necesitaria, aunque si ves necesita un hosname, que es una IP, que tendria que ponerle, y habia pensado algo como una variable que pudiera introducirla desde el mismo bat, pero por eso no te preocupes que ya pensaria yo algo.
Aqui tienes los Imports.
Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.IO.Ports
Imports System.Windows.Forms
Imports com.ms.vjsharp.cor
Imports com.ms.vjsharp.lang
Imports java.io
Imports java.lang
Imports java.net
Namespace WindowsApplication2
Public Class Form1
Inherits Form
Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Imports com.ms.vjsharp.cor
Imports com.ms.vjsharp.lang
Namespace WindowsApplication2
Public Class OffsetDialog
Inherits Form
Te pongo las dos cabezeras completas.
un saludo
visual basic + java ?? o.O
Nunca toque java, sera el momento de aprender :P
Bueno, lo que tienes que hacer en tu proyecto, es nombrar los "Imports" que tienen esos 2 archivos (sin reptetir).... o sea...mira..en el archivo 1 tienes
Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.IO.Ports
y en el archivo 2 tienes
Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Entonces en tu archivo que uniste todo, quedaria
Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Imports System.IO.Ports
entiendes??? ahora haz eso con las 2 listas que pusiste arriba.
Ademas, en el explorador de soluciones (la ventana donde esta el proyecto) veras una carpeta gris llamada "Referencias". Hazle click derecho y elige "Agregar Referencia"
En la lista que sale en una nueva ventana busca y marca estos items
Imports com.ms.vjsharp.cor
Imports com.ms.vjsharp.lang
Imports java.io
Imports java.lang
Imports java.net
No se si estaran con ese nombre, pero puedes buscar en internt de donde vienen :P
Perdona mi torpeza.
Dices en las dos listas?, te refieres a los Imports, porque codigo solo e puesto uno.
Cuando dices que agrege al proyecto, que tengo que intalar visulbasic,? yo como solo es un exe, o consola, habia pensado compilarlo desde NET.Framewor, asin.
csc Prueba.cs o
vbs Prueba.vb
Y otra cosa, a ese codigo que pongo, para que sea por consola, le sobraran cosas, no?
Como ves estoy algo liadillo, jeje.
un saludo
Cita de: carlosguay en 23 Diciembre 2009, 11:20 AM
Perdona mi torpeza.
Dices en las dos listas?, te refieres a los Imports, porque codigo solo e puesto uno.
Cuando dices que agrege al proyecto, que tengo que intalar visulbasic,? yo como solo es un exe, o consola, habia pensado compilarlo desde NET.Framewor, asin.
csc Prueba.cs o
vbs Prueba.vb
Y otra cosa, a ese codigo que pongo, para que sea por consola, le sobraran cosas, no?
Como ves estoy algo liadillo, jeje.
un saludo
Emm....yo tenia pensado que tenias el visual studio, hasta que dijiste compilarlo en vbc.... .mm.... para que salga enconsola tienes que hacer
vbc /target:console MiArchivo.vb
y para los Imports, tienes que hacer
vbc /imports:System.dll,System.XML.dll MiArchivo.vb
(Ahi importa System y System.XML, pero tienes que saber los archivos en los que estan los namespaces)
mesclado quedaria
vbc /target:console /imports:System.dll,System.XML.dll MiArchivo.vb
Ajummm, sigo igual de perdido, xd.
Cuando dije vbs, queria decir vbc, jeje, he compilado algunas cosillas que e encontrado por internet, y lo campilo como te dije, no pongo lo de target:console?
Si tengo que compilar poniendo todos los Imports, seria algo larguillo, no?
vbc /target:console /imports:System.dll,System.XML.dll,System.ComponentModel,dll,System.ComponetModel.XML.dll,System.Drawing.dll,System.Drawing.XML.dll etc,etc,etc MiArchivo.vb
Com los namespaces, me vuelves a dejar pillado. :rolleyes:
Si es mejor instalar el visualstudio, no tengo problema.
Sigo pensando que al codigo que te e puesto, ya que era de una interface, creo que le sobraran cosas y lo mismo tambien le faltan.
Raul si no tienes problema, casi mejor te mando el programa completo y el decompilardor por MP, creo que lo mismo hacemos de este hilo, una novela venezolana, jejej.
Solo para que lo veas eh, no es que quiera que me lo des ya hecho, aunque no seria una mala idea, jejeje es broma. ;D