Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Монитор катологов, не пойму в чем ошибка 
:(
    Опции темы
ne0n
Дата 9.8.2005, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 4
Всего: 11



Вот програмку пишу монитор катологов.
Но вместо того чтобы выводить инфу(где что изменилось) на TlistView выводит знаки вопроса???? smile Не могу понять в чем дело!!!!!
хотя есть подозрения...
Товарищи помогите найти ошибку!!
вот код:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
    _FILE_NOTIFY_INFORMATION = record
   NextEntryOffset: DWORD;
   Action: DWORD;
   FileNameLength: DWORD;
   FileName: pWidechar;//  Может взять что то другое а не pWideChar???
 end;

PFileNotifyInformation = ^_FILE_NOTIFY_INFORMATION ;

  TForm1 = class(TForm)
    Button1: TButton;
    lv: TListView;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
 const BUF_SIZE = 2048;
implementation

{$R *.dfm}

procedure WorkThread(LV : TListView);stdcall;
var
 hDir : THandle;

 lpBuf : Pointer;
 Ptr   : Pointer;

 cbReturn : Cardinal;
 FileName : PWideChar;

 Item : TListItem;
 sTime : _SYSTEMTIME;
begin

 hDir := CreateFile ('C:\',GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE
   or FILE_SHARE_DELETE,nil,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0);

 if hDir = INVALID_HANDLE_VALUE
  then begin ShowMessage(SysErrorMessage(GetLastError)); exit; end;



 GetMem(lpBuf,BUF_SIZE);

 repeat

  ZeroMemory(lpBuf,BUF_SIZE);


  if not ReadDirectoryChangesW(hDir,lpBuf,BUF_SIZE,true,
                   FILE_NOTIFY_CHANGE_FILE_NAME,@cbReturn,nil,nil)
   then Break;

  Ptr:=lpBuf;
repeat
   // Добавляем новый элемент в TListView (ViewStyle = vsList )
   Item := LV.Items.Add;
GetMem(FileName,PFileNotifyInformation(Ptr).FileNameLength+2);
ZeroMemory(FileName,PFileNotifyInformation(Ptr).FileNameLength+2);
   // WinAPI функция для копирования Unicode строки ??? Мне кажется из за этого глючит.
   lstrcpynW(FileName,PFileNotifyInformation(Ptr).FileName,
             PFileNotifyInformation(Ptr).FileNameLength div 2+1);

Item.Caption:='C:\'+FileName;
FreeMem(FileName);
case PFileNotifyInformation(Ptr).Action of
    FILE_ACTION_ADDED    : Item.SubItems.Add('Файл был создан');
    FILE_ACTION_REMOVED  : Item.SubItems.Add('Файл был удален');
    FILE_ACTION_MODIFIED : Item.SubItems.Add('Файл был изменен');
    FILE_ACTION_RENAMED_OLD_NAME :
   Item.SubItems.Add('Файл был переименован и в имени файла - предыдущее имя');
    FILE_ACTION_RENAMED_NEW_NAME :
  Item.SubItems.Add('новое имя после переименования');
    else Item.SubItems.Add('Произошло что-то странное');
   end;


   GetLocalTime(sTime);
   with sTime do
    Item.SubItems.Add(Format('%.2d:%.2d:%.2d',[wHour,wMinute,wSecond])); // 13:54:20


   if PFileNotifyInformation(Ptr).NextEntryOffset=0
    then Break
     else begin

      Item.SubItems.Add('Offset : '+
       IntToStr(PFileNotifyInformation(Ptr).NextEntryOffset));

      Inc(Cardinal(Ptr),PFileNotifyInformation(Ptr).NextEntryOffset);

     end;


until false;

until false;
FreeMem(lpBuf);
end;




procedure TForm1.Button1Click(Sender: TObject);

var
 ThID : Cardinal;
   hThread : THandle;
begin
hThread:=CreateThread(nil,0,@WorkThread,LV,0,ThID);
if hThread=0 then ShowMessage(SysErrorMessage(GetLastError));
end;
end.

PM MAIL ICQ   Вверх
p0s0l
Дата 9.8.2005, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Цитата(ne0n @ 9.8.2005, 16:28)
   FileName: pWidechar;//  Может взять что то другое а не pWideChar???
Угу, тут массив из WCHAR'ов должен быть, а не указатель на него.


Добавлено @ 17:07
Я помню пример когда-то выкладывал...
Вот он:
http://forum.vingrad.ru/index.php?showtopic=21025
Добавлено @ 17:08
Совет - пользуйся поиском, про ReadDirectoryChangesW вопросы возникают регулярно smile
http://forum.vingrad.ru/index.php?act=Sear...rectorychangesw


--------------------
С уважением, г-н Посол.
PM   Вверх
ne0n
Дата 9.8.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 4
Всего: 11



Большле спасибо!!!!!
Выручил!!!! smile
PM MAIL ICQ   Вверх
p0s0l
Дата 9.8.2005, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



ne0n, советую еще почитать статью о потоках:
http://forum.vingrad.ru/index.php?showtopic=60076&view=all
т.к. так как ты сделал - не делается smile



--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.