none
capturar Memória de Vídeo(endereço B800:0000) RRS feed

  • Pergunta

  •     

        Alguém tem alguma idéia de como eu poderia capturar o conteudo da  memória de vídeo do endereço B800:0000 em um textBox e depois restaura-la?


    terça-feira, 12 de junho de 2007 17:26

Todas as Respostas

  • tou meio que tentando entender a sua pergunta... seria a memoria da placa de video? ou seria o video rodando em algum aplicativo?

     

    de qualquer maneira... eu normalmente capturo a memoria utilizando : ReadProcessMemory (Win32 api)

     

    ex:

     

    Code Snippet

    GetWindowThreadProcessId(FindWindow("MyWindowClass", NULL), &dwProcessID);

     

    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
       
      if(!hProcess)
        return 0;
        
      ReadProcessMemory(hProcess, (LPCVOID) dwBaseAddress, szBuffer, 5, &strNumOfBytesRead);
       
      CloseHandle(hProcess);

     

     

    []'s

     

    Waner Tavares

     

     

     

    terça-feira, 12 de junho de 2007 21:32
  •  

     

      Olá Waner, consegui usando a linguagem C, é mais ou menos assim:

     

      unsigned char far *video = (unsigned char far *) 0xB8000000L;
       //-------------------------------------------------------------
       void teste(void)
       {
       FILE *txt;
       int i;
       txt = fopen("c:/testerobson.txt","a+t");
       for(i=0; i<(80*50); i++)

    {
           video[i*2] = 0x41;
           video[i*2+1] = 0x20;
           fwrite(&videoIdea, sizeof(videoIdea),1, txt);
       }
       getch();
       }


     

    quarta-feira, 13 de junho de 2007 14:19
  • tive o seguinte erro executando o seu codigo.

     

    Unhandled exception at 0x00411405 in forum.exe: 0xC0000005: Access violation writing location 0xb8000000.

    quarta-feira, 13 de junho de 2007 19:15
  •  

     

    Caro amigo desculpe a demora em responder-te, as funções principais estão em C usando o compilador da Borland


     

    unsigned char far *video = (unsigned char far *) 0xB8000000L;
    char vid[8000];
    //-------------------------------------------------------------
    void clrscr()
    {
       int i;
       for(i=0; i<(80*50); i++) {
      video[i*2] = 0x20;
      video[i*2+1] = 0x07;
       }
    }
    //------------------------------------------------------------
    void salvar()
    {
       FILE *txt;
       int i,j=1;
       if ((txt = fopen("G:\\ROBSON.TXT", "wt")) == NULL){
       fprintf(stderr, "Cannot open output file.\n");
       exit(1);}
       for(i=0; i<8000; i++){
       vidIdea=videoIdea;
       if (i%2==0){
       fputc(videoIdea, txt);
       j++;
       if(j==80){
       fputc('\n',txt);
       j=0;}
       }

       }
       fclose(txt);
    }
    //------------------------------------------------------------
    void restaurar()
    {
    int a;
    for(a=0;a<8000;a++){
    videoAngel = vidAngel;
    }
    }
    //------------------------------------------------------------

     


    quarta-feira, 27 de junho de 2007 17:08