Hier biete ich ein TuT an , wie man ein Screen Programm schreibt. bitte Codes genau durchlesen , zum lernen , nich C&P...
Fangen wir an , als erstes brauchen wir ein Module , das die ganzen Funktionen deklariert. Modul einfügen mit folgendem Code:
Code:
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long<br />Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)<br />Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _<br /> (LpVersionInformation As OSVERSIONINFO) As Long<br /> Public Const VK_MENU = &H12<br /> Public Const KEYEVENTF_KEYUP = &H2<br /><br /><br />Type OSVERSIONINFO<br /> dwOSVersionInfoSize As Long<br /> dwMajorVersion As Long<br /> dwMinorVersion As Long<br /> dwBuildNumber As Long<br /> dwPlatformId As Long<br /> szCSDVersion As String * 128<br />End Type<br /> <br /> <br /><br />Public Sub GetWindowSnapShot(Mode As Long, Img As Object)<br /> Dim altscan%, NT As Boolean<br /> NT = IsNT<br /> If Not NT Then<br /> If Mode = 0& Then Mode = 1& Else Mode = 0&<br /> End If<br /> If NT And Mode = 0 Then<br /> keybd_event vbKeySnapshot, 0&, 0&, 0&<br /> Else<br /> altscan = MapVirtualKey(VK_MENU, 0)<br /> keybd_event VK_MENU, altscan, 0, 0<br /><br /><br /> DoEvents<br /> keybd_event vbKeySnapshot, Mode, 0&, 0&<br /> End If<br /> DoEvents<br /> Img.Picture = Clipboard.GetData(vbCFBitmap)<br /> keybd_event VK_MENU, altscan, KEYEVENTF_KEYUP, 0<br />End Sub<br /><br /><br /><br />Public Function IsNT() As Boolean<br /> Dim verinfo As OSVERSIONINFO<br /> verinfo.dwOSVersionInfoSize = Len(verinfo)<br /> If (GetVersionEx(verinfo)) = 0 Then Exit Function<br /> If verinfo.dwPlatformId = 2 Then IsNT = True<br />End Function
So, ab zur Form . Wir werden 2 Funktionen einbauen, Den ganzen Bildschirm Screenen, oder jeweils nur das Fenster, in dem man gerade ist (z.b. Firefox ) Fangen wir an. Wir fügen einen Button ein , und ein , und eine Picturebox. Button:Command1 Picturebox:Image1
Nun kommen wir zum Code, wir werden als erstes den kompletten Bildschirmscreenen , also folgenden Code einfügen:
Code:
GetWindowSnapShot 0, Image1
Ich denke, das dürfte Klar sein , 0=ganzer Bildschirm , und der Screen kommt auf Image1.
So , nun machen wir noch einen 2. Button,einen Timer und in Allgemein (ganz oben) folgender Code:
Code:
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Integer) As Integer<br /> Private Const KeyPressed As Integer = -32767
dies dient als Deklaration , damit man mit einer Taste Screenen kann (Keyressed ist -32767 , das bedeutet wenn eine Taste gedrückt ist)
2. Button:Command2 Timer:Timer1
Wir fügen folgenden code in die form ein:
Code:
Private sub Form_load()<br />Timer1.enabled=true<br />timer1.interval=1<br />end sub
das bedeutet , der timer ist an , und auf interval 1 gestellt (er erkennt (fast) jeden knopfdruck )
In den Button brauchen wir kein code, da wir ja mit einer taste das Aktive Fenster Screenen wollen , wir verwenden die Taste S. Also in den Timer folgenden Code:
Code:
If GetAsyncKeyState(vbKeyS) = KeyPressed Then<br /> GetWindowSnapShot 1, Image1<br />End If
Wenn vbkeys (=s) gedrückt ist, Screenshot in Image1 einfügen . GetWindowSnapShot 1, Image1 :
Diesmal 1,Image1 , nicht 0,image1
0=ganzer bildschirm 1=aktives fenster
nun , wenn man zuerst den ganzen bildschirm , und dan das aktive fenster screent, erscheint ein Bug, das werdet ihr sehr schnell merken (die bilderüberschrieben sich , als würde ein Programm hängen)
Das fixxen wir so , indem wir ein 2. Picture box einfügen , diese Image2 nennen, und ein 3. Button , Command 3 und fogenden code in die form einfügen:
Code:
Private Sub Command3_Click()<br />Set Image1.Picture = Image2.Picture<br />End Sub
Erklärung:
Bild von Image1 auf Bild von Image2 setzen (Image2=leer )
Dieser Button dient also zum Bug fixxen , jetzt fehlt nurnoch die Funktion , das bild zu speichern. Das darf natürlich nicht fehlen.
wir fügen ein:
1ne Textbox:text1 1 Common Dialog:cdlg 1 Button:Command4
Nun fügen wir in den sub Form_load noch folgendes ein: