Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
homer Jay Mini JLI'ler
Anmeldedatum: 13.01.2005 Beiträge: 12
Medaillen: Keine
|
Verfasst am: 18.02.2005, 07:46 Titel: Mausbewegungen überwachen. Wie? |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 18.02.2005, 10:18 Titel: |
|
|
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 |
|
|
Leviathan Mini JLI'ler
Alter: 49 Anmeldedatum: 12.01.2005 Beiträge: 31 Wohnort: S9 Medaillen: Keine
|
Verfasst am: 18.02.2005, 11:01 Titel: Re: Mausbewegungen überwachen. Wie? |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 18.02.2005, 12:03 Titel: |
|
|
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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 18.02.2005, 13:30 Titel: |
|
|
Ach gottchen, DirectInput für so einen Popelskram, also bitte 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
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 |
|
|
homer Jay Mini JLI'ler
Anmeldedatum: 13.01.2005 Beiträge: 12
Medaillen: Keine
|
Verfasst am: 19.02.2005, 15:16 Titel: |
|
|
@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!!
z.B.system("help");
so erspart man sich die *.bat datei!!!
_________________________________________________
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 ). |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 19.02.2005, 20:22 Titel: |
|
|
homer Jay hat Folgendes geschrieben: | Wie kann ich den Mausmodus Nonexclusiv setzen (kenn mich noch nich so gut aus ). |
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 , 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, 20:26, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 19.02.2005, 20:25 Titel: |
|
|
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 |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 19.02.2005, 20:29 Titel: |
|
|
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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 19.02.2005, 20:47 Titel: |
|
|
Jaaaaaah nimm ihn! NIMM IHN!!! *beschwör* *ggg*
Also für sowas braucht man wirklich kein DirectInput, hat doch keinen Sinn für sowas und nebnebei wenn Du DX benutzt machst Du Dein Programm abhängig von der Version von DirectInput _________________ '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 |
|
|
homer Jay Mini JLI'ler
Anmeldedatum: 13.01.2005 Beiträge: 12
Medaillen: Keine
|
Verfasst am: 21.02.2005, 09:26 Titel: |
|
|
danke für eure zahlreichen antworten!!
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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
homer Jay Mini JLI'ler
Anmeldedatum: 13.01.2005 Beiträge: 12
Medaillen: Keine
|
Verfasst am: 21.02.2005, 11:45 Titel: |
|
|
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!!!
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 21.02.2005, 11:56 Titel: |
|
|
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 _________________ "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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 21.02.2005, 12:09 Titel: |
|
|
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 |
|
|
|