Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-03-2009
yelian yelian is offline
No confirmado
 
Registrado: nov 2007
Ubicación: Cuba
Posts: 81
Poder: 0
yelian Va por buen camino
Gracias a krlox31416, escafandra, cHackAll por la ayuda brindad ,

Después de tanto buscar y buscar encontré unos códigos que me pueden servir para lo que quiero hacer, mezclando estos códigos con lo que me dio escafandra sobre (XOR, OR, AND).

Códigos Encontrados:
----------------------
// para salida
void outp(char x)
{
asm mov dx,0x378
asm mov al,x
asm out dx,al
}
//para entrada
char inp(void)
{
char x;
asm mov dx,0x378
asm mov al,x
asm in al,dx
asm mov x,al
return x;
}

-AAA Estos codicos los encontre en www.elrincondelc.com , espero que no tenga nada que ver que los ponga a qui no...

Despues les cuento como me ha ido con todo esto...

Gracias por toda la ayuda

[Saludos]...
Responder Con Cita
  #2  
Antiguo 17-03-2009
Avatar de krlox31416
krlox31416 krlox31416 is offline
Miembro
 
Registrado: jun 2008
Ubicación: San Juan del Río, Querétaro, México
Posts: 75
Poder: 17
krlox31416 Va por buen camino
ok's hijo!!!... se agradecen las gracias...

yo casi no he tenido la oportunidad de ayudar o aportar algo de mi en este foro...

la verdad es que terde mucho en saber manejar las funciones de este foro y hasta hace poco le agarre ley...

y si se siente chido que alguien desonocido que esta a mucha distancias te agradesca por la ayuda...

= mete gracias a ti por seguir aportando ideas...

es mas gracias a todos no???

o que show???

bueno pues gracias a todos!!! y...

saludos a todos!!!...
__________________
el cielo me dio un cariño sin merecerlo... chimikuilo!!!
Responder Con Cita
  #3  
Antiguo 17-03-2009
yelian yelian is offline
No confirmado
 
Registrado: nov 2007
Ubicación: Cuba
Posts: 81
Poder: 0
yelian Va por buen camino
Thumbs up Solucionado

Hola a todos de nuevo;
Al final logre hacer lo que tanto queria, gracias a ustedes y a otras paginas que visite,
Aqui les dejo algo de mi code utilizado por si alguien le interesa y tienen la misma duda que yo tenia...

Code: (OnClick del Button)
------
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
int f=0;
int g=0;
int h=0;
int res=0;
char resul=0;
if (CheckBox1->Checked==true) a=1;
if (CheckBox2->Checked==true) b=2;
if (CheckBox3->Checked==true) c=4;
if (CheckBox4->Checked==true) d=8;
if (CheckBox5->Checked==true) e=16;
if (CheckBox6->Checked==true) f=32;
if (CheckBox7->Checked==true) g=64;
if (CheckBox8->Checked==true) h=128;
res=a+b+c+d+e+f+g+h;
//Convirtiendo de int a char
resul=(char)res;
//Abriendo y Cerrando los puertos con codico de ensamble
asm mov dx,0x378
asm mov al,resul
asm out dx,al

Explico un poco de lo utilizado:

Tengo 8 CheckBox,cada uno me enciende y apaga un puerto diferente
ejemplo si esta activado el CheckBox1 y 5 se te enciente el Ping 2 y 6 del puerto paralelo.
-Todo ese codico recuerden que se pone en el OnClick de un boton que es el que va a Actualizar los puertos (Es el que va a hacer la funcion de Encender y Apagar los puertos selecccionados)...

Espero que le sea de Utilidad .

[Saludos]...
Responder Con Cita
  #4  
Antiguo 02-04-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.198
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
He investigado el tema de leer y escribir en los puertos, dada la peculiar dificultad en XP que obliga al uso de librerías externas o al uso de drivers.

Voy a colocar un código que funciona sin librerías ni drivers. El único requisito es que seamos Administradores del sistema. Con un driver funciona sin ser administradores, pero para instalar dicho driver si debemos tener esos privilegios.

El truco está en usar una API poco conocida y que se usa para los Debuggers: ZwSystemDebugControl.

Código:
//---------------------------------------------------------------------------
#pragma hdrstop

//---------------------------------------------------------------------------
#pragma argsused

//------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>

//#pragma comment(lib, "advapi32")
//#pragma link "advapi32.lib"

#define NTAPI       __stdcall

typedef int NTSTATUS;

typedef enum _SYSDBG_COMMAND
{
  SysDbgSysReadIoSpace = 14,
  SysDbgSysWriteIoSpace = 15
}SYSDBG_COMMAND, *PSYSDBG_COMMAND;

typedef NTSTATUS (NTAPI * PZwSystemDebugControl) (
    SYSDBG_COMMAND ControlCode,
    PVOID InputBuffer,
    ULONG InputBufferLength,
    PVOID OutputBuffer,
    ULONG OutputBufferLength,
    PULONG ReturnLength
    );

PZwSystemDebugControl ZwSystemDebugControl = NULL;

typedef struct _IO_STRUCT
{
    DWORD IoAddr;       // IN: Aligned to NumBYTEs,I/O address
    DWORD Reserved1;    // Never accessed by the kernel
    PVOID pBuffer;      // IN (write) or OUT (read): Ptr to buffer
    DWORD NumBYTEs;     // IN: # BYTEs to read/write. Only use 1, 2, or 4.
    DWORD Reserved4;    // Must be 1
    DWORD Reserved5;    // Must be 0
    DWORD Reserved6;    // Must be 1
    DWORD Reserved7;    // Never accessed by the kernel
}
IO_STRUCT, *PIO_STRUCT;

BOOL EnablePrivilege (PCSTR name)
{
    HANDLE hToken;
    TOKEN_PRIVILEGES priv = {1, {0, 0, SE_PRIVILEGE_ENABLED}};

    LookupPrivilegeValue(0, name, &priv.Privileges[0].Luid);
    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
    AdjustTokenPrivileges (hToken, FALSE, &priv, sizeof priv, 0, 0);
    CloseHandle (hToken);

    return (GetLastError() == ERROR_SUCCESS);
}

BOOL Inicializa()
{
    HMODULE hNtdll;
    hNtdll = LoadLibrary ("ntdll.dll");

    if(EnablePrivilege(SE_DEBUG_NAME)==FALSE){
       printf("Usted no tiene suficientes privilegios\n");
       return FALSE;
    }

    if(hNtdll){
       ZwSystemDebugControl = (PZwSystemDebugControl)GetProcAddress(hNtdll, "ZwSystemDebugControl");
       return TRUE;
    }
    return FALSE;
}

BYTE InPortB(int Port)
{
    BYTE Value;
    IO_STRUCT io;

    io.IoAddr = Port;
    io.Reserved1 = 0;
    io.pBuffer = (PVOID)(PULONG)&Value;
    io.NumBYTEs = sizeof(BYTE);
    io.Reserved4 = 1;
    io.Reserved5 = 0;
    io.Reserved6 = 1;
    io.Reserved7 = 0;

    ZwSystemDebugControl(SysDbgSysReadIoSpace, &io, sizeof(io), NULL, 0, NULL);
    return Value;
}

void OutPortB(int Port, BYTE Value)
{
    IO_STRUCT io;
    
    io.IoAddr = Port;
    io.Reserved1 = 0;
    io.pBuffer = (PVOID)(PULONG)&Value;
    io.NumBYTEs = sizeof(BYTE);
    io.Reserved4 = 1;
    io.Reserved5 = 0;
    io.Reserved6 = 1;
    io.Reserved7 = 0;
    
    ZwSystemDebugControl(SysDbgSysWriteIoSpace, &io, sizeof(io), NULL, 0, NULL);
};

void BeepOn (int Freq)
{
    BYTE b;

    if((Freq >= 20) && (Freq <= 20000)){
        Freq = 1193181 / Freq;
        b = InPortB(0x61);
        if((b & 3) == 0){
           OutPortB (0x61, (BYTE) (b | 3));
           OutPortB (0x43, 0xb6);
        }
        OutPortB (0x42, (BYTE)Freq);
        OutPortB (0x42, (BYTE)(Freq >> 8));
    }
}

void BeepOff (void)
{
    BYTE b;

    b = (InPortB(0x61) & 0xfc);
    OutPortB(0x61, b);
}

// Sólo funciona en Windows XP y superiores
// Se debe ser Administrador del Sistema
int main(void)
{
    if(Inicializa()==FALSE){
       printf("Error al inicializar los puertos\n");
       Sleep (2000);
       return 0;
    }

    // Aquí podemos utilizar las funciones InPortB y OutPortB

    // Activamos el altavoz del sistema durante 300ms con una frecuencia
    // de 1000Hz
    BeepOn(1000);  // frecuencia de 1000Hz
    Sleep (300);
    BeepOff();

    return 0;
}
La función main demuestra como usar las funciones para activar el altavoz del sistema.

Patra escribir y leer del puerto paralelo, basta con:
Código:
Inicializa();
BYTE B = InPort(0x378);  // Lee del puerto paralelo
OutPort(0x378, 3);       // Escribe en el puerto paralelo el valor 3
Saludos.

Última edición por escafandra fecha: 02-04-2009 a las 22:30:21. Razón: Mejoras en la claridad del código
Responder Con Cita
  #5  
Antiguo 04-04-2009
Avatar de krlox31416
krlox31416 krlox31416 is offline
Miembro
 
Registrado: jun 2008
Ubicación: San Juan del Río, Querétaro, México
Posts: 75
Poder: 17
krlox31416 Va por buen camino
lo malo es que hace tiempo no programo en c

interesante codigo!!!...
tendre que conseguirme el c...
jejeje...

saludos!!!...
__________________
el cielo me dio un cariño sin merecerlo... chimikuilo!!!
Responder Con Cita
  #6  
Antiguo 04-04-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.198
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por krlox31416 Ver Mensaje
interesante codigo!!!...
tendre que conseguirme el c...
jejeje...

saludos!!!...
No necesariamente debe estar escrito en C.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Puerto paralelo bactering Varios 8 15-09-2011 07:55:09
PWM con puerto paralelo... emeceuy Varios 5 19-07-2007 20:30:23
Puerto paralelo en C Chase C++ Builder 0 04-07-2005 12:29:37
Puerto Paralelo jorge Lazarus, FreePascal, Kylix, etc. 1 20-04-2005 03:25:42


La franja horaria es GMT +2. Ahora son las 08:42:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi