• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Mouse-ul si cum sa iti revendici locul in fata propriului calculator

19
  • Publicat de Milorad
  • în C/C++
  • — 21 iun., 2010 at 11:45 am

In ziua de azi calculatorul este un element cu care aproape ca traim in simbioza. Cui ii trebuie America (tara tuturor posibilitatilor), cand exista calculatorul (intruchiparea tuturor posibilitatilor)? Fiecare dintre noi avem pe birourile noastre cate o “poarta” catre toate posibilitatile. Toate bune si frumoase cat timp poarta isi asculta stapanul suprem, dar cerul parca se innegreste cand apare sora/fratele mai mica/mai mic sau parintele si spune: “LASA-MA SA VAD CUM E VREMEA MAINE” sau “E RANDUL MEU SA MA JOC!” sau “TREBUIE SA VORBESC CU GETA PE MESS ACUM!” si multe alte situatii. Dandu-te la o parte de la calculator in tine striga ceva: “dar mai vreau sa joc putin GTA!”, “dar nu mi-am terminat de codat programul!”, “dar ma uitam la un clip genial!” si raspunsul binenteles “NU MA INTERESEAZA!”. Cata cruzime! Nu-i asa?
Dar cand e vorba de intruchiparea tuturor posibilitatilor, exista totdeauna o solutie pentru orice problema. Asa ca as vrea sa va prezint in acest articol 2 “vraji” (functii de sistem [c++]) care aplicate in diverse moduri vor speria orice parinte/sora/frate (utilizator obisnuit) si il/o vor face sa fuga repede la televizor inspaimantat(a).
Este vorba de : GetCursorPos() si SetCursorPos(), inocente la prima vedere. Binenteles ca sunt inocente la prima vedere dar ele ofera multe posibilitati! In acest articol va voi arata cum se poate “convinge mouseul” sa faca “nebunii” pe ecran.

Videoclip – Cum potri controla mouse-ul?

Explicatii – Cum poti controla mouse-ul?

In primul rand ecranul este reprezentat sub forma unui sistem cartezian cu originea in coltul stanga sus al ecranului. Coordonata x reprezinta coloanele si coordonata y reprezinta liniile.

• GetCursorPos are ca parametru o variabila de tip POINT. POINT este o structura de date formata din 2 numere intregi: x si y. Rolul acestei functii este sa gaseasca coordonatele pozitiei mouseului pe ecran si sa le stocheze in variabila de tip POINT.

• SetCursorPos are ca parametru 2 variabile de tip intreg. Rolul functiei este de a muta mouseul la pozitia specificata de parametrii x si y.

Un alt aspect important este faptul ca o limita pana la care pot creste x si y este chiar rezolutia ecranului. O data cu marirea rezolutiei se mareste si plaja de valori pe care o poat lua x si y.

Sa incepem printr-un program foarte simplu:
Programul de mai jos gaseste pozitia mouseului si apoi muta cursorul cu 10 pixeli mai jos.

#include<windows.h>
#include<winuser.h>
int main()
{
POINT pos;
GetCursorPos(pos) 
SetCursorPos(pos.x,pos.y+10) ;
return 0;
}
 

Ok inofensiv programul pana acum, dar hai sa il facem sa mute cu 10 pixeli mai jos imediat ce simte miscare si sa se inchida in momentul apasarii oricarei taste.

#include<windows.h>
#include<winuser.h>
int main()
{
POINT pos,last;
while(1)
{
	if(kbhit())
		return 0;
	GetCursorPos(&pos); 
	if( pos.x!=last.x && pos.y!=last.y)
	{
		pos.y+=5;
		SetCursorPos(pos.x,pos.y);
		last=pos;	
	}
}

return 0;
}
 

Ok, eu zic ca nu e destul sa avem un program care sta si se uita la utilizator si asteapta sa se apeste pe taste. Hai sa il facem sa ruleze in background.
Dar atentie o data cu rularea in background trebuie sa se schimbe si modul de obtinere a tastelor apasate. Vom folosi o alta functie de sistem GetAsyncKeyState(int cod) care prinde tastele chiar si daca se muta focusul de pe programul nostru pe alt program.

Functia GetAsyncKeyState() primeste ca parametru codul unei taste virtuale si verifica daca aceasta este apasata sau nu returnand 0 in cazul in care nu este apasata. O tasta virtuala este un cod specific fiecarei taste, aceste coduri difera fata de cele ASCII cu exceptia numerelor (0-9) aflate deasupra tastelor. Numerele din numpad au alte coduri decat cele ascii.

#include<windows.h>
#include<winuser.h>
int main()
{
	HWND stealth;// camuflam programul
	stealth=FindWindowA("ConsoleWindowClass",NULL);
	ShowWindow(stealth,0);
	
	POINT pos,last;

	while(1)
	{
		last=pos;
		GetCursorPos(&pos);
	
		if(GetAsyncKeyState('1'))//daca s-a apasat tasta b
			while(1)
				{
					SetCursorPos(last.x,last.y);
					if(GetAsyncKeyState('2'))//daca s-a apasat tasta 2 deblocam mouseul
						break;
				}
	
		if(GetAsyncKeyState('3'))//daca s-a apasat tasta 3 iesim din program
			return 0;
	}
}
 

Ok acestea fiind zise, de aici incolo se poate face orice cu mouseul. Il putem face sa se plimba de nebun pe ecran, il putem face sa reactioneze la miscarile facute de utilizator, il putem face sa se comporte oricum.
Acum fiecare dintre voi cu ajutorul unui compilator de C++ si putina imaginatie puteti sa cereti mouseului sa “faca pe nebunul”!
Spor la treaba, astept sa imi spuneti ce idei de “concediu” aveti pentru mouseurile voastre, ce reactii au tintele programelelor voastre si sunt aici sa va raspund la intrebari legate de implementare si sa va dau idei de manipulare a mouseului.

Have fun 😉

Daca acest articol va avea success, voi publica o parte a 2 a a acestui articol in care va voi arata cum sa faceti un program care face mouseul sa se miste pe ecran dupa cum ii este dictat de o imagine de tipul BMP si voi coda cele mai interesante dintre propunerile voastre.

Etichete: C++controleaza mouse in c++cum poti controla mouse-ul?despre mousemouseTehnic

— Milorad Liviu Felix a scris 2 articole

Nu există o descriere a autorului.

  • Articolul anterior Conexiunile World Cup 2010 in motoarele de cautare
  • Articolul următor Mozilla Firefox DOS

19 Comentarii

  1. Ionut spune:
    iunie 21, 2010 la 12:03 pm

    Eu zic ca acest mic program pe care l-ai facut tu ar fi extraordinar pentru protectia calculatoarelor.
    Sa zicem de exemplu ca ai calculatorul intr-o camera de camin, nu vrei sa fie accesat de parintii, fratii, sau chiar remote.
    Pur si simplu il pui la startup si daca bagi parola xx.. sa inchida programul, altfel mouse-ul sa faca cu totul si cu totul altceva decat ar fi fost normal sa faca.

    aaa ce zici crezi ca ar fi o idee buna sa te apuci de un program de genul asta?

    Daca as fi eu programator l-ai face eu 😀

    Salut si mult succes in continuare.

  2. de ce? spune:
    iunie 21, 2010 la 2:20 pm

    e succes articolul, dar fa-l pentru toata lumea (utilizatori mai putini pasionati de programare si mai degraba pasionati de distractie): pune si o sursa la donwload

  3. Lucian aka Lucifer spune:
    iunie 21, 2010 la 2:33 pm

    curiozitatea m-a impins sa incerc..si… foarte tare.. :)) dar nu ma surprinde programul in sine atat cat ma surprinde ideea.. geniala! :)) multa bafta in continuare…

  4. Andrei Avadanei spune:
    iunie 21, 2010 la 2:42 pm

    @de ce? In general nu prezentam mini-aplicatiile astea in format executabil pentru ca ar putea aparea cei care ne suspecteaza ca infectam fisierele cu cine stie ce minunatii. Spre exemplu, multe solutii de securitate e posibil sa faca urat la codul de mai sus pentru ca foloseste niste Windows API-uri ce sunt tratate in general ca fiind suspecte. 😀

  5. de ce? spune:
    iunie 21, 2010 la 2:48 pm

    hehe, asta suna a scuza. ok, eu v-am dat o sugestie.

    • Andrei Avadanei spune:
      iunie 21, 2010 la 3:02 pm

      Poate fi interpretata si in acest mod. Oricum sugestia e luata in calcul. 🙂

  6. andrei spune:
    iunie 21, 2010 la 3:08 pm

    Subscriu la ce a spus @de ce. Sunteti sadici daca ma puneti sa caut cartea de C++

  7. AlexComan spune:
    iunie 21, 2010 la 4:30 pm

    Foarte draguta ideea, oricum poti fi in multe moduri sadic.
    Exemple:
    Iei soarecul cu tine.
    Sau ca sa rasplatesti persoana care te-a fugarit de la pc poti sa inversezi toate comenzile :))

    Sau cumperi o pisica „sa se ocupe” de soarec, dar sa o tii departe de Andrew :-„

  8. Milorad spune:
    iunie 21, 2010 la 5:21 pm

    Nu e nevoie de cartea de C++. Codul e scris integral, nu ii lipseste nimic, tot ce e necesar pentru crearea aplicatiei este un compilator de C++. 😀

  9. Condurache Bogdan spune:
    iunie 21, 2010 la 5:30 pm

    Nu pot sa zic decat un lucru:
    Genial 🙂

  10. Milorad spune:
    iunie 21, 2010 la 7:13 pm

    Vad ca v-a placut articolul destul de mult. Hai sa va da o idee despre partea a 2 a.
    Voi arata cum se poate face un program care se plimba pe ecran dupa cum ii dicteaza o poza facuta de oricine in paint. Apoi voi arata cum se poate utiliza o parola pentru introducerea comenzilor.(ca sa nu se prinda surioara obsedata de messenger care sunt tastele care blocheaza si deblocheaza 😀 )
    Si in plus va voi arata cum se simuleaza click dreapta si stanga cu mouseul. Si multe alte mostre de functii care sa il trimita pe soarec direct pe pista de curse. 😉

  11. Ilea Cristian spune:
    iunie 21, 2010 la 7:32 pm

    Nu stiu unde au disparut restul comentarilor.
    Ai cateva greseli de scris, printre care cea mai ciudata : „Asa ca as vrea sa va prezint in acest 2 “vraji” ”
    Anyway, am observat ca nimeni nu a testat codul. In fiecare bucata de cod ai „windowsSPATIU.h” si „winuserSPATIU.h”. Iar winuser.h nu stiu de ce il folosesti pentru ca am observat ca functioneaza si fara. In prima bucata de cod la linia 6 ar trebui GetCursorPos(&pos) (lipsea operatorul care ne returneaza adresa) si ar mai trebui ” ; ” dupa acel apel de functie.
    In a doua bucata de cod folosesti functia kbhit. Visual C++ -ul meu nu o recunoaste. Din cate am observat, nu se afla in standard. ( http://www.cprogramming.com/fod/kbhit.html )
    In ultima bucata de cod este o problema pentru ca variabila de tip POINT pos, nu este initializata.
    Ar trebui facut prima data un apel GetCursorPos(&pos); iar abia apoi last=pos; .

    Cand renovezi blogul :D?

  12. de ce? spune:
    iunie 21, 2010 la 8:09 pm

    wtf? de ce dispar constant comentariile de pe blogul asta? deja parca imi pare rau ca am pierdut timp lasand cateva cuvinte sc rise

  13. Milorad spune:
    iunie 21, 2010 la 11:01 pm

    Imi cer scuze pentru greselile facute. Eram foarte nehotarat in legatura cu modul de exprimare si tot stergeam bucati in articol. E primul meu articol.
    Codul a fost testat pe Dec C++ si MinGW studio (fara spatiul ala din headere 😀 alta greseala care mi s-a strecurat printre degete). Nu stiu daca a aparut de curand un o forma noua, astea 2 compilere sunt in acord cu standardele putin mai vechi. De exemplu o functie care apartine familiei borland este clrscr() si nu e standard (nu functioneaza in mingw).

    O sa repar greselile cat de curand!

  14. Andrei Avadanei spune:
    iunie 21, 2010 la 11:45 pm

    Salutare din nou. Se pare ca exista o mica problema privind comentariile pe blog. Cateva au disparut de ochiul publicului desi in baza de date le am.

    @de ce? Comentariile nu ti-au disparut, voi reface imediat. 🙂
    @Cristian Curand, mai exact pe 29. 🙂

    LE : Am descoperit problema. O rezolvam in cateva secunde. 🙂

  15. Eric spune:
    iunie 21, 2010 la 11:47 pm

    Haha, nice tool, insa nu mai locuiesc cu parintii de multa vreme sa testez totul.
    Thanks !

  16. BoGy spune:
    iunie 24, 2010 la 9:35 pm

    Salutare.

    Am testat programele. Merg de minune, dar am o intrebare : Cum pot face ca mouse-ul sa aiba un delay, adica sa apuci sa vezi cu ochiul liber miscarea. De exemplu sa mearga in patrat, sau triunghi, daca-i dai coordonatele.

    Numai bine.

  17. Milorad spune:
    iunie 25, 2010 la 12:28 am

    Salutari.

    Ca sa faci mouseul sa se miste la o viteza rezonabila poti folosi functia de sistem
    Sleep(int valoare);

    De exemplu faci un ciclu in care dintr-un vector iti iei coordonatele mouseului, la fiecare rulare a ciclului se apelezi functia sleep (vezi tu ce valoare pui acolo ca sa faci mouseul sa se miste dupa cum vrei, eu recomand valori intre 1 si 10).

    uite un exemplu:

    int i,x[100], y[100];
    i=0;//sa zicem ca ai 100 de valori in vectorii aceia
    while(i<100)
    {
    SetCursorPos(x[i],y[i]);
    Sleep(1);
    ++i;
    }

    Poti chiar si sa nu folosesti Sleep. Vei vedea ca merge destul de repede, depinde de procesor si de os. Daca nu folosesti Sleep si tot vrei sa mearga mouseul mai repede poti sa cresti i ul cu 2 cu 3 sau cu valor mai mari.

    Mult succes. Si stay tune ca vine partea a doua din articol cu chestii si mai interesante.

  18. tns301 spune:
    iulie 14, 2010 la 6:08 pm

    Salut.
    Nu stiu daca se poate face asa ceva nu stiu deloc C++.Ar fi interesant daca ai face un program pt. tastatura cand scrii sa nu apara litera respectiva cand apesi litera a la tastatura sa scrie b.Ar fi foarte tare.


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    [wp_rss_retriever url="https://rohacked.bit-sentinel.com/feed/" excerpt="none" items="5" read_more="false" new_window="true" thumbnail="false" cache="0"] RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • ianuarie 2023
    L Ma Mi J V S D
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Tehnic
  • C/C++
  • Mouse-ul si cum sa iti revendici locul in fata propriului calculator
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons