Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: printscreen2 Добавлено: 18.02.08 15:55  

Автор вопроса:  Sef
Спасибо оба способа работают.Моя прога через timer постоянно делает скриншот раб.стола и сохраняет в файл. Если использовать программное нажатие клавиши printscreen, то это сильно грузит процессор.Вторым способом, с помощью bitblt, вставляю скриншот в picturebox, скриншот появляется на Picturebox, но сохранить с него не могу!SavePicture не помогает!Кто знает как сохранить?

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #1
Добавлено: 18.02.08 16:38
SavePicture не помогает!Кто знает как сохранить?

надеюсь у тебя код такой?
SavePicture Picture1.Image, путь

где путь например = C:\1.bmp

Ответить

Номер ответа: 2
Автор ответа:
 Sef



Вопросов: 4
Ответов: 6
 Профиль | | #2 Добавлено: 18.02.08 16:49
Конечно! Если вставить в Picturebox, существующий рисунок, то все отлично сохраняется!

Ответить

Номер ответа: 3
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #3
Добавлено: 18.02.08 17:18
Вот попробуй это кинь на форму Picture1, и тимер. Вставь следущий код длжено работать.
Option Explicit
Private Declare Function StretchBlt Lib "gdi32" _
           ;(ByVal hdc 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 hSrcWidth As Long, ByVal nSrcHeight As Long, _
           ByVal dwRop As Long) As Long
'           **************************
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Type POINTAPI
    X As Long
    Y As Long
End Type
Const SRCCOPY = &HCC0020
Dim Papi As POINTAPI
Private Sub Form_Load()
Picture1.AutoRedraw = True
Picture1.ScaleMode = 3
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
GetCursorPos Papi
StretchBlt Picture1.hdc, 0, 0, Picture1.Width * 2, Picture1.Height * 2, GetDC(GetDesktopWindow), Papi.X - (Picture1.Width / 4) / 15, Papi.Y - (Picture1.Height / 4) / 15, Picture1.Width, Picture1.Height, SRCCOPY
Picture1.Refresh
SavePicture Picture1.Image, "C:\" & Timer & ".bmp"
End Sub

Может у тебя Picture1.AutoRedraw = True не прописано?

Ответить

Номер ответа: 4
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #4
Добавлено: 18.02.08 17:54
Я почти уверен, что AutoRedraw стоит в False =)

Ответить

Номер ответа: 5
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #5
Добавлено: 25.02.08 19:01
Попробуй это:

Sub ChacheActiveWindow()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@allapi.net
    Dim hBrush As Long, tBr As tBITMAP, cnt As Long, hOld As Long
Dim mesto As RECT
Dim l As Long
Dim wid As Long
Dim hid As Long
Dim s As String
Dim hddc As Long
l = GetForegroundWindow
s = "АКНО!!!"
hddc = GetWindowDC(l)
Call GetWindowRect(l, mesto)
 With mesto
wid = .Right - .Left
hid = .Bottom - .Top
End With
Picture1.Width = wid * Screen.TwipsPerPixelX
Picture1.Height = hid * Screen.TwipsPerPixelY
Dim Pt(0 To 2) As POINTAPI
  'set the coördinates of the parallelogram
    Pt(0).X = 0
    Pt(0).Y = 0
    Pt(1).X = wid
    Pt(1).Y = 0
    Pt(2).X = 0
    Pt(2).Y = hid
    'resize and modify a screenshot
    Picture1.Cls
    PlgBlt Picture1.hdc, Pt(0), hddc, 0, 0, wid, hid, ByVal 0&, ByVal 0&, ByVal 0&
    'initialize the tBITMAP-structure
    With tBr.Header.bmiHeader
        .biSize = Len(tBr.Header.bmiHeader)
        .biCompression = BI_RGB
        .biHeight = 8
        .biPlanes = 1
        .biWidth = 8
        .biBitCount = 1
    End With
    For cnt = 0 To 7
        tBr.Bytes(cnt) = 128
    Next cnt
    'create a pattern brush
    hBrush = CreateDIBPatternBrushPt(tBr, DIB_RGB_COLORS)
    'select the brush into the form's DC
    hOld = SelectObject(Picture1.hdc, hBrush)
    'Perform the Pattern Block Transfer
    PatBlt Picture1.hdc, 0, 0, 1, 1, PATCOPY
    'restore the old brush and delete our pattern brush
    ;DeleteObject SelectObject(Me.hdc, hOld)
Call DeleteDC(hddc)
Call SavePicture(Picture1.Image, App.Path & "\" & s & ".bmp";)
End Sub


Несколькоизвращенный метод скришотит активное окно и сохраняет в файл. Причем можно его при желании исказить.

P.S. Думаю, API не сложно подобрать, какие здесь используются :))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам