Ir ao conteúdo

Posts recomendados

Postado
#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
Postado
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
Postado

@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;
}

 

Postado

@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
Postado
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
Postado
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
Postado
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
Postado
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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!