powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / PrintScreen
25 сообщений из 25, страница 1 из 1
PrintScreen
    #32396252
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Помогите кто может таким примером:
Программно снять PrintScreen и поместить его в таблицу Access.

Хоть намекните где искать...
...
Рейтинг: 0 / 0
PrintScreen
    #32396276
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_MENU = &H12
Private Const VK_SNAPSHOT = &H2C
Private Const KEYEVENTF_KEYUP = &H2

Private Sub Command1_Click()
' Press Alt.
'keybd_event VK_MENU, 0, 0, 0
'DoEvents

' Press Print Scrn.
keybd_event VK_SNAPSHOT, 1, 0, 0
DoEvents

' Release Alt.
'keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
'DoEvents
End Sub
а дальше-то как в таблицу вставить?
...
Рейтинг: 0 / 0
PrintScreen
    #32396289
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот и сам себе помог.
В таблицу можешь только поместить графический файл в поле типа OLE.
Если будешь много таких файлов пихать , твою базу "разнесет" до непристойных размеров (оно тебе надо?) Можно правда хранить файлы на винте, а в таблице хранить путь к ним.
Вот у меня вопрос возник, а для чего это тебе надо то? За юзерами во время работы следтть что ли?
...
Рейтинг: 0 / 0
PrintScreen
    #32396315
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
У меня база в сети, дык вот, чтоб не бегать к ним(в другой корпус) я реализую такую схему:

при возникновении ошибок обработчик записывает все данные об ошибке в таблицу и туда же помещает снимок с экрана, а я периодически проматриваю возникшие ошибки для их исправления.

такие дела...
...
Рейтинг: 0 / 0
PrintScreen
    #32396322
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели так "круто" база написана , что ты ошибки протоколируешь?
Поставь RAdmin и смотри на экран юзера от себя!
...
Рейтинг: 0 / 0
PrintScreen
    #32396327
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Я не админ сети и RAdmin поставить не могу.

База является клиентским приложением к SQL-Server и ошибки ещё и от-туда лезут. В процессе становления мы(с базой :)). А начальство, оно такое..., медлить не любит.
...
Рейтинг: 0 / 0
PrintScreen
    #32396351
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если клиентская база на Access , надо думать это проект ADP. Зачем его держать в сети , файл проекта надо раздать на клиентские юзерские машины.
А вот в сети должна быть база SQL -вская и юзеры со своих рабочих мест должны к ней коннектиться.

Для превращения снятого образа экрана в файл есть API функция , только как то не приходилось с ней работать. Порыскай в API.

Я так понял ты сгенерировал нажатие клавиши PrtScr . Образ экранный надо еще взять и пихнуть в файл. Вообще зарули на форум С++ там подскажут.
...
Рейтинг: 0 / 0
PrintScreen
    #32396364
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Хорошо, спасибо
...
Рейтинг: 0 / 0
PrintScreen
    #32396813
Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Z
Гость
Функция, которая реализует эту возможность - GetDesktopWindow. Полный код выглядит так.
Это поместить в область деклараций модуля

Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long

Private 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

Private Const SRCCOPY = &HCC0020

‘Код, копирующий изображение экрана в окно. Размещается в форме. Не забудьте свойство формы AutoRedraw ‘установить в True.

Dim hDesk, hDeskDC

hDesk = GetDesktopWindow()

hDeskDC = GetDC(hDesk) BitBlt Me.hDC, 0, 0, Width, Height, hDeskDC, 0, 0, SRCCOPY

‘Если необходимо изображение поместить в Picture, вместо Me.hDC укажите Picture1.hDC.
А что такое Me.hDC???
...
Рейтинг: 0 / 0
PrintScreen
    #32396833
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут я попробовал. Не идет.
Да, что такое Me.hDC (у формы такого нет свойства / метода / события)
...
Рейтинг: 0 / 0
PrintScreen
    #32396840
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Вот и у меня не идет

Этот пример для создания проекта на VB, там есть такое свойство, а что это и как Picture1.hDC заменить на рисунок в форме, кто знает?
...
Рейтинг: 0 / 0
PrintScreen
    #32396846
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал на VB6 , тоже что то не работает.
Все сделал как полагается в модуль засунул это

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 Const SRCCOPY = &HCC0020

Свойство формы AutoRedraw=True

Код кнопки вот
Private Sub Command1_Click()
Dim hDesk, hDeskDC
hDesk = GetDesktopWindow

hDeskDC = GetDC(hDesk)
BitBlt Me.hDC, 0, 0, Width, Height, hDeskDC, 0, 0, SRCCOPY
End Sub

Что не так?
...
Рейтинг: 0 / 0
PrintScreen
    #32396935
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, вы делаете все правильно.

Получается hDC контекст рабочего стола через GetDesktopWindow, потом используя функцию побитового копирования BitBlt вы копируете битмап одного контекста в другой. В вашем случае вы используете собственную форму. Свойство hDc есть помойму токо у форм в VB6 (в принципе он конечно есть у любого окна, просто ввиде свойства оно не везде торчит).

Лучше проводить эксперименты не форме, а на Picture.
В свое время я проделывал обратную операцию - из Picture или bmp файла рисовал картинку поверх рабочего стола (соотв. через BitBlt)

Должно все получится. Проверте все ваши значения во время выполнения, например: Width, Height не должны быть пустыми и размер задается в пикселах, hDeskDC тоже >0 ну и Picture.hDc тоже >0, константа у вас задана правильно SRCCOPY . Так что больше ничего ошибочного я не вижу.
...
Рейтинг: 0 / 0
PrintScreen
    #32396949
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
А проще, как мне изображение экрана перекинуть в Dim b() As Byte
...
Рейтинг: 0 / 0
PrintScreen
    #32396983
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
SergeySV ?
...
Рейтинг: 0 / 0
PrintScreen
    #32397012
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все в VB6 получилось , а как это в Access то сделать?
У формы Access нет свойства Me.hDC.
...
Рейтинг: 0 / 0
PrintScreen
    #32397085
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут не обязательно нужна форма, нужен любой объект у которого в наличии hDc. Проще засунуть в Picture, сделай его невидимым и вперед. У него помойму уже есть готовые методы по сохранению загруженного битмапа ввиде файла-bmp или еще что-нибудь (нет под рукой VB6). C той же формой вы столкнетесь с такой же проблемой (если не с большой), ведь вам в конечном варианте что надо получить? Уж наверное не просто показать картинку на форме и сохранить ее или преобразовать.

На счет преобразования ничего сразу сказать не могу, хотите в массив Byte?, проще наврное будет скинуть в bmp-файл и считать его потом в массив.
...
Рейтинг: 0 / 0
PrintScreen
    #32397131
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Ок, все дело в том, что не хватает знаний по этому вопросу. Как считать из bmp проблем нет. Необходимо эту картинку будет загрузить в таблицу. Как это сделать из bmp-файла я уже знаю. Напишите пример пожалуйста, как скинуть в bmp?!?!?!

или на мыло может? - mvn_2000@mail.ru
...
Рейтинг: 0 / 0
PrintScreen
    #32397141
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо самому покопаться, как там лучше из hDc в bmp то скинуть...
...
Рейтинг: 0 / 0
PrintScreen
    #32397170
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Пожалуйста, покопайся!

Я целый день убил на это дело. А там глядишь и я тебе пригожусь!
...
Рейтинг: 0 / 0
PrintScreen
    #32397581
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Неужели никто больше не знает?
...
Рейтинг: 0 / 0
PrintScreen
    #32397695
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто этот вопрос больше специфичен дл форума по VB6 (для продвинутых), здесь даже мало у кого есть VB6, чтобы пощупать спец. контролы.
...
Рейтинг: 0 / 0
PrintScreen
    #32398286
Mike_LV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я использую для просмотра ошибок времени выполнения специальную процедуру, которая вызывается из события формы ОШИБКА(OnError).

Private Sub Form_Error(DataErr As Integer, Response As Integer)
UpdateErrorsTable DataErr, Me.Name
End Sub

Все ошибки складываются в таблицу в каждом клиентском приложении. Потом прилинковал их к своей разработке и просматриваю время от времени. Это, конечно, не лучший вариант. Проще и, наверное, удобней все ошибки складировать в одну таблицу с указанием имени компьютера и пользователя, где произошла ошибка, но руки не доходят переписать код.

Function UpdateErrorsTable(ByVal DataErr As Long, FuncName As String, Optional strSqls As String) As Boolean
Dim dbs As Database
Dim rst As Recordset
Dim y As Variant
Dim frm As Form
Dim Rpt As Report
Dim ctl As Control
Dim intCurrentType As Integer
Dim strCurrentName As String

intCurrentType = Application.CurrentObjectType
strCurrentName = Application.CurrentObjectName
On Error Resume Next
Set frm = Screen.ActiveForm
Set ctl = Screen.ActiveControl
'On Error GoTo Err_Err_handler
On Error Resume Next
Err.Raise DataErr
Err_Err_handler:
If CurrentUser() = "Admin" Then
If Err <> 0 Then
MsgBox Err.Number & " " & Err.Description & " " & Err.Source, vbOKOnly
End If
y = Error(Err)
y = AccessError(DataErr)
If AccessError(DataErr) = "" Then
MsgBox Error(DataErr) & ", in frm or rpt " & frm.Name & " in ctl " & ctl.Name, vbOKOnly
Else
MsgBox AccessError(DataErr) & ", in frm or rpt " & frm.Name & " in ctl " & ctl.Name, vbOKOnly
End If
End If
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("ErrorsTable", dbOpenDynaset)
rst.AddNew
rst![Datums] = Now
rst![Jusers] = CurrentUser()
rst![ErrorsNum] = DataErr
rst![AccessErr] = AccessError(DataErr)
rst![VBErr] = Err.Description & "; " & strSqls
rst![ErrSource] = Err.Source & ", in frm or rpt " & frm.Name & " in ctl " & ctl.Name & ", func: " & FuncName
rst.Update
rst.Close
Set dbs = Nothing
End Function
...
Рейтинг: 0 / 0
PrintScreen
    #32398318
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно... это к чему.
...
Рейтинг: 0 / 0
PrintScreen
    #32398783
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Я точно так же делаю :)

Только вот решил скрин добавить.
Вотhttp://am.rusimport.ru/MsAccess/topic.aspx?ID=10], если кому нужно смотрите. Проблема решена, тема закрыта.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / PrintScreen
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]