none
string to long RRS feed

  • Pergunta

  • olá, tenho um erro dando em meu codigo

    "argument '3' :  cannot convert from 'string'to 'long'

                 int Point;
                Point= MemoryWR.ReadInteger("calculadora.exe", 0x03338B40);
                MemoryWR.WriteLong("calculadora.exe", 0x03338B40, "0x"+Point.ToString("X8"), 5);

    nesse codigo o exemplo seria: 
    tenho o ponto do endereço x que corresponde a DECIMAL!

    e quando vou converter para HEX com 8 caracteres Point.ToString("X8") da o erro !

    lembrando que: se eu colocar no lugar do Point.ToString("X8") o valor 0x00000000 ele funciona normalmente.

    segunda-feira, 13 de fevereiro de 2017 06:18

Respostas

  • O seu problema é que esta passando uma string ao invés de um long no terceiro parâmetro, converta para long essa parte abaixo em negrito.

        int Point;
                Point= MemoryWR.ReadInteger("calculadora.exe", 0x03338B40);
                MemoryWR.WriteLong("calculadora.exe", 0x03338B40, "0x"+Point.ToString("X8"), 5);

    para isso:

     int Point;
                Point= MemoryWR.ReadInteger("calculadora.exe", 0x03338B40);
                MemoryWR.WriteLong("calculadora.exe", 0x03338B40, Convert.ToInt64("0x"+Point.ToString("X8")), 5);


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    segunda-feira, 13 de fevereiro de 2017 12:03

Todas as Respostas

  • Bom dia,

    Obrigado pela participação no Fórum MSDN.

    Então o que você precisa é converter de decimal para hexadecimal?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 13 de fevereiro de 2017 11:24
    Moderador
  • Olá!

    Tenta o seguinte:

    //Traca essa linha
    MemoryWR.WriteLong("calculadora.exe", 0x03338B40, "0x"+Point.ToString("X8"), 5);
    
    //Por essa
    MemoryWR.WriteLong("calculadora.exe", 0x03338B40, Point.ToString("X8"), 5);

    Espero ter ajudado e boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    segunda-feira, 13 de fevereiro de 2017 11:26
  • O seu problema é que esta passando uma string ao invés de um long no terceiro parâmetro, converta para long essa parte abaixo em negrito.

        int Point;
                Point= MemoryWR.ReadInteger("calculadora.exe", 0x03338B40);
                MemoryWR.WriteLong("calculadora.exe", 0x03338B40, "0x"+Point.ToString("X8"), 5);

    para isso:

     int Point;
                Point= MemoryWR.ReadInteger("calculadora.exe", 0x03338B40);
                MemoryWR.WriteLong("calculadora.exe", 0x03338B40, Convert.ToInt64("0x"+Point.ToString("X8")), 5);


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    segunda-feira, 13 de fevereiro de 2017 12:03
  • Olá!

    Tenta o seguinte:

    //Traca essa linha
    MemoryWR.WriteLong("calculadora.exe", 0x03338B40, "0x"+Point.ToString("X8"), 5);
    
    //Por essa
    MemoryWR.WriteLong("calculadora.exe", 0x03338B40, Point.ToString("X8"), 5);

    Espero ter ajudado e boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    nao amigo, nao adiantou! pois o "0x" + foi apenas para adicionar o hexa ja criado.

    vou dar outro exemplo:

    string number = "928677808";
    int Point = int.Parse(number);
    string hex = Point.ToString("X8");
    textBox1.Text = hex.ToString();

    esse exemplo no textBox1.Text ele converteu o numero DECIMAL para o hex! que 'e o que eu preciso!

    no caso ao clicar ele converteu para = 375A7FB0

    ou seja 928677808 = 375A7FB0

    preciso colocar 0x375A7FB0 na linha que citei

    MemoryWR.WriteLong("calculadora.exe", 0x03338B40, COLOCAR ELA AQUI, 5);

    mas eu nao posso estar simplismente colocando ela ali, pois o endere'co muda a cada vez que fecha a calculadora.
    o endere'co para ler o VALOR eh  0x03338B40

    int Point;
                Point= MemoryWR.ReadInteger("calculadora.exe", 0x03338B40);

    //esse codigo de cima ele le o local como decimal

    no caso foi 928677808
    que convertido ficaria 375A7FB0

    //e para escrever

    MemoryWR.WriteLong("calculadora.exe", 0x03338B40, Point, 5);

    esse codigo daria certo se eu quiser DECIMAL!
    mas eu quero converter o decimal para hex! e colocar onde esta o Point!
    e ao colocar
    Point.ToString("X8")

    da erro

    Error 2 Argument '3': cannot convert from 'string' to 'long'

    v
    ou postar o codigo WR de ler e de escrever, talvez seja simples mas estou queimando a cabe'ca a dois dias

     class MemoryWR

    public static void WriteLong(string EXENAME, int Address, long Value, int zSize)
            {
                checked
                {
                    try
                    {
                        Process[] Proc = Process.GetProcessesByName(EXENAME);
                        if (Proc.Length != 0)
                        {
                            int Bytes = 0;
                            int Handle = OpenProcess(PROCESS_ALL_ACCESS, 0, Proc[0].Id);
                            if (Handle != 0)
                            {
                                WriteProcessMemoryLong(Handle, Address, ref Value, zSize, ref Bytes);
                            }
                            CloseHandle(Handle);
                        }
                    }
                    catch
                    { }
                }
            }

    public static int ReadInteger(string EXENAME, int Address)
            {
                int Value = 0;
                checked
                {
                    try
                    {
                        Process[] Proc = Process.GetProcessesByName(EXENAME);
                        if (Proc.Length != 0)
                        {
                            int Bytes = 0;
                            int Handle = OpenProcess(PROCESS_ALL_ACCESS, 0, Proc[0].Id);
                            if (Handle != 0)
                            {
                                ReadProcessMemoryInteger(Handle, Address, ref Value, 4, ref Bytes);
                                CloseHandle(Handle);
                            }
                        }
                    }
                    catch
                    { }
                }
                return Value;
            }

    segunda-feira, 13 de fevereiro de 2017 12:04
  • Bom dia,

    Conseguiu resolver?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 16 de fevereiro de 2017 12:03
    Moderador
  • Bom dia,

    Conseguiu resolver?

    Atenciosamente,


    Olá, o valor Decimal e o valor hexa, são os mesmos!
    no entretanto voce pode simplesmente fazer o seguinte:

    int

               

    int Point;

    Point= MemoryWR.ReadInteger("calculadora.exe", 0x03338B40);

    MemoryWR.WriteLong("calculadora.exe", 0x03338B40, Point, 5);

    lembrando apenas que a calculadora.exe no endereço 0x03338B40

    nao seria sua base para pegar o codigo!

    e sim do valor uma referencia:

    eu pesquisei e encontrei 0x014DD7A1 como referencia a cada vez que abre a calculadora do endereço 0x03338B40

    ou seja o codigo certo seria:

    int Point;

    Point= MemoryWR.ReadInteger("calculadora.exe", 0x014DD7A1 );

    MemoryWR.WriteLong("calculadora.exe", 0x03338B40, Point, 5);

    concluido pode fechar valeu

    sexta-feira, 17 de fevereiro de 2017 21:10