Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Clipboard, или как из него получать данные. Добавлено: 01.05.04 19:00  

Автор вопроса:  kolyanoid

Вот есть две проги, которые общаются по средствам Clipboarda. Тык вот как сделать так, чтобы, как только в Clipboarde появились данные, проект ВБ их сразу же вытащил оттуда?

Ответить

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

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 01.05.04 19:58

Помести в таймер код

 

If clipboard.GetText="" then

 msgbox "В буфере пусто!"

else

msgbox clipboard.GetText

end if

 

Этот таймер будете проверять наличие текста в буффере

Ответить

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



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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

'Константы буфера обмена:

'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

Ответить

Номер ответа: 5
Автор ответа:
 kolyanoid



Вопросов: 19
Ответов: 60
 Профиль | | #5 Добавлено: 02.05.04 17:00

2 M@X

Не... то что ты посоветовал - это всё при нажатии кнопки, а мне нужно, чтобы постоянно проверялось, при этом, чтоб ещё и сама прога работала.

P.S.

Всё равно спасибо, про константы я не знал :)

Ответить

Номер ответа: 6
Автор ответа:
 M@X



Вопросов: 38
Ответов: 43
 Профиль | | #6 Добавлено: 02.05.04 19:45

Так делай в таймере!

для 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

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 02.05.04 20:53

Есть и такие хуки, но кто-то на этом форуме говорил, что при вызове диспетчера задач, они автоматически снимаются, не ставя в известность, об этом, программу... Я сам конечно этого не видел, но говорят...

А вот если писать глобальный хук за клавой/мышкой, то всю обработку событий, прижется делать в этой самой dll... Хотя... не знаю на сколько это правомерно, но я отлавливал события в dll, а потом с помощью SendMessage, отсылал данные на хэндл окошка, которое сам потом сабклассил из VB... Вроде бы работало, но не знаю, можно ли так делать...

Ответить

Номер ответа: 8
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #8
Добавлено: 02.05.04 20:54

Тьфу, ошибся топиком :)

Я к тому, что пользователь сможет скопировать два раза одно и то же... Т.е. одну и ту же картинку... И тут уже возникает та самая проблемма... когда-то спрашивал тут же на форуме, так никто так и не придумал никакого варианта, окромя как попиксельное сравнение :) А если использовать таймер в 500 мс, и картинку ХХХ х ХХХ, то прога попросту зацикливается :(

За константу спасибки, не знал :)

Ответить

Страница: 1 |

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



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