c_Mouse

norline

Mitglied
Hallo,
Warum funktionert folgender code unter visual c++ 6 nicht ?
bitte um Hilfe.
danke im Voraus.
Code:
//Header Datei
#ifndef mhmouseH
#define mhmouseH


#include <dos.h>
#include <stdlib.h>

struct TMaus
{
 unsigned int Func,Taste,X,Y;
 short TextModus;
} Maus;

void MausDa(unsigned int Nr)
{
  asm {
    mov AX,Nr;
    int 0x33;
  }
}

void ShowMouse(short Show)
{
  //Schaltet den Mauszeiger an/aus
 if (Show==1) MausDa(1);
 else MausDa(2);
}

short MausReset(short TextModus)
//Initialisiert die Maus; liefert 0, wenn kein Maustreiber installiert
//ist
{
  Maus.TextModus=TextModus;
  if (peek(peek(0,0xCC+2),peek(0,0xCC))!=0xCF)
  {
    MausDa(0);
    MausDa(1);
    return 1;
  }
  else return 0;
}

void MausInt()
{
  unsigned int a=Maus.Func, b=Maus.Taste, c=Maus.X, d=Maus.Y;
  asm {
    mov AX,a;
    mov BX,b;
    mov CX,c;
    mov DX,d;
    int 0x33;
    mov a,AX;
    mov b,BX;
    mov c,CX;
    mov d,DX;
  }
  Maus.Func=a; Maus.Taste=b; Maus.X=c; Maus.Y=d;
}

void MausData()
//belegt die Mausvariable "X","Y" und "Taste" mit aktuellen Daten
{
  Maus.Func=3; MausInt();
  if (Maus.TextModus)
  {
    Maus.X=div(Maus.X,8).quot;
    Maus.Y=div(Maus.Y,8).quot;
  }
  Maus.Y++;
  Maus.X++;
}

void MausWindow(int X1, int Y1, int X2, int Y2)
//Setzt ein Mausfenster von X1,Y1 bis X2,Y2
{
  X1--;X2--;Y1--;Y2--;
  if (Maus.TextModus==1)
  {
    X1*=8;
    X2*=8;
    Y1*=8;
    Y2*=8;
  }
  MausDa(2);
  Maus.Func=7; Maus.X=X1; Maus.Y=X2;
  MausInt();
  Maus.Func=8; Maus.X=Y1; Maus.Y=Y2;
  MausInt();
  MausDa(1);
}
#endif

//Main Datei
#include "mouse.h"
#include <conio.h>

void main()
{
	
  clrscr();
  MausReset(1);
  while (!kbhit())
  {
    MausData();
    gotoxy (10,10);
    cprintf ("X: %d  Y: %d  Taste: %d   ",Maus.X,Maus.Y,Maus.Taste);
  }
  kbhit();
  ShowMouse(0);
}
 
Was mir bei schnellen Durchschauen auffällt:

- statt "asm" musst du "__asm" schreiben.
- Variablen für den "mov"-Befehl sollten als "short" deklariert werden.
- den Befehl "peek" gibt es es nicht.

Gruß
MCoder
 
Danke für die Antwort,

kann man nicht aber irgendwie unter windows kopilieren?
ich kenne mich nicht gut aus mit Linux

Grüß
 
Also ich will ein programm schreiben ,das die Mausbewegung aufzeichen,ich hab mit diesem code angefanfen ,damit ich halt bißchen Erfahrung mit solcher Sache bekomme.

Ich denke unter linux läuft das einwandfrei und ich wollte halt unter windows arbeite
Grüß
 
Zuletzt bearbeitet:
Unter Linux gibts den Daemon "gpm", der die Mouse direkt in der Konsole ansprechen kann. Ein Blick
in den Quellcode von gpm kann man sich ja gönnen um zu sehen, wie die das umgesetzt haben ;)

LG
Andy
 
Zurück