Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Schowek & Grafika & Print Screen
Fiarel
Szczecin



Typ: neutral
Postów: 57
Zarejestrowany: Dec 2002
Schowek & Grafika & Print Screen

Witam ponownie po małej przerwie. Mam mały problemik. Chce napisac programik który działając w tle co jakiś czas bedzie robił zrzut ekranu. Analizując to ustaliłem że trzeba było by.

1) Zrobić prnscn do schowka
2) Z schowka wkleić do PictureBox'a
3) Zapisać plik

Problem pojawił się z punktem pierwszym. Najprostszym rozwiązaniem wydało mi się użycie polecenia sendkeys.


Dim Komenda As String

Komenda = "%{PRTSC}"
SendKeys Komenda, True


Jednak po jej wykonaniu w showku pojawiają się dane które za Chiny nie przypominają grafiki. Nie wspominając o jakimkolwiek dalszym jej edytowaniu. Moze ktoś zna przyczyne tego problemu, ewentualnie jakieś inne rozwiazanie.

Thx


_____________________________________________
www.skype.com RULES !!!

28-07-2004 08:57
Pokaż profil Fiarel  Wyślij email do Fiarel        4354308
hicks
raptor user



Typ: moderator
Postów: 279
Zarejestrowany: Apr 2003

try this:
' Daj to w moduł
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Public Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public Function ScreenshotToPicture(picDest As PictureBox, rRect As RECT)
    On Error GoTo Err_Handle
    Dim lngDesktop As Long
    Dim lngWidth As Long
    Dim lngHeight As Long
   
    lngDesktop = GetDC(GetDesktopWindow)
   
    lngWidth = Screen.Width / Screen.TwipsPerPixelX
    lngHeight = Screen.Height / Screen.TwipsPerPixelY

    picDest.Width = (lngWidth - rRect.Left - rRect.Right) * Screen.TwipsPerPixelX
    picDest.Height = (lngHeight - rRect.Bottom - rRect.Top) * Screen.TwipsPerPixelY
    picDest.AutoRedraw = True
   
    BitBlt picDest.hDC, 0, 0, lngWidth - rRect.Left - rRect.Right, lngHeight - rRect.Bottom - rRect.Top, lngDesktop, rRect.Left, rRect.Top, vbSrcCopy
    Exit Function
Err_Handle:
    Err_Handler
End Function

Public Sub Err_Handler()
    Debug.Print
    Debug.Print "ERR_" & Err.Number & " - " & Err.Description
End Sub

Sposób wywołania:
    Dim x As RECT
    x.Bottom = 0
    x.Left = 0
    x.Right = 0
    x.Top = 0
    ScreenshotToPicture Picture1, x

A potem zapisujesz...


_____________________________________________
TLHW Clan member

28-07-2004 11:00
Pokaż profil hicks  Wyślij email do hicks   Odwiedź stronę hicks       2511367
Fiarel
Szczecin



Typ: neutral
Postów: 57
Zarejestrowany: Dec 2002

Dzięki sampelek działa. jednak nie do końca tak jakbym chciał. Chodzi mi aby tobił screena tylko oaktywnego okna. Jak wciśniesz PrtScr z Altem to wtedy robi tylko screena z aktywnego okna. Wiesz o co mi chodzi ??? W każdym razie thx za pomoc


_____________________________________________
www.skype.com RULES !!!

28-07-2004 11:17
Pokaż profil Fiarel  Wyślij email do Fiarel        4354308
hicks
raptor user



Typ: moderator
Postów: 279
Zarejestrowany: Apr 2003

Chyba rozumiem...

Trzeba wyciągnąć skąś (API ) uchwyt "aktywnego okna" i podmienić w linijce:
lngDesktop = GetDC(GetDesktopWindow)
GetDesktopWindow na ten uchwyt...

[Post edytowany dnia 28-07-2004 12:33 przez hicks]


_____________________________________________
TLHW Clan member

28-07-2004 12:33
Pokaż profil hicks  Wyślij email do hicks   Odwiedź stronę hicks       2511367
Fiarel
Szczecin



Typ: neutral
Postów: 57
Zarejestrowany: Dec 2002

Pomysł jest świetny dzieki Hicks za pomoc
Aby zamknąć temat do końca podaję funkcję do wycięgnięcia uchwytu aktywnego okna


Private Declare Function GetActiveWindow Lib "user32" () As Long

Jeszcze raz dzięki za pomoc


_____________________________________________
www.skype.com RULES !!!

03-08-2004 18:05
Pokaż profil Fiarel  Wyślij email do Fiarel        4354308
Wszystkich odpowiedzi: 4 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1