Страница: 1 |
Вот есть две проги, которые общаются по средствам Clipboarda. Тык вот как сделать так, чтобы, как только в Clipboarde появились данные, проект ВБ их сразу же вытащил оттуда?
Помести в таймер код If clipboard.GetText="" then msgbox "В буфере пусто!" else msgbox clipboard.GetText end if Этот таймер будете проверять наличие текста в буффере Угу, а еще в буфере могут находиться картинки, но вот если работать с таймером, то я не понимаю как определять изменилась ли в буфере обмена картинка или нет... Проги есть которые и это могут, вот только как они это делают ... 'Константы буфера обмена: 'vbCFBitmap 'VBCFDIB 'vbCFEMetafile 'vbCFFiles 'vbCFLink 'vbCFMetafile 'vbCFPalette 'vbCFRTF 'vbCFText Private Sub Command1_Click() If Clipboard.GetFormat(vbCFBitmap) = True Then 'формат данных в буфере обмена MsgBox "В буфере картинка" Clipboard.Clear 'очищаем буфер End If If Clipboard.GetFormat(vbCFText) = True Then MsgBox "В буфере текст" Clipboard.Clear 'очищаем буфер End If 'Очистку буфера производим для того, чтобы не было путаницы End Sub 2 M@X Не... то что ты посоветовал - это всё при нажатии кнопки, а мне нужно, чтобы постоянно проверялось, при этом, чтоб ещё и сама прога работала. P.S. Всё равно спасибо, про константы я не знал Так делай в таймере! для sne (как определить изменение в буфере...): Форма Private Sub Form_Load() HookForm Me SetClipboardViewer Me.hwnd End Sub Private Sub Form_Unload(Cancel As Integer) UnHookForm Me End Sub Private Sub Command1_Click() Clipboard.Clear Clipboard.SetText "Hello !" End Sub Модуль Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Declare Function SetClipboardViewer Lib "user32" (ByVal hwnd As Long) As Long Public Const WM_DRAWCLIPBOARD = &H308 Public Const GWL_WNDPROC = (-4) Dim PrevProc As Long Public Sub HookForm(F As Form) PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub UnHookForm(F As Form) SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc End Sub Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam) If uMsg = WM_DRAWCLIPBOARD Then MsgBox "Clipboard changed ..." End If End Function Есть и такие хуки, но кто-то на этом форуме говорил, что при вызове диспетчера задач, они автоматически снимаются, не ставя в известность, об этом, программу... Я сам конечно этого не видел, но говорят... Тьфу, ошибся топиком Страница: 1 |
Вопрос: Clipboard, или как из него получать данные.
Добавлено: 01.05.04 19:00
Автор вопроса: kolyanoid
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #1
Добавлено: 01.05.04 19:58
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 01.05.04 23:09
Номер ответа: 3
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #3
Добавлено: 02.05.04 09:00
Ну по-моему он не имел ввиду картинки. Судя по всему его интересует только текст
Номер ответа: 4
Автор ответа:
M@X
Вопросов: 38
Ответов: 43
Профиль | | #4
Добавлено: 02.05.04 16:51
Номер ответа: 5
Автор ответа:
kolyanoid
Вопросов: 19
Ответов: 60
Профиль | | #5
Добавлено: 02.05.04 17:00
Номер ответа: 6
Автор ответа:
M@X
Вопросов: 38
Ответов: 43
Профиль | | #6
Добавлено: 02.05.04 19:45
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 02.05.04 20:53
А вот если писать глобальный хук за клавой/мышкой, то всю обработку событий, прижется делать в этой самой dll... Хотя... не знаю на сколько это правомерно, но я отлавливал события в dll, а потом с помощью SendMessage, отсылал данные на хэндл окошка, которое сам потом сабклассил из VB... Вроде бы работало, но не знаю, можно ли так делать...
Номер ответа: 8
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #8
Добавлено: 02.05.04 20:54
Я к тому, что пользователь сможет скопировать два раза одно и то же... Т.е. одну и ту же картинку... И тут уже возникает та самая проблемма... когда-то спрашивал тут же на форуме, так никто так и не придумал никакого варианта, окромя как попиксельное сравнение А если использовать таймер в 500 мс, и картинку ХХХ х ХХХ, то прога попросту зацикливается
За константу спасибки, не знал