Usuário com melhor resposta
string to long

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.
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);
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Sugerido como Resposta Robson William SilvaModerator segunda-feira, 13 de fevereiro de 2017 17:27
- Marcado como Resposta Robson William SilvaModerator segunda-feira, 20 de fevereiro de 2017 12:23
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.
-
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" -
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);
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Sugerido como Resposta Robson William SilvaModerator segunda-feira, 13 de fevereiro de 2017 17:27
- Marcado como Resposta Robson William SilvaModerator segunda-feira, 20 de fevereiro de 2017 12:23
-
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 0x03338B40int 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'
vou postar o codigo WR de ler e de escrever, talvez seja simples mas estou queimando a cabe'ca a dois dias
class MemoryWRpublic 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;
} -
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.
-
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