Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Копирования методом API способом Windows / 18 сообщений из 18, страница 1 из 1
11.12.2011, 15:43
    #37569643
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
Private Type SHFILEOPSTRUCT
   hwnd        As Long
   wFunc       As Long
   pFrom       As String
   pTo         As String
   fFlags      As Integer
   fAborted    As Boolean
   hNameMaps   As Long
   sProgress   As String
 End Type
  
Private Const MAX_PATH As Long = 260
 
'File Operations
Private Const FO_MOVE As Long = &H1
Private Const FO_COPY As Long = &H2
Private Const FO_DELETE As Long = &H3
Private Const FO_RENAME As Long = &H4

'File Operation Flags
Private Const FOF_MULTIDESTFILES As Long = &H1
Private Const FOF_CONFIRMMOUSE As Long = &H2
Private Const FOF_SILENT As Long = &H4              'don't create progress/report
Private Const FOF_RENAMEONCOLLISION As Long = &H8
Private Const FOF_NOCONFIRMATION As Long = &H10     'don't prompt the user.
Private Const FOF_WANTMAPPINGHANDLE As Long = &H20  'Fill in SHFILEOPSTRUCT.hNameMappings
                                                    'Must be freed using SHFreeNameMappings
Private Const FOF_ALLOWUNDO As Long = &H40
Private Const FOF_FILESONLY As Long = &H80          'on *.*, do only files
Private Const FOF_SIMPLEPROGRESS As Long = &H100    'don't show names of files
Private Const FOF_NOCONFIRMMKDIR As Long = &H200    'don't confirm making any needed dirs
Private Const FOF_NOERRORUI As Long = &H400         'don't put up error UI
Private Const FOF_NORECURSION As Long = &H1000      'don't recurse into directories
Private Const FOF_NOCOPYSECURITYATTRIBS As Long = &H800  'don't copy NT file Security Attributes
Private Const FOF_NO_CONNECTED_ELEMENTS As Long = &H2000 'Shell v5+: don't operate on connected file elements
Private Const FOF_WANTNUKEWARNING As Long = &H4000       'Shell v5+: during delete operation, warn if
                                                         'nuking instead of recycling (partially
                                                         'overrides FOF_NOCONFIRMATION)
Private Const FOF_NORECURSEREPARSE As Long = &H8000&  'Shell v5.1+: treat reparse points as
                                                      'objects, not containers
                                                   
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nSize As Long, ByVal lpBuffer As String) As Long

Private Declare Function SHFileOperation Lib "shell32" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

'FO_FUNC is determined by the
'type of SHFileOperation action chosen
'(move/delete/rename/copy)
Private FO_FUNC As Long
  
'FOF_FLAGS is determined by the
'both the SHFileOperation Actions/Method
'frame and the SHFileOperation Options
'frame choices (delete/recycle/simple
'progress/no confirm etc.)
Private FOF_FLAGS As Long
 
'for ease of reading, substitute constants
'for numbers in code SHFileOperationAction
'option button constants
'Private Const FileMove As Long = 1
'Private Const FileCopy As Long = 2
'Private Const FileDelete As Long = 3

Public Sub GlWinCopyFile(Frm As Form, zvidki As String, kuda As String)
Dim sys As SHFILEOPSTRUCT
  sys.wFunc = FO_COPY
  sys.pFrom = zvidki
  sys.pTo = kuda
  sys.hwnd = Frm.hwnd
  sys.fFlags = FOF_SIMPLEPROGRESS
  'Call SHFileOperation(sys)
  FileCopy zvidki, kuda
End Sub




скопировал сначало версию делфи, переделал, потом нашел готовый вариант, оказался таким же. И у меня в результате на строке
Call SHFileOperation(sys) выскакивает "фак" мемори не может быть read и весь проэкт выбрасывает из памьяти. Нужно наново открывать проэкт и чёто там эксперементировать. Что там не так ?
...
Рейтинг: 0 / 0
11.12.2011, 16:55
    #37569726
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Андрей159,
из описания структуры SHFILEOPSTRUCT :
pFrom
Type: LPCTSTR
Note This string must be double-null terminated .

pTo
Type: LPCTSTR
Note This string must be double-null terminated .

Ваши zvidki, kuda заканчиваются двойным Chr(0) ?
...
Рейтинг: 0 / 0
11.12.2011, 22:51
    #37570053
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
С удовольствием бы посмотрел на MSDN, НО у меня зарубано этот сайт и все сайты антивирусных программ. Я уже и в файл HOST смотрел, и фаервола нет, может мой провайдер "Укртелеком" зарубал, не знаю....

тоесть я должен в конце добавить & chr(0) & chr(0) ? Попробую.
...
Рейтинг: 0 / 0
11.12.2011, 23:12
    #37570071
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Андрей159,
странно. У меня тоже Укртелеком, но MSDN отрывается без проблем.
...
Рейтинг: 0 / 0
11.12.2011, 23:17
    #37570075
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Андрей159,
сильно насторожило:у меня зарубано этот сайт и все сайты антивирусных программ Рекомендую загрузиться с внешенего носителя и протестировать систему, например AVZ
...
Рейтинг: 0 / 0
11.12.2011, 23:46
    #37570106
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
там на майкрософт есть программа виртуальный комп. Хочу скачать и страница не открывается. Возможно после того как установил фотошоп CS3. Но я знаю что он рубает себя в хост файле. Я там все удалил, перегружал комп, все безтолку

а возвращаясь к теме у меня не получилось
мне нужно к примеру путь1\файл копировать на путь2\имья файла другое
возможно я "куда" не правильно использую ? может там только path нужно (пробовал) с "\" - еще не пробовал. не знаю в чем дело
...
Рейтинг: 0 / 0
12.12.2011, 00:11
    #37570127
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Работает. Спасибо. Нужно в поле "Куда" использовать только Path чтоб заканчивался на "\".
...
Рейтинг: 0 / 0
12.12.2011, 00:19
    #37570137
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Андрей159,
проблема не в строках, а в ФОРМЕ
У меня нормально отработало такое
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
'Public Sub GlWinCopyFile(Frm As Form, zvidki As String, kuda As String)
Public Sub GlWinCopyFile(zvidki As String, kuda As String)
Dim sys As SHFILEOPSTRUCT
  sys.wFunc = FO_COPY
  sys.pFrom = zvidki
  sys.pTo = kuda
  'sys.hwnd = Frm.hwnd
  sys.hwnd = 0
  sys.fFlags = FOF_SIMPLEPROGRESS
  Call SHFileOperation(sys)
  'FileCopy zvidki, kuda
End Sub


Код: vbnet
1.
GlWinCopyFile "C:\temp\mdb_\201_2-0.accdb","C:\201_2-0.accdb"


Запускал в Excel.VBA
...
Рейтинг: 0 / 0
12.12.2011, 00:20
    #37570140
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Андрей159,
а ларчик, оказывается, просто открывался
...
Рейтинг: 0 / 0
12.12.2011, 00:28
    #37570145
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
наверное последнее
в окне копирования вместо имя файла выводится до трех символов краказябриков
...
Рейтинг: 0 / 0
12.12.2011, 00:30
    #37570146
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
ха! Славно. После хендел=0 уже ничего не выводится. Вот и супер. То что надо! Спасибо за помощь
...
Рейтинг: 0 / 0
12.12.2011, 00:34
    #37570148
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
> Андрей159,
> После хендел=0 уже ничего не выводится. Вот и супер. То что надо!
Зачем тогда весь этот "огород" с API ? Чем простой FileCopy zvidki, kuda не строил ?
...
Рейтинг: 0 / 0
12.12.2011, 00:43
    #37570153
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Да юзера вроде не тупые а тупят когда не видно процеса. Мотают кругами мышку надеясь увидеть конец процеса. А при "копифайл" мышка показывает пиктограмму "часы/занято". При этом никакой DoEvent и таймер не поможет. Я уже и помощника офисного им поставил типа чтоб красивей и понятней было (говорит о поточном действии) и Label статусный есть яркожелтым показывает подсказки определенное времья. Но когда копируется несколько файлов народ тупо в непонимании что происходит. Такая уж психология. Нужен прогресс, теперь спокойней будет.
...
Рейтинг: 0 / 0
12.12.2011, 00:49
    #37570156
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Андрей159,
а ссылку на какую форму передавал в GlWinCopyFile ?
...
Рейтинг: 0 / 0
12.12.2011, 00:59
    #37570168
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Сделал программу "Процес виконання" (исполнения), где на кабельном телевидении один комп воспроизводит видео. Другая прога нужна чтобы "Освятить" файл, тоесть такое новое понимание ввел для своих, а в сущности они дают настройки для видео: когда показывать, сколько и т.д. Вся эта каша вместе с своим_хеш_кодом вначале названия файла, которое понятно будет только на станции. На станции по хешу проверит логин/пароль и все настройки видео файла. Но весь каприз в том что сеть у нас общая, а разшаренная папка на станции (пустая) одна. Если в эту папку попадает длительное время файл, станция ничего не сообщая переносит этот файл в другую скрытую для сети папку и ставит видео в график, если нет, то просто удаляет. Зрители ничего не замечают. По UDP в ответ на запрос только сообщает что файл принят и от кого (для отчета). А изначально было придумано такую систему, чтоб только флешку в гнездо вставить и процесс копирования никому не виден. Тоесть вдома зделал рекламный видеоролик, прогой освятил, пришел на станцию, флешку втыкнул, флешка поморгала, успокоилась и можно идти домой. А сейчас для тех кто работает в офисе нужно было зделать прогресс))
...
Рейтинг: 0 / 0
12.12.2011, 01:03
    #37570170
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
скукотищаа ссылку на какую форму передавал в GlWinCopyFile ?
типа хендел окна ? Нет ноль поставил, из Вашего примера. Таймера процес отбирают, а текущая строчка ждет окончания процеса копирования. Тоесть я доделал точную проверку путей и существования файлов чтоб не было капризов в дальнейшем и в момент копирования Enabled функциональных элементов делаю Disabled.
...
Рейтинг: 0 / 0
12.12.2011, 01:30
    #37570177
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Андрей159,
может оно и не надо.
Чтобы отображались имена копируемых файлов
Код: vbnet
1.
sys.fFlags = 0 'FOF_SIMPLEPROGRESS


ЗЫ: всё-таки поверьте свою систему на наличие вирусей/малваре. Негоже, чтоыб msdn не открывался.
...
Рейтинг: 0 / 0
12.12.2011, 02:03
    #37570193
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирования методом API способом Windows
Превосходно!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Копирования методом API способом Windows / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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