|
|
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Помогите кто может таким примером: Программно снять PrintScreen и поместить его в таблицу Access. Хоть намекните где искать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 11:05 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
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 а дальше-то как в таблицу вставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 11:16 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Ну вот и сам себе помог. В таблицу можешь только поместить графический файл в поле типа OLE. Если будешь много таких файлов пихать , твою базу "разнесет" до непристойных размеров (оно тебе надо?) Можно правда хранить файлы на винте, а в таблице хранить путь к ним. Вот у меня вопрос возник, а для чего это тебе надо то? За юзерами во время работы следтть что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 11:24 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
У меня база в сети, дык вот, чтоб не бегать к ним(в другой корпус) я реализую такую схему: при возникновении ошибок обработчик записывает все данные об ошибке в таблицу и туда же помещает снимок с экрана, а я периодически проматриваю возникшие ошибки для их исправления. такие дела... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 11:40 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Неужели так "круто" база написана , что ты ошибки протоколируешь? Поставь RAdmin и смотри на экран юзера от себя! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 11:43 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Я не админ сети и RAdmin поставить не могу. База является клиентским приложением к SQL-Server и ошибки ещё и от-туда лезут. В процессе становления мы(с базой :)). А начальство, оно такое..., медлить не любит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 11:46 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Если клиентская база на Access , надо думать это проект ADP. Зачем его держать в сети , файл проекта надо раздать на клиентские юзерские машины. А вот в сети должна быть база SQL -вская и юзеры со своих рабочих мест должны к ней коннектиться. Для превращения снятого образа экрана в файл есть API функция , только как то не приходилось с ней работать. Порыскай в API. Я так понял ты сгенерировал нажатие клавиши PrtScr . Образ экранный надо еще взять и пихнуть в файл. Вообще зарули на форум С++ там подскажут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 11:59 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Функция, которая реализует эту возможность - 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??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 15:04 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Тут я попробовал. Не идет. Да, что такое Me.hDC (у формы такого нет свойства / метода / события) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 15:24 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Вот и у меня не идет Этот пример для создания проекта на VB, там есть такое свойство, а что это и как Picture1.hDC заменить на рисунок в форме, кто знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 15:29 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Попробовал на 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 Что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 15:37 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
В принципе, вы делаете все правильно. Получается hDC контекст рабочего стола через GetDesktopWindow, потом используя функцию побитового копирования BitBlt вы копируете битмап одного контекста в другой. В вашем случае вы используете собственную форму. Свойство hDc есть помойму токо у форм в VB6 (в принципе он конечно есть у любого окна, просто ввиде свойства оно не везде торчит). Лучше проводить эксперименты не форме, а на Picture. В свое время я проделывал обратную операцию - из Picture или bmp файла рисовал картинку поверх рабочего стола (соотв. через BitBlt) Должно все получится. Проверте все ваши значения во время выполнения, например: Width, Height не должны быть пустыми и размер задается в пикселах, hDeskDC тоже >0 ну и Picture.hDc тоже >0, константа у вас задана правильно SRCCOPY . Так что больше ничего ошибочного я не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 16:25 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
А проще, как мне изображение экрана перекинуть в Dim b() As Byte ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 16:36 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Все в VB6 получилось , а как это в Access то сделать? У формы Access нет свойства Me.hDC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 17:18 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Тут не обязательно нужна форма, нужен любой объект у которого в наличии hDc. Проще засунуть в Picture, сделай его невидимым и вперед. У него помойму уже есть готовые методы по сохранению загруженного битмапа ввиде файла-bmp или еще что-нибудь (нет под рукой VB6). C той же формой вы столкнетесь с такой же проблемой (если не с большой), ведь вам в конечном варианте что надо получить? Уж наверное не просто показать картинку на форме и сохранить ее или преобразовать. На счет преобразования ничего сразу сказать не могу, хотите в массив Byte?, проще наврное будет скинуть в bmp-файл и считать его потом в массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 18:00 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Ок, все дело в том, что не хватает знаний по этому вопросу. Как считать из bmp проблем нет. Необходимо эту картинку будет загрузить в таблицу. Как это сделать из bmp-файла я уже знаю. Напишите пример пожалуйста, как скинуть в bmp?!?!?! или на мыло может? - mvn_2000@mail.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 18:34 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Мне надо самому покопаться, как там лучше из hDc в bmp то скинуть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 18:41 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Пожалуйста, покопайся! Я целый день убил на это дело. А там глядишь и я тебе пригожусь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 19:09 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Неужели никто больше не знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2004, 10:50 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Просто этот вопрос больше специфичен дл форума по VB6 (для продвинутых), здесь даже мало у кого есть VB6, чтобы пощупать спец. контролы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2004, 11:43 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Я использую для просмотра ошибок времени выполнения специальную процедуру, которая вызывается из события формы ОШИБКА(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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2004, 16:23 |
|
||
|
PrintScreen
|
|||
|---|---|---|---|
|
#18+
Прикольно... это к чему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2004, 16:41 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1685&tid=1676832]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 325ms |

| 0 / 0 |
