FreeBasic
Главная
Вход
Регистрация
Пятница, 27.12.2024, 03:59Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Как правильно отправить ссылку на файл в буфер обмена
haavДата: Четверг, 25.10.2012, 13:31 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Как правильно отправить ссылку на файл в буфер обмена


В сети куча сайтов , которые предлагают один и тот же код. Который впрочем работает с ограничением.

Сам код:

Code
#Include Once "windows.bi"
#Include "win/shlobj.bi"

Function SetClipboardFile(sFile As String) As Integer export
    If OpenClipboard(0) Then
       Dim df As DROPFILES Ptr
       Dim hGlobal As HGLOBAL
       Dim iLen As Integer

       sFile = sFile + Chr(0) + Chr(0)
       iLen = Len(sFile)
       hGlobal = GlobalAlloc(GMEM_SHARE+GMEM_MOVEABLE+GMEM_ZEROINIT, SizeOf(DROPFILES) + iLen)

       If hGlobal<>0 Then
          df = GlobalLock(hGlobal)
          df->pFiles = SizeOf(DROPFILES)
          MoveMemory(Cast(Byte Ptr,df) + SizeOf(DROPFILES), SAdd(sFile), iLen )
          GlobalUnlock(hGlobal)
          If SetClipboardData(CF_HDROP, hGlobal)Then
             GlobalFree(hGlobal)
             Function = TRUE
          EndIf
       EndIf
       CloseClipboard()
    EndIf
End Function

' Write the file path to the clipboard
If SetClipboardFile(ExePath & "\TEST.txt") Then

    MessageBox(_
    0,_
    "Test is successful!",_
    "",_
    0 _
    )
Else
    MessageBox(_
    0,_
    "Error",_
    "It is impossible to place the path to the clipboard",_
    0 _
    )
EndIf


Все вроде нормально файл в буфер обмена посылается. И даже копируется после этого в любую папку кроме той из которой идет копирование. То есть когда мы наводим курсор на файл , нажимаем копировать , потом вставить у нас появляется его копия в этой же папке. Однако код выше этого не умеет. В другие папки пожалуйста, но в эту никак. Кто знает решение, прошу подсказать.

Знаю что вопрос сложный, и наверное будет долго висеть, но кто знает.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ShadExДата: Четверг, 15.11.2012, 20:35 | Сообщение # 2
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Я чуть попробовал разобраться с этим кодом, но тоже безуспешно - времени на эксперименты с ВинАпи в последнее время мало...

Скажу лишь одно - он как-то по другому копирует файлы, чем через обычную процедуру "CTRL + C -> CTRL + V" или "Копировать -> Вставить" через контекстное меню. В этом лекгко можно убедиться запустив просмотрщик буфера обмена (C:\WINDOWS\system32\clipbrd.exe)


Сообщение отредактировал ShadEx - Четверг, 15.11.2012, 20:37
 
haavДата: Понедельник, 31.03.2014, 21:20 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Данная проблема решилась. Один из программистов FreeBasic написал туториал по этому вопросу, правда на немецком, но если очень нужно, то можно и с китайского разобрать о чем речь smile

Вот здесь ссылка: http://www.freebasic-portal.de/tutoria....05.html

Сам туториал начинается с простого (то есть drag - drop с помощью WM_DROPFILES , этот метод известен наверно всем, в том числе и мне) и заканчивая глубоким копанием в интерфейсах, с применением абстрактных и виртуальных классов. И хоть в FB появилась возможность создавать виртуальные и абстрактные классы, которые как я понял облегчили реализацию интерфейсов, все таки конечная программа не смотрится такой уж легкой smile . Но хорошо, что есть человек, хорошо сведущий в этих делах, так что если что будет у кого спросить.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
  • Страница 1 из 1
  • 1
Поиск: