PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] F1 : start, F2 : end



staebche
03.09.2008, 14:44
Wie kann ich einstellen, dass sich dieser befehl bei drückens der
taste F1(muss nicht unbedingt F1 sein) und bei F2 beendet?


#include <windows.h>
using namespace std;

int main()
{

while(true)
{
POINT pt;
SetCursorPos( pt.x = 0, pt.y = 0 );
Sleep(100);
}

return 0;
}

TiduS
03.09.2008, 16:12
Wie kann ich einstellen, dass sich dieser befehl bei drückens der
taste F1(muss nicht unbedingt F1 sein) und bei F2 beendet?


#include <windows.h>
using namespace std;

int main()
{

while(true)
{
POINT pt;
SetCursorPos( pt.x = 0, pt.y = 0 );
Sleep(100);
}

return 0;
}





#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
char Buchstabe;
cin>>Buchstabe;
switch(Buchstabe)
{
case 'a':
while(true)
{
POINT pt;
SetCursorPos( pt.x = 0, pt.y = 0 );
Sleep(100);
}

case 'b' : break;
}
return 0;
}


die Buchstaben kannste ja beliebig ersetzen;)

mo0wm
03.09.2008, 16:21
Sry aber der Code ergibt garkeinen Sinn^^
Und @staebche:
GetAsyncKeyState
Google ma

TiduS
03.09.2008, 16:25
?
Meiner?
Ich weiß nicht,ob seiner einen Sinn ergibt...meiner sollte lediglich machen,dass etwas passiert,wenn man ne best. taste drückt.

mo0wm
03.09.2008, 17:08
Nee ich bin mir net sicher ob der Syntax überhaupt stimmt.
Außerdem will er doch, dass die Abfrage mitten in der Schleife das geschieht, sodass bei F1 die Schleife abgebrochen wird
So hab ich das jedenfalls verstanden...
Aber staebche hätte die Frage wirklich etwas deutliche formulieren können...

staebche
03.09.2008, 19:50
Aber staebche hätte die Frage wirklich etwas deutliche formulieren können...
Ich möchte entweder das prog schließen, oder
wie gesagt die schleife. weil wenn die mouse
gefreezed ist kann man nicht allzu viel machen^^

mo0wm
03.09.2008, 20:08
Ja wie gesagt GetAsyncKeyState
Ne Schleife kannst du mit "break;" beenden.
Und wo ist jetzt das Problem?^^

staebche
03.09.2008, 20:10
Ja wie gesagt GetAsyncKeyState
Ne Schleife kannst du mit "break;" beenden.
Und wo ist jetzt das Problem?^^
naja ich weiss ja nicht was für ein prob du meinst^^
ich will halt nur das die schleife aufhört wenn man
die taste drückt.

mo0wm
03.09.2008, 20:14
Ja wie gesagt GetAsyncKeyState
Ne Schleife kannst du mit "break;" beenden.
Und wo ist jetzt das Problem?^^
naja ich weiss ja nicht was für ein prob du meinst^^
ich will halt nur das die schleife aufhört wenn man
die taste drückt.
-.-
Hast du nicht letztens gemeint du kannst C++?
Mit GetAsynKeyState kannst du abfragen ob und welche Taste gedrückt wurde!
Und Mit "break;" kannst du eine Schleife beenden!

GetAsynKeyState<-->Break; VERSTEHEN?

staebche
03.09.2008, 20:50
das weiss ich selber, und ja ich kann auch c++ zB ich kenn
die funktion von break.

ich hab nur deine frage nicht interpretieren können, mit
"Wo ist dein Problem?"

&gt;[FaaX]&lt;
03.09.2008, 21:52
Du könntest statt SetCursorPos(); auch BlockInput(); benutzen ...
Das blockiert die Tastatur und Maus !
Aber durch STRG+ALT+ENTF deaktiviert man die BlockInput(); Funktion und man kann das Programm über den Taskmanager schließen.

BlockInput(true); // Tastatur und Maus gesperrt

BlockInput(false); //Tastatur und Maus entsperrt

Ist glaub auch in der windows.h drinn bin mir aber gerade nicht sicher, musst halt nachschauen wenns nicht funktionieren sollte.
Mit der while-Schleife würd mir gerade nur ein, zwei Sachen einfallen und zwar:



int wert = 0;

while(wert < 1000) //nur ein Beispiel wert kann beliebig gesetz werden
{
POINT pt;
SetCursorPos(pt.x = 0, pt.y = 0);
++wert; //wert wir bei jedem Schleifen durchgang um 1 erhöht


ODER:




int s;
int wert;

cout << "Wieviel Sekunden soll die Maus blockiert werden ?" << endl;
cout << "Ihre Eingabe: ";
cin >> s;

s = s * 10;

while(wert < s)
{
POINT pt;
SetCursorPos(pt.x = 0, pt.y = 0);
Sleep(100);
++wert;
}

return 0;
}

Keine Ahnung ob der letzte Code funktioniert ist mir nur so nebenbei eingefallen muesste aber vom Prinzip schon gehen.
Probiers einfach und sag mir dann ob der letzte Code funktioniert hat. =)

EDIT: mo0wm hat schon die Lösung ist mir gar nicht eingefallen xD.

by >[FaaX]< :twisted:

staebche
04.09.2008, 16:29
So ich habs jetzt geschafft. ach und mo0wm ich habs
mit getasynkeystate gemacht und ner while schleife versteht sich.

hier mein code:

#include <windows.h>
#include <iostream>
#include <winuser.h>

using namespace std;

int main()
{
int wert = 90;

while(GetAsyncKeyState(VK_F5)==0)
{
cout << "Wenn du willst das es aufhoert drueck F5" << endl;
POINT pt;
SetCursorPos( pt.x = 0, pt.y = 0 );
Sleep(2000);
++wert;
}

system("Pause");
return EXIT_SUCCESS;
}


für die besonderen mach ich das cout raus =)

blackberry
04.09.2008, 17:59
Ich kann's mir einfach nicht verkneifen ^^
printf von stdio.h (bzw. cstdio für C++) reicht völlig und ohne iostream schrumpft die .EXE von 400 KB auf 16 KB.
printf habe ich außerhalb der Schleife platziert da ein schreiben in stdout Zeitaufwändig ist und es nicht nötig ist.
winuser.h wird bereits von windows.h includiert.
Wozu du "int Wert" brauchst verstehe ich nicht da du außer ihn zu inkrementieren nichts damit anstellst. Variablen in einer Schleife zu vereinbaren habe ich bis jetzt noch nie gesehen aber scheint ja nicht viel zu ändern.
wieso du POINT nimmst ist mir auch unklar, da struct POINT nichts anderes ist als

struct POINT
{
int x;
int y;
};
Also reicht ein einfacher aufruf der Funktion SetCursorPos mit den gewünschten koordinaten völlig aus.



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

int main()
{
printf("Wenn du willst, dass es aufhoert drueck F5\n");
while(GetAsyncKeyState(VK_F5) == 0)
{
SetCursorPos(0, 0);
/* Sleep(2000); */
}
return 0;
}



mfG. BlackBerry

mo0wm
04.09.2008, 18:34
Jo das reicht auch aus, mehr braucht man garnicht^^