JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=edfc847a0ade7f4d0fc6dabdc1169110Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Mausbewegungen überwachen. Wie?
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
homer Jay
Mini JLI'ler



Anmeldedatum: 13.01.2005
Beiträge: 12

Medaillen: Keine

BeitragVerfasst am: 18.02.2005, 08:46    Titel: Mausbewegungen überwachen. Wie? Antworten mit Zitat

hi leuz

Wie kann ich ein porgramm (directX) schreiben, dass:

1. im Hintergrund läuft
2. kein Fenster hat (also keine optische ausgabe)

3. überwacht ob die Maus bewegt wird und wo sie sich gerade befindet (egal wo sie sich befindet z.B. am Desktop oder "in auf" einer anderen Anwendung (word, exel usw.) oder so)


Zu Punkt2:
Kann man nicht einfach den code der mit der erzeugung des fensters zu tun hat weglassen ?
_______________________

Ich möchte ein programm schreiben, dass automatisch gestartet wird (oder auch nicht automatisch) und wenn der benutzer dann einer bestimmte zeit lang die maus nicht bewegt den PC automatisch herunterfährt. Beim herunterfahren habe ich schon eine idee: ich starte einfach eine kleine batch datei von meiner exe aus (sehr einfach zu realisieren)!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 18.02.2005, 11:18    Titel: Antworten mit Zitat

Man kann eine Mausabfrage direkt so wie du vorhast aus Sicherheitsgründen nicht anlegen. Was allerdings nicht heisst, dass man es gar nicht hinbekommen kann.
Du wirst wahrscheinlich ein (nicht sichtbares) Fenster erstellen müssen, in das du die DirectX-Abfragen unterbringen kannst. Dazu musst du den Mausmodus auf Nonexclusiv setzen, damit du die Maus für andere Anwendungen nicht sperrst...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Leviathan
Mini JLI'ler


Alter: 49
Anmeldedatum: 12.01.2005
Beiträge: 31
Wohnort: S9
Medaillen: Keine

BeitragVerfasst am: 18.02.2005, 12:01    Titel: Re: Mausbewegungen überwachen. Wie? Antworten mit Zitat

homer Jay hat Folgendes geschrieben:
ich starte einfach eine kleine batch datei von meiner exe aus (sehr einfach zu realisieren)!


Hi! Ich kann Dir zwar bei Deinem Problem nicht weiterhelfen (bin in der Materie noch zu unerfahren) aber könntest Du mir mal verraten wie das genau geht?

mfg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 18.02.2005, 13:03    Titel: Antworten mit Zitat

so weit ich weiß hatten wir schon mal ne Diskussion über das Herunterfahren wie man das im Prog realisieren könnte, einfach mal suchen wen es interessiert.
Tjo und ein Fenster brauch man für so gut wie alles, da windows am Fenster zum Beispiel unterscheiden kann, ob ein Programm gerade aktiv ist, oder nicht (Grafikkarte braucht ja nix zu berechnen, wenn das Spile minimiert wurde, genau wie das dann keine Mauseingaben benötigt werden)
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 18.02.2005, 14:30    Titel: Antworten mit Zitat

Ach gottchen, DirectInput für so einen Popelskram, also bitte Wink Du hast ja gar keine Ahnung was dann für ein Mist auf Dich zukommt nur für einen Popeligen Mousehooker!

Wenn Du es global haben willst und schön benutz das hier:
CPP:
inline bool cursormoved (void)
{
    static ::POINT pos_old;
    static ::POINT pos_curr;
 
    ::GetCursorPos (pos_curr);

    if (pos_old.x == pos_curr.x && pos_old.y && pos_curr.y)
        return (true);

    pos_old.x = pos_curr.x;
    pos_old.y = pos_curr.y;

    return (false);
}


ist doch wirklich keine Kunst Wink

edit:

zum Fenster: http://www.win-api.de/tutorials.php?tutid=2 gaaanz easy
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
homer Jay
Mini JLI'ler



Anmeldedatum: 13.01.2005
Beiträge: 12

Medaillen: Keine

BeitragVerfasst am: 19.02.2005, 16:16    Titel: Antworten mit Zitat

@Leviathan

den PC über einen Batch herunter fahren (für XP):

gib einfach mal bei Start>Ausführen cmd ein und in die Konsole schreibst du dann: shutdown \?
(mit help kommt man zu den gebräuchlichsten Dos-Befehlen)
Die Befehle die dort funktioniern kann man dann ganz einfach in eine txt schreiben, und die Endung *.txt muss man in *.bat umändern dann hat man eine auführbare Batch-Datei.

Gib help ein: dort steht dann alles beschrieben (das ist DOS Programmierung, warum kompliziert wenns einfach auch geht)

Noch ne Sache dazu:
in einem C++ Prog kannst du die Dos-Befehle auch folgendermaßen verwenden:
windows.h einbinden und dann mit der Fukt. system() aufrufen!! Smile
z.B.system("help");
so erspart man sich die *.bat datei!!! Wink
_________________________________________________

AFE-GmdG hat geschreiben
Zitat:
Dazu musst du den Mausmodus auf Nonexclusiv setzen, damit du die Maus für andere Anwendungen nicht sperrst...


Wie kann ich den Mausmodus Nonexclusiv setzen (kenn mich noch nich so gut aus Embarassed ).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 19.02.2005, 21:22    Titel: Antworten mit Zitat

homer Jay hat Folgendes geschrieben:
Wie kann ich den Mausmodus Nonexclusiv setzen (kenn mich noch nich so gut aus Embarassed ).

Da muss man net rot werden! Leder war mal Anfänger...
zur Frage: Das kannst du folgendermaßen machen:
CPP:
LPDIRECTINPUT8 lpInput=NULL;
LPDIRECTINPUTDEVICE8 lpMouse=NULL;

DirectInputCreate8(hInstance,DIRECTINPUT_VERSION,IID_IDirectInput8, (void**)&lpInput,NULL);

lpInput->CreateDevice(GIUD_SysMouse,&lpMouse,NULL);
lpMouse->SetDataFormat(&c_dfDIMouse);

lpMouse->SetCooperationLevel(hWnd,DISCL_NONEXCLUSIV | DISCL_FOREGROUND);
// [...]

Der wichtige Aufruf ist, du hast erfasst Wink , der SetCooperationLevel-Aufruf, genaugenommen das DISCL_NONEXCLUSIV. Der Rest ist initalisierung DirectInput.
Gruß

FH
<edit>
Was ist dann das komisches? Unterstrichen in cpp ergibt das:
CPP:
[u:4985944afa] [/u:4985944afa] [b:4985944afa] [/b:4985944afa] [i:4985944afa] [/i:4985944afa][php]
Kann mir mal jemand erklären, was das soll?

</edit>
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free


Zuletzt bearbeitet von FH am 19.02.2005, 21:26, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 19.02.2005, 21:25    Titel: Antworten mit Zitat

Verwirr ihn doch jetzt nicht mit solchem Zeug wenn er Patricks Code verwendet braucht er das doch gar nicht.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 19.02.2005, 21:29    Titel: Antworten mit Zitat

Is ja gut... Das ist aber kein DirectInput... Eine Alternativlösung sei erlaubt... Er kann es sich ja aussuchen.
@homerJay: Mein Code ist net ganz einfach... Wenn du es einfacher haben willst, nimm Patricks Code...
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 19.02.2005, 21:47    Titel: Antworten mit Zitat

Jaaaaaah nimm ihn! NIMM IHN!!! *beschwör* *ggg*

Also für sowas braucht man wirklich kein DirectInput, hat doch keinen Sinn für sowas Wink und nebnebei wenn Du DX benutzt machst Du Dein Programm abhängig von der Version von DirectInput Smile
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
homer Jay
Mini JLI'ler



Anmeldedatum: 13.01.2005
Beiträge: 12

Medaillen: Keine

BeitragVerfasst am: 21.02.2005, 10:26    Titel: Antworten mit Zitat

danke für eure zahlreichen antworten!! Razz

ich habe die möglichkeit von Patrick verwendet und das fuzt sehr gut und is auch einfach zu realisieren!!

PS:
Wenns jemanden interessiert, ich werde den code vielleicht posten, wenn ich ihn fertig habe!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 21.02.2005, 10:39    Titel: Antworten mit Zitat

poste und ich guck mal obs was zu optimieren gibt ^^
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
homer Jay
Mini JLI'ler



Anmeldedatum: 13.01.2005
Beiträge: 12

Medaillen: Keine

BeitragVerfasst am: 21.02.2005, 12:45    Titel: Antworten mit Zitat

hier der code:
CPP:
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
#include <time.h> //für den ganzen zeit kram

//funktionsprototypen
bool cursormoved (void);
int zeit(void);


//zwei strukturen vom typ POINT und andere strukturen und variablen
POINT  pos_old;
POINT  pos_curr;
struct tm *tmnow;


void main()
{
   bool move = false;
   int zeit_aktuell,zeit_beenden; //arrays für die zeit
   int countdown = 0;

   printf("*******************************************************************************\n");
   printf("Dieses Programm faehrt den Computer nach einer beliebigen Zeit herunter, wenn \nin dieser Zeit der Mauscursor nicht bewegt wird!!\n");
   printf("*******************************************************************************\n\n");

   do
   {
      printf("Nach wievielen Minuten wollen sie PC herunterfahren??\n");
      scanf("%d",&countdown);
   }
   while(countdown > 59 || countdown <2);

   
   GetCursorPos (&pos_old);//damit pos_old initialisiert wird

   //die aktuelle zeit (nur minuten)wird in eine int variable gespeichert
   zeit_aktuell = zeit(); //zeit_aktuell enthält nun den aktuellen minutenstand
   
   //zeitzustand von 59 min abfangen
   if(zeit_aktuell == 59)
   {
      zeit_beenden = (zeit_aktuell+countdown)-60;
   }
   else
   {
      zeit_beenden = zeit_aktuell+countdown;
      if(zeit_beenden >= 60)
      {
         zeit_beenden = (zeit_beenden - 60);
      }
   }

   printf("beenden: %d   aktuell: %d ",zeit_beenden,zeit_aktuell);

   do
   {
      zeit_aktuell = zeit();   
      move = cursormoved();

      
      if((move == 0) && (zeit_aktuell == zeit_beenden))
      {
         printf("es funzt!!!\n");
         system("shutdown -s -t 180");
      }
      else
      if(move == 1)
      {
         zeit_aktuell = zeit(); //zeit_aktuell enthält nun den aktuellen minutenstand
   
         //zeitzustand von 59 min abfangen
         if(zeit_aktuell == 59)
         {
            zeit_beenden = (zeit_aktuell+countdown)-60;
         }
         else
         {
            zeit_beenden = zeit_aktuell+countdown;
            if(zeit_beenden >= 60)
            {
               zeit_beenden = (zeit_beenden - 60);
            }
         }
         printf("beenden: %d   aktuell: %d \n",zeit_beenden,zeit_aktuell);
         //system("pause");

      }

   }
   while(1);

};



//wenn der cursour bewegt wird gibt diese fuktion true(1) zurück wenn nicht false(0)
bool cursormoved (void)
{
    GetCursorPos (&pos_curr);

    if (pos_old.x == pos_curr.x && pos_old.y == pos_curr.y)
   {
      return (false);
   }
   else
   {
      pos_old.x = pos_curr.x;
      pos_old.y = pos_curr.y;
      return (true);
   }
};

//aktuelle Zeit in ein Array speichern
int zeit(void)
{
   int minuten = 0;

   time_t tnow;

   time(&tnow);

   tmnow = localtime(&tnow);

   minuten = tmnow->tm_min;

   return minuten;
};


Bei diesem code gibs sicher noch einiges zu optimieren da das prog irgendwie mein system sehr stark auslastet!!! Question

Und es lauft auch nicht im hintergrund bzw. hat auch noch ein fenster (ich weiß aber eh wie das funzt bei einer konsole), ich werd das prog aber so lassen (also nicht im hintergrund)!!

PS: es kann sein, dass die kommentare teilweise nicht zum code passen da ich immer wieder änderungen vornheme und vergesse dei kommentare anzupassen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 21.02.2005, 12:56    Titel: Antworten mit Zitat

sleep(0) mal in die While endlosschleife packen das sollte dein System etwas entlasten.

Warum haste patricks Methode nicht 1:1 übernommen, so haste nun einige globale variabln mehr.

Deine while Endlosschleife sah recht komplex aus, da könnte man ordentlicher kommentieren.

struct tm *tmnow; <- warum du das hier extra gemacht hast erschliesst sich mir echt nicht

du hättest bei der zeitberechnung noch viele Dinge sehr leichter machen können.

Los patrick zeig mal wie man das macht Wink
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 21.02.2005, 13:09    Titel: Antworten mit Zitat

Zumal der Sinn dieses Programms mir nicht ganz klar ist.
Ich schaue z.B. über den PC Fernsehn oder schieb auch mal ne DVD rein. Dann beweg ich die Maus garantiert mehr als ne Stunde nicht...
Manchmal hab ich auch irgendwas zu berechnen - was Stunden dauert.
Der PC soll ja nicht mitten in der Berechnung runterfahren - nur weil man die Maus nicht bewegt hat.
Wenn du sowas unbedingt machen willst, würde ich das an eine andere Bedingung knüpfen - wie z.B. immer 03:00 Uhr runterfahren, wenn er noch on ist.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum