Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: .:Weeds:. en 8 Julio 2013, 00:55 am



Título: [SOLUCIONADO] Insertar texto en lugar específico textbox
Publicado por: .:Weeds:. en 8 Julio 2013, 00:55 am
Hola amigos, he estado un buen rato buscando con mi amigo Google y no he encontrado la respuesta a mi problema, os explico. Tengo el siguiente texto en un textbox:

Código:
   "RAIZ": {
"alerts": {
         "alert": true
      },
}

Y esto es lo que quiero conseguir añadiendo un texto en una posición especifica(me vale con insertarlo despues de "RAIZ": {)

Código:
   "RAIZ": {
"alerts": {
         "alert": true
      },
//TEXTO AÑADIDO
"alerts2": {
         "alert2": true
      },
//FIN TEXTO AÑADIDO
}

Parece algo sencillo pero no lo consigo  :-\

Saludos y gracias.


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: Eleкtro en 8 Julio 2013, 07:45 am
No lo entiendo muy bien, ¿Puedes ser más específico?.

Si sólo se tarata básicamente de insertar "X" texto en "Y" posición de un String, entonces puedes usar el método "Substring".

No sé si esto te servirá de ayuda porque no entiendo del todo la forma en la que lo intentas hacer, pero bueno, aquí tienes:

Código
  1. Public Class Form1
  2.  
  3.    Dim [String] As String = String.Empty
  4.  
  5.    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
  6.  
  7.        [String] = <a><![CDATA[
  8.   "RAIZ": {
  9. "alerts": {
  10.         "alert": true
  11.      },
  12. }
  13. ]]></a>.Value
  14.  
  15.        'Output:
  16.        '
  17.        '   "RAIZ": {
  18.        '"alerts": {
  19.        '         "alert": true
  20.        '      },
  21.        '}
  22.  
  23.        [String] = [String].Substring(0, [String].LastIndexOf(",")) & _
  24.            <a><![CDATA[
  25. "alerts2": {
  26.         "alert2": true
  27.      },
  28. ]]></a>.Value & (Environment.NewLine & "}")
  29.  
  30.        'Output:
  31.        '
  32.        '   "RAIZ": {
  33.        '"alerts": {
  34.        '         "alert": true
  35.        '      }
  36.        '"alerts2": {
  37.        '         "alert2": true
  38.        '      },
  39.        '}
  40.  
  41.        MsgBox([String])
  42.  
  43.    End Sub
  44.  
  45. End Class

EDITO: Si lo que quieres es poner (restringir) el cursor en una posición específica del textbox puedes usar el mismo método:
Código
  1. TextBox1.Select(TextBox1.Text.LastIndexOf(",") + 1, 0)


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: .:Weeds:. en 8 Julio 2013, 22:05 pm
Hola EleKtro H@cker,
No me sirve por varios motivos, el primero es que no puedo usar <a><![CDATA[ debido a que trabajo con .net 2.0 y no contiene linq (pero bueno se inserta el texto en una variable y problema resuelto), y la otra cuestión es que si existe mas texto debajo desaparece.

Perdona por no ser mas claro, lo que estoy haciendo exactamente es editar el archivo preferences de google chrome, para que mi extensión se añada a este. Debo de modificar esta parte:

Código:
   "extensions": {
      "alerts": {
         "initialized": true
      },
      "autoupdate": {
         "last_check": "***************",
         "next_check": "***************"
      },
      "blacklistupdate": {
         "lastpingday": "**********",
         "version": "0.0.0.***"
      },
      "chrome_url_overrides": {
         "bookmarks": [ "chrome-extension://*************************/main.html" ]
      },
      "last_chrome_version": "27.0.1453.116",
      "settings": {
         "aakhlmakppmkkmfkoibponkmmpgpmjgl": {
            "blacklist": true
         },
         "aandpgohbohmlknpjbblpmoladhoochg": {
            "blacklist": true
         },

La parte de texto que quiero añadir por ejemplo es esta:

Código:
         "jandpgohbohmlknpjbblpmoladhoochg": {
            "blacklist": true
         },

Esta debe añadirse despues de "settings": { y deberia de hacerse en orden alfabético aun que eso da igual ya que me he dado cuenta de que Google Chrome los ordena solo. He pensado en mirar las lineas 1 por 1 y cuando encuentre "settings": { que se añada 1 linea debajo pero tampoco se como.

Saludos y gracias de nuevo.


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: Novlucker en 8 Julio 2013, 22:18 pm
JSON

Saludos


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: Eleкtro en 8 Julio 2013, 22:28 pm
Ahora está todo mucho más claro, podrías haber comentado lo de Google desde el principio xD.

Puedes hacerlo a lo experto como lo haría Novlucker usando alguna librería para manejar JSON, o también puedes usar esta alternativa que hice:

Código
  1.        Dim MyExtension As String, GoogleFile As String, Preferences() As String
  2.  
  3.        MyExtension = """aakhlmakppmkkmfkoibponkmmpgpmjgl"": {""blacklist"": true},"
  4.        GoogleFile = "C:\Program Files\Google Chrome\Data\profile\Default\Preferences"
  5.        Preferences = IO.File.ReadAllLines(GoogleFile)
  6.  
  7.        For X As Int32 = 0 To Preferences.Length - 1
  8.            If Preferences(X).Trim = """settings"": {" Then
  9.                Preferences(X) &= MyExtension
  10.                IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)
  11.                Exit For
  12.            End If
  13.        Next

Saludos


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: Novlucker en 8 Julio 2013, 22:31 pm
Eso también sirve :P
Creo que para un virus alcanza :rolleyes:

Saludos


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: .:Weeds:. en 8 Julio 2013, 23:14 pm
muy bueno el code, MUCHAS GRACIAS!! le he añadido bien la ruta pero me da el siguiente error
"Caracteres no validos en la ruta de acceso" en la linea:
IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)

Código
  1.        Dim MyExtension As String, GoogleFile As String, Preferences() As String
  2.  
  3.        MyExtension = """aakhlmakppmkkmfkoibponkmmpgpmjgl"": {""blacklist"": true},"
  4.        GoogleFile = Environment.GetFolderPath(SpecialFolder.LocalApplicationData) & "\Google\Chrome\User Data\Default\Preferences"
  5.        Preferences = IO.File.ReadAllLines(GoogleFile)
  6.  
  7.        For X As Int32 = 0 To Preferences.Length - 1
  8.            If Preferences(X).Trim = """settings"": {" Then
  9.                Preferences(X) &= MyExtension
  10.                IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)
  11.                Exit For
  12.            End If
  13.        Next
  14.  

Era demasiado bonito para ser verdad xD

Saludos.


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: .:Weeds:. en 9 Julio 2013, 01:51 am
Vale ahora si que es 100% funcional:

Código
  1.        Dim MyExtension As String, GoogleFile As String, Preferences() As String
  2.  
  3.        Dim TextBoxChrome As New TextBox()
  4.        TextBoxChrome.Multiline = True
  5.  
  6.        Dim lines As String() = {
  7.        "         ""aakhlmakppmkkmfkoibponkmmpgpmjgl"": {",
  8.        "            ""blacklist"": true},"
  9.         }
  10.        MyExtension = Join(lines, vbCrLf)
  11.        GoogleFile = Environment.GetFolderPath(SpecialFolder.LocalApplicationData) & "\Google\Chrome\User Data\Default\Preferences"
  12.        Preferences = IO.File.ReadAllLines(GoogleFile)
  13.  
  14.        For X As Int32 = 0 To Preferences.Length - 1
  15.            If Preferences(X).Trim = """settings"": {" Then
  16.                Preferences(X) &= Environment.NewLine + MyExtension
  17.                TextBoxChrome.Text = String.Join(Environment.NewLine, Preferences)
  18.                Dim EscritorChrome As New StreamWriter(GoogleFile)
  19.                EscritorChrome.Write(TextBoxChrome.Text)
  20.                EscritorChrome.Close()
  21.                EscritorChrome.Dispose()
  22.                Exit For
  23.            End If
  24.        Next
  25.  

Saludos y gracias por la ayuda.  ;D


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: Eleкtro en 9 Julio 2013, 09:36 am
le he añadido bien la ruta pero me da el siguiente error
"Caracteres no validos en la ruta de acceso" en la linea:
IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)

Lo escribí al vuelo sin testearlo, lo que ocurre es que por confusión intercambié la posición los parámetros aquí:
Código
  1. IO.File.WriteAllText(String.Join(Environment.NewLine, Preferences), GoogleFile)

Así si:
Código
  1. IO.File.WriteAllText(GoogleFile, String.Join(Environment.NewLine, Preferences))

Este ya funciona (con la ruta correcta para tu PC):
Código
  1.    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  2.        Dim MyExtension As String, GoogleFile As String, Preferences() As String
  3.  
  4.        MyExtension = """aakhlmakppmkkmfkoibponkmmpgpmjgl"": {""blacklist"": true},"
  5.        GoogleFile = IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Google\Chrome\User Data\Default\Preferences")
  6.        Preferences = IO.File.ReadAllLines(GoogleFile)
  7.  
  8.        For X As Int32 = 0 To Preferences.Length - 1
  9.            If Preferences(X).Trim = """settings"": {" Then
  10.                Preferences(X) &= MyExtension
  11.                IO.File.WriteAllText(GoogleFile, String.Join(Environment.NewLine, Preferences))
  12.                Exit For
  13.            End If
  14.        Next
  15.    End Sub

PD: No es necesario identar las lineas del JSON (Google chrome lo ordena por si mismo), pero bueno, si prefieres hacer un string multilinea como en tu ultimo code es tu decisión.

Saludos.


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: .:Weeds:. en 9 Julio 2013, 13:41 pm
Este ya funciona (con la ruta correcta para tu PC):

Tu mensaje me ha dejado intrigado xD, llevo tiempo testeando donde se guarda ese archivo de configuración e independientemente de que windows utilice siempre se guarda en la ruta que yo puse. Hay algún caso donde se guarde en la ruta que tu especificaste? Por que de ser asi estoy fallando en lo mas básico  :rolleyes:

Saludos.


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: Eleкtro en 9 Julio 2013, 14:59 pm
Hay algún caso donde se guarde en la ruta que tu especificaste?

Claro, es porque uso Chrome portable. -> http://portableapps.com/apps/internet/google_chrome_portable

Pero no le des muchas vueltas a eso, poca gente usa portables, pero si quieres que tu aplicación séa lo más funcional pues deberías añadir como mínimo un control de errores por si el usuario no tiene el archivo de preferencias en la ruta a la que estás accediendo...

EDITO: Los programadores muchas veces se olvidan y no tienen en cuenta que existen las instalaciones desatendidas y los portables... en los programas que me permiten cambiar el directorio de guardado por defecto (%programdata% o %appdata%) siempre se lo cambio por otro directorio, y eso es una protección adicional anti-viral :).

Saludos!


Título: Re: [DUDA Vb.net] Insertar texto en lugar específico textbox
Publicado por: .:Weeds:. en 9 Julio 2013, 22:15 pm
Interesante, no me habia dado por pensar eso. Gracias por la info.

Citar
pero si quieres que tu aplicación séa lo más funcional pues deberías añadir como mínimo un control de errores por si el usuario no tiene el archivo de preferencias en la ruta a la que estás accediendo...

Hombre claro unos cuantos if file.exist y además todo en un try-catch-end try que en cualquier fallo tonto el programa peta xD, mi código final es muy distinto al posteado aqui.

Tema finalizado. Saludos y gracias, me has sido de mucha ayuda.