LeOCruX Posted December 25, 2007 Report Posted December 25, 2007 vreau un algroritm pt un screenshot... eu m'am gandit sa iau fiecare pixel ( culoarea ) si sa'l pun pe rand pe un picturebox folosind un timer ( mi se pare ca ar dura cam mult si daca as pune timerul la un interval mai mic de 10 milisec. ar consuma prea mult ) Quote
vladiii Posted December 25, 2007 Report Posted December 25, 2007 Bad idea. Poti "simula" apasarea tastei "PrintScreen", apoi copiezi imaginea din clipboard intr-un PictureBox. Daca vrei in VB, iti pot face maine (sau ma rog, azi), un mic cod. Quote
tw8 Posted December 25, 2007 Report Posted December 25, 2007 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 . Daca vrei , iti fac si eu unul in AutoIt . Quote
LeOCruX Posted December 26, 2007 Author Report Posted December 26, 2007 duamnii cat de neatent pot sa fiu .. cum de am uitat pe prinscreen ( butonu ). Cine stie ce cod ascii are ? EDIT : am cautat pe google si am gasit ( 0x00400100UL - hexa ) nu stiu daca e bun de aia astept raspunsul vostru Quote
vladiii Posted December 26, 2007 Report Posted December 26, 2007 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 ! Quote
ÐÒ& Posted December 26, 2007 Report Posted December 26, 2007 idea ta oricum era un nonsens..de unde luai pixelii? Quote
LeOCruX Posted December 26, 2007 Author Report Posted December 26, 2007 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 ExplicitDeclare 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 = FalseDoEventsClipboard.Clearkeybd_event vbKeySnapshot, 0, 0, 0DoEventsprintscreen.Picture = Clipboard.GetData(vbCFBitmap)DoEventsMe.Visible = TrueMe.Refreshend subcare mi'l incearca? eu nu's acasa si nu am stiku' cu minevlad cati ani ai ? din curiozitate chiar ai 13 ani ? ( esti cu 1 am mai mare ca mn ) Quote
ÐÒ& Posted December 26, 2007 Report Posted December 26, 2007 ete cum am abordat eu problema in vb.net Imports System.Threading.threadModule 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 FunctionEnd Moduleacum asta e in vb.net .... cred ca merge doar sendkeys "aaaaaaawaaa" in VB6 si clipboard.getdata() Quote
xyz Posted January 5, 2008 Report Posted January 5, 2008 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. Quote
ÐÒ& Posted January 5, 2008 Report Posted January 5, 2008 stiam chestiile astia cu GDI,DC ca sunt atributele unui elem grafic,un fel de handle care este creat dupa ce a fost afisata imaginea pe ecran.oricum complicat dar interesant. Quote