Ir ao conteúdo
  • Cadastre-se
herbertbahia

C++ Error invalid conversion from const char to dword

Posts recomendados

#include <tchar.h>
#include <windows.h>

DWORD getBaseAdress(DWORD pid, TCHAR *n);
int main(){
    HWND hwnd=0;
    DWORD pid=0;
    hwnd=FindWindow(0,"Program");
    if (hwnd){
        GetWindowThreadProcessId(hwnd, &pid);
        if(pid){
            HANDLE gHandle = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,pid);
            if (gHandle){
                DWORD baseAddress = getBaseAdress("program.exe");
                CloseHandle (gHandle);
            }
        }
    }
}

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
17 minutos atrás, Jorge Curvelo disse:

DWORD getBaseAdress(DWORD pid, TCHAR *n);

 

 

17 minutos atrás, Jorge Curvelo disse:

DWORD baseAddress = getBaseAdress("program.exe");

 

 

Está faltando um argumento ao chamar a função getBaseAdress, você não passou o valor do parâmetro pid .

 

Obs: Address se escreve com 2 Ds.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Jorge Curvelo    você quer carregar os jogos , e isso seria executar e abrir um jogo no pc ?

se for isso você usaria um código parecido assim  :

#include <iostream>
int main(){
    system ("start chrome.exe http://www.facebook.com.br");
    system ("start notepad.exe");
    // no lugar de " NOTEPAD " coloque o nome_do_jogo
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Jorge Curvelo   ali não está mexendo nas configurações  ,  apenas abre um programa .

mexer em arquivos exe , é tarefa muito difícil , senão impossível .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010  meu amigo eu criei um programa que quando abre o console ele abre outro dele mesmo em um modo diferente ai ficam 2 consoles e realmente preciso fazer isso. só que tive alguns problemas o primeiro fecha ai tudo bem vou manter somente o segundo  e não consigo evitar que o segundo que foi aberto em modo diferente continue abrindo outros e outros. por favor me ajuda.

system (argv[0]);break;

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 horas atrás, Jorge Curvelo disse:

...o primeiro fecha ai tudo bem vou manter somente o segundo  e não consigo evitar que o segundo que foi aberto em modo diferente continue abrindo outros e outros.

 

Uma forma de impedir que outras instâncias do programa sejam abertas é passando um parâmetro na linha de comando, assim:
Dentro da função main(), verifique se o parâmetro "-evitar" foi encontrado na linha de comando (analise os argumentos argv e argc). Se encontrado, então não execute o programa novamente (não chame aqui a função de iniciar o processo, como system/CreateProcess/ShellExecute/WinExec). Senão, execute o programa passando o parâmetro "-evitar" na linha de comando (chame aqui a função que inicia o processo passando "-evitar"). Lembre-se de que quando o usuário inicia manualmente a primeira instância do programa, o parâmetro "-evitar" não será encontrado.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
23 horas atrás, Jorge Curvelo disse:

system (argv[0]);break;

 

23 horas atrás, Jorge Curvelo disse:

meu amigo eu criei um programa que quando abre o console ele abre outro dele mesmo em um modo diferente ai ficam 2 consoles e realmente preciso fazer isso. só que tive alguns problemas o primeiro fecha ai tudo bem vou manter somente o segundo  e não consigo evitar que o segundo que foi aberto em modo diferente continue abrindo outros

 

Chamar system() para fazer algo não é de fato fazer algo. É apenas chamar o interpretador de comandos do sistema para executar o comando gravado no parâmetro, que é um char*. Como pedir pra alguém fazer algo por você.

 

Por cortesia do sistema todo programa em C recebe um int com a lista de argumentos e uma série de ponteiros para char*.

 

E para onde apontam esses ponteiros? Para os argumentos. O primeiro é o nome completo da localização do próprio programa.

 

E assim chamar system() e passar argv[0] dá nisso: simplesmente roda um programa, o próprio.

 

Continuar chamando outros é o óbvio efeito colateral, o efeito da "sala de espelhos" onde você não sabe mais o que é reflexo...

 

Se você precisa mesmo disso, o comum é criar um novo processo e passar o número do processo original; No Windows não existe fork() que é exatamente isso no Linux e no MacOS e lá o problema é resolvido usando o valor de retorno de fork() que é o numero do processo pai. Na primeira chamada fork() retorna zero.

 

Pode fazer algo parecido em windows usando threads em C. Em Windows acho que o mais perto é usar CreateProcess() https://docs.microsoft.com/en-us/windows/win32/procthread/creating-processes

 ou threads https://docs.microsoft.com/en-us/windows/win32/procthread/creating-threads

 

Você pode rodar um processo associado a um programa, associado a uma sessão ou como um serviço. No primeiro caso eles são encerrados quando seu programa é encerrado, o programa que os criou. No segundo caso ele vai rodar até um logoff de sua sessão. No terceiro caso ele vai ficar lá rodando até alguém fazer algo a respeito, como encerrar o sistema.

 

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@holifaca que bom que vocês me entendeu .@arfneto não entendir bem a funcao create process parece que soa 10 parâmetros não entendir como usa e o que faz também gostaria muito de saber como resolver isso com threads.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Jorge Curvelo disse:

não entendir bem a funcao create process parece que soa 10 parâmetros não entendir como usa e o que faz também gostaria muito de saber como resolver isso com threads

CreateProcess() é trivial. Tentou ler o que são os parâmetros? leu o exemplo que tem lá onde eu falei?

 

Threads vão ser uma solução melhor se seu programa contem os trechos que quer rodar, não exatamente o próprio programa. Seriam funções declaradas em seu próprio programa podem rodar em paralelo. Claro que pode dar na mesma.

 

CreateProcess() espera o nome de um programa executável e algumas informações sobre o ambiente de execução, a maioria opcional.

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
12 minutos atrás, Jorge Curvelo disse:

eu sei usar thread mas não consigo pensar como fazer isoo kkkk e ainda não entendir  a funcao create process

Não entendi o que quer dizer.

 

Se quer rodar um programa desconectado de sua sessão, apenas mandar rodar o programa, tipo abrir uma planilha, use CreateProcess()

 

Qual a dificuldade com CreateProcess()? É só um formulário pra preencher e a maioria dos argumentos é óbvia ou opcional.

 

E tem até um exemplo lá onde eu te falei. O que não entendeu? Pergunte algo objetivo nesse caso. Rodou o exemplo ao menos? Tem até um botão lá pra copiar...
 

image.png.f1eaf2b821dbd810517e23d5ca91816c.png

 

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain( int argc, TCHAR *argv[] )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    if( argc != 2 )
    {
        printf("Usage: %s [cmdline]\n", argv[0]);
        return;
    }

    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

Como está lá... Usando o botão e depois Control-V

adicionado 18 minutos depois

E só um exemplo. O que quer fazer é mais simples, se é apenas rodar o programa. É que você pode esperar por ele terminar, cancelar o outro quando seu programa encerra, se comunicar com o outro programa, ou só mandar rodar, que eu acho que é o que quer fazer...

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!