1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

А вот кто знает, как средствами Vb 6.0 сделать следующее:

Тема в разделе "Программирование", создана пользователем Fox, 20.05.03.

  1. Fox

    Fox Активный участник

    1.778
    0
    1) Считать дату изменения файла в переменную типа Date или String.
    2) Изменить эту самую дату на какую-то другую.
    3) Считать остальные аттрибуты файла в четыре буленовские переменные.
    4) Соответственно, изменить и их тоже.
    5) Ищется алгоритм сканирования древа файлов на диске, т.е. надо получить полные пути и имена всех файлов, содержащихся на носителе, алгоритм пока не найден, но я точно знаю, что есть несколько способов реализации, если у кого-то есть хоть один - очень буду благодарен.
    6) Необходимо отслеживать, были ли нажатия каких-либо кнопок или движения мыши, пока прога работает в фоновом режиме.
    Собственно, пока все вопросы, если решение существует только в WinAPI (думаю, это больше всего относится к 6-му вопросу), то хотелось-бы увидеть полностью код.
     
  2. Bob

    Bob Активный

    21.795
    2
    Первые пять через WinAPI. 6й не совсем понятно что хотел?
     
  3. Fox

    Fox Активный участник

    1.778
    0
    Поясняю насчёт 6-го. Программа с невидимой формой, должна совершать некоторые действия при отсутствии пользовательской активности, как скрин сэйвер.
    Насчёт первых пяти - может, знаешь ссылки, где можно надыбать куски кода?
    Кстати, а 5-ый вопрос - почему это через API??? В VB есть всё для этого необходимое, я просто не могу допетрить как это всё организовать, там циклы должны быть вложенные, бесконечные, с выходом по условию если функция Dir будет возвращать пустое значение. Это пока единственное, к чему я пришёл :)
     
  4. Fox

    Fox Активный участник

    1.778
    0
    То-ли, там пример только для C++, то-ли я не там смотрю...
     
  5. pegas

    pegas Участник

    311
    0
    можно через filesystemobject, через Winapi (getfileAttributes и т.д дольше)
    подключаешь через references библиотеку microsoft scripting runtime-sccrun.dll есть на каждом компе
    и как то так
    Private Sub getlastdatemod(namefile as string)
    Dim objfso As FileSystemObject
    Dim objfile As file
    Dim s As String
    Set objfso = New FileSystemObject
    Set objfile = objfso.GetFile(namefile)
    s = objfile.DateLastModified
    MsgBox s
    End Sub
    2. дату изменения файла нельзя просто так поменять, она на то и дата последнего изменения файла. изменишь файл поменяется дата
    3, 4.то же самое что и выше и
    isereadony=(objfile.Attributes and readonly)
    ishidden=(objfile.Attributes and hidden)
    isSystem=(objfile.Attributes and system)
    iArchive=(objfile.Attributes and archive)
    изменения соответственно через логические операции
    5. рекурсией. функция получает на входе каталог
    ищет все каталоги. все которые находит вызывает опять себя с именем найденного католога. каталоги кончились-работаем с файлами, что там нужно сделать. у filesystemobject есть свойство folders у которого свойство subfolders-это подкаталоги, в свою очередь являющиеся folders. и свойство files-это файлы в папке
    6. нажатие кнопок и мыша ловится SetwindowsHookEх, в VB ето все долго делается. Надо ловить не нажатие кнопки, а событие бездействия ситсемы-не знаю как в VB, а в Delphi есть событие onIdle. на него и вешатся. а вообще такие штуки в виде сервисов делают.
     
  6. Bob

    Bob Активный

    21.795
    2
    Fox, да на Си. Тебе только функция нужна и её описание. Апи функции то наверно умеешь использовать? Раз пишешь на Васике. А лучше посмотри где-нибудь на специализированных сайтах. Их навалом в инете.
     
  7. RubiN

    RubiN Активный участник

    6.629
    425
  8. Fox

    Fox Активный участник

    1.778
    0
    Спасибо, по первым четырём вроде бы всё понятно, попробую разобраться. По пятой общий смысл ясен, конечно, но это и раньше было понятно... Я пытаюсь с функцией Dir это реализовать, но пока что-то не получается, самое обидное, я помню, что где-то в инете натыкался прям на готовый код, но забыл, на каком сайте :( Щас вот ищу в конференциях, пока безрезультатно.
    Ещё забыл, один вопросик есть:
    7) Как узнать размер файла? Видимо, тоже API, но, может, всё-таки, есть стандартные команды в самом VB.
     
  9. Fox

    Fox Активный участник

    1.778
    0
    Там вообще прикольно... Какой-то типок задавал вопросы по атрабутам файла и по сканированию файлового древа и ему так и не ответили. Видимо, не знает никто, что очень странно, вроде вопросы-то простые. Забавно само совпадение, причём, он эти темы совсем недавно разместил.
     
  10. Fox

    Fox Активный участник

    1.778
    0
    Ура! Кажися почти всё нашёл. Сегодня буду испытавать. А, может, ещё как размер файла узнать напишете?
     
  11. Shild

    Shild Гость

    Вот, пробуй:

    Размер файла можно определить тремя путями:

    1. Если файл можно открыть функцией OPEN, то можно воспользоваться функцией LOF

    Dim FileFree As Integer
    Dim FileSize As Long
    FileFree = FreeFile
    Open "C:\boot.ini" For Input As FileFree
    FileSize = LOF(FileFree)
    Close FileFree

    2. Используя функцию FileLen

    Dim lFileSize As Long
    FileSize = FileLen("C:\boot.ini")

    3. Используя FileSystemObject

    Для использования этого примера установи ссылку на Microsoft Scripting Runtime через меню Project | References.

    Dim FSys As New FileSystemObject
    Private Sub Command1_Click()
    'Не забудь установить ссылку на свой файл
    Set qn = FSys.GetFile("C:\boot.ini")
    MsgBox "Размер файла " & qn.Size / 1024 & " килобайт"
    End Sub
     
  12. tgb

    tgb Гость

    2Fox

    5)
    В плане рекурсии не уверен, что это будет оптимально скоростным сканированием "древа". Могу предложить следующее:
    - создать динамический список, где элементы - это [список директорий + тек. индекс директории] на каждом уровне вложенности соответственно;
    - далее, берем первую директорию, заходим, сканируем на наличие папок и файлов, заполняем соответствующий элемент нашего динам. списка;
    - далее, повторяем пред. шаг до тех пор, пока не дойдем до дна, где уже не будет папок, одни файлы;
    - выходим наверх, увеличиваем индекс тек. директории на 1, переходим в след. папку из тек. списка директорий, при этом, каждый раз когда мы переходим на верхний уровень вложенности, не надо забывать удалять соответствующий элемент из динам. списка, т.е. тот уровень где все папки просканированы, нам уже не интересен;
    - т.о. мы выберемся на 0-ой уровень вложенности;
    Выход из внутреннего цикла, если все папки просканированы.
    Выход из внешнего цикла, если уровень вложенности=0.
    Главный минус, это конечно выделяемая память(хранить списки директорий на каждом уровне вложенности), многовато, однако без имени папки в нее не попадешь.
    Одним словом главным образом надо уделить внимание сокращению выделяемой памяти, путем более эффективного метода запоминания информации о каждом уровне вложенности.
    Либо запоминать только тек. индекс папки на каждом уровне вложенности, затем, при выходе наверх заново сканировать и переходить в директорию с нужным индексом.
     
  13. Fox

    Fox Активный участник

    1.778
    0
    Shild, спасибо за развёрнутый ответ.
    tgb, в принципе, твой способ мне понятен, непонятно только, почему ты считаешь, что он будет работать быстрее??? При сканировании дисков больше всего времени занимают именно обращения к носителю, хочешь сказать, у твоего способа таких обращений будет меньше?
     
  14. Гость

    Гость Гость

    я так понял нового трояна пишем всем форумом? ;)
     
  15. tgb

    tgb Гость

    2Fox

    Рекурсия есть рекурсия, если можно обойтись без нее, то лучше без нее, поверь будет быстрее.
     
  16. And

    And Гость

    ну как получилось с прогой поделись исходником !!!
    я иммею в виду подсчет места в директории с уважением !