Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials
Autor
Nachricht
BlAcKfINAl.aT
Poster
Poster

Anmeldedatum: 26.07.2008
Beiträge: 162

Screenprogramm schreiben - TuT
Verfasst am: 01.09.2008, 16:15

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 Wink )
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 Wink )

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 Wink 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 Wink )

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:
Code:
text1.visible=false


Los gehts , in die form einfügen:

Code:
With cdlg<br />.CancelError = False<br />.FileName = "Screen"<br />.ShowSave<br />Text1.Text = .FileName<br />End With<br /><br />SavePicture Image1.Picture, Text1.Text & Namedata & ".jpg"


und in den Form_Load sub noch folgendes:

Code:
Namedata = "Screen1"


so , Ich denke so dürfte alles stimmen.
Falls nicht bitte verbessern Wink

Ich verabschiede mich hier und hoffe ich konnte EUCH ausnahmsweise mal was lernen , da ihr ja immer mir helft^^
_________________
 
igoe
Gast





Verfasst am: 11.09.2008, 09:35

es ist nichts besonderes, aber für die Anfänger ganz ok.

Mfg igoe
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials

Tags: function getasynckeystate, screenshot, bildschirm, schreiben, aktives

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 796 20.05.2002, 00:28
Keine neuen Beiträge Eine kleine Frage an euch.. 906 30.09.2007, 08:57
Keine neuen Beiträge TopMost Funktion unter DirectX 921 27.07.2007, 10:48
Keine neuen Beiträge Wie Funktion nutzen ? 1100 29.06.2007, 20:59
Keine neuen Beiträge update funktion einbauen 1341 28.01.2007, 23:11
 



[ Time: 0.1655s ][ Queries: 85 (0.0224s) ][ GZIP on - Debug on ]