Jump to content
LeOCruX

screenshot algrorithm

Recommended Posts

Idem vladii. Poti face asta prin simpla simulare a apasarii tastei PrintScreen.

Desigur, pentru ca in imagine sa nu apara si fereastra programului, ar trebui ca acesta sa aiba si ascundere in tray (daca nu, il ascunzi pur si simplu in taskbar) si sa faca printscreen la apasarea unei taste.

Nu e cine stie ce :P. Daca vrei , iti fac si eu unul in AutoIt :)).

Link to comment
Share on other sites

Use vbKeySnapshot (in VB) ! Bineinteles, asta ar fi primul parametru al functiei keybd_event din user32.dll. Nu uita sa nu lasi tasta apasata (pt. asta folosesti inca o data keybd_event, dar se modifica un parametru).

Bafta !


Option Explicit

Declare Sub keybd_event Lib "user32" _
(ByVal Vk As Byte, ByVal Scan As Byte, _
ByVal Flags As Long, ByVal ExtraInfo As Long)

Private Sub cmdCapture_Click()

Me.Visible = False
DoEvents

Clipboard.Clear
keybd_event vbKeySnapshot, 0, 0, 0
DoEvents

printscreen.Picture = Clipboard.GetData(vbCFBitmap)
DoEvents

Me.Visible = True
Me.Refresh

end sub

care mi'l incearca? eu nu's acasa si nu am stiku' cu mine

vlad cati ani ai ? din curiozitate :D chiar ai 13 ani ? ( esti cu 1 am mai mare ca mn )

Link to comment
Share on other sites

ete cum am abordat eu problema in vb.net :|


Imports System.Threading.thread
Module Module1
Public Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Public Function SalveazaPoza(ByVal fereastraactiva As String, ByVal drumsalvare As String)
Clipboard.Clear()
Form1.Visible = False
Sleep(100)
Select Case fereastraactiva
Case "Activa"
SendKeys.Send("{PRTSC}")
Case Else
SendKeys.Send("^ {PRTSC}")
End Select
Form1.Visible = True
Form1.PictureBox1.Image = Clipboard.GetImage()
End Function
Public Function scriere(ByVal drum As String)
Form1.PictureBox1.Image.Save(drum)
MsgBox("Poza a fost salvata la calea data")
End Function
End Module

acum asta e in vb.net .... cred ca merge doar sendkeys "aaaaaaawaaa" in VB6 si clipboard.getdata()

Link to comment
Share on other sites

Chestia cu butonul printscreen e complicatie. Totul e foarte simplu, se poate face cu API-ul BitBlt() care face un transfer de blocuri de biti de la un device context la altul.

Asta inseamna ca avem nevoie de device context-ul 'ecranului' / a ce se vede pe ecran. Asta e desktop window-ul, folosim API-ul GetDesktopWindow() ca sa obtinem handle-ul ferestrei desktop-ului (nu Desktop-ul ala pe care ai wallpaper).

Insa noi avem nevoie de device context-ul ferestrei respective, il aflam pasand handle-ul ferestrei API-ului GetWindowDC() si am obtinut device context-ul desktop-ului.

Cream un bitmap, prin orice metoda, depinde de limbajul de programare asta, si facem rost de device context-ul bitmap-ului respectiv (daca ai vreo componenta de genul TBitmap poti accesa proprietatile Canvas apoi Handle ca sa obtii device context-ul care te intereseaza).

Dupa ce ai cele 2 device context-uri (al desktop-ului si al bitmapului in care vrei sa stochezi screenshot-ul), folosesti API-ul BitBlt(), la parametrii la destination device context pui device context-ul bitmapului, la source device context pui device context-ul desktopului, la raster operation code pui SRCCOPY ( $20 ) ca sa copie pur si simplu continutul fara sa efectueze alta operatie asupra bitilor, iar la ceilalti parametrii e simplu.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...