Arsip: Wait for file lock released

 
user image
more 17 years ago

danieljun

Bagaimana caranya mengetahui file yang dipakai oleh proses lain sudah selesai atau belum? (Lock sudah dilepas?) Lalu bila saya membuat thread yang menunggu proses sampai selesai, bagaimana ya caranya?
user image
more 17 years ago

madi


function IsFileInUse(const fName: TFileName): Boolean;
var
  HFileRes: HFILE;
begin
  Result := False;
  HFileRes := CreateFile(PChar(fName),
                         GENERIC_READ or GENERIC_WRITE,
                         0,
                         nil,
                         OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL,
                         0);
  Result := (HFileRes = INVALID_HANDLE_VALUE);
  if not Result then
    CloseHandle(HFileRes);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    if IsFileInUse(Opendialog1.FileName) then
      ShowMessage('File is in use!');
end;
ato bisa gunakan form khusus untuk menunggu sampai file bersangkutan udah tdk dipake lagi...bisa dengan timer...mas Semoga bisa membantu....:D
user image
more 17 years ago

danieljun

terima kasih madi, cara ini bisa juga dipakai. Bagaimana kita bisa tahu file sedang dibuka oleh suatu proses, tanpa tahu namanya? Misalnya Acrobat sedang buka suatu file pdf dan saya ingin tahu dari aplikasi delphi apakah ada file yang sedang dibuka tanpa mengetahui namafilenya?, Lalu proses di delphi dilanjutkan bila semua file pdf yang dibuka itu sudah ditutup? Terima kasih sebelumnya :D
user image
more 17 years ago

madi

U r welkam :D itu namanya mengetahui apakah sebuah aplikasi sedang berjalan mas...namanya...:D tull gak? xixixixixixixxixi klo pengen mengetahui sebuah file sedang dibuka, spt jwban saya pertama, harus spesifik.... procedure cek filenya ganti dengan ini, fungsinya biarin aja....hehehe

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsFileInUse('C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe') then
    ShowMessage('Program lagi buka file yg tdk ingin saya ketahui, tunggu ya...xixixxixixixi');
  else
    ShowMessage('Program lagi nganggur...xixixxixixix');
end;
Semoga spt yg diharapkan.....:D
user image
more 17 years ago

madi

jawaban yg terakhir di rollback aja... sorry salah tangkap pertanyaan...xixixixixi...
user image
more 17 years ago

madi

mungkin begini mas....hehehehe

private
  procedure refresh;
{...}
function EnumWindowsProc(Wnd: HWND; lParam: lParam): BOOL; stdcall;
var
  aplikasi : array of Char;
begin
  if (IsWindowVisible(Wnd) or IsIconic(wnd)) and
    ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
    (GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
    (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then
  begin
    GetWindowText(Wnd, aplikasi, 256);
    if aplikasi <> 'GDI+ Window' then
      Form1.Listbox1.Items.Append(aplikasi);
  end;
end;
procedure TForm1.refresh;
begin
  Listbox1.Clear;
  EnumWindows(@EnumWindowsProc, 1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j : integer;
begin
  refresh;
  for i := 0 to listbox1.Items.Count -1 do
   begin
    j := Length(listbox1.Items.Strings[i]);
    if (copy(listbox1.Items.Strings[i],1,12) = 'Adobe Reader')
     and (listbox1.Items.Strings[i] <> 'Adobe Reader') then
     ShowMessage('Adobe Reader sedang membuka file : ' + copy(listbox1.Items.Strings[i],16,j))
   else
   if copy(listbox1.Items.Strings[i],1,12) = 'Adobe Reader' then
     ShowMessage('Adobe Reader sedang Nganggurr....xixixxixixi')
   end;
end;
maaf klo terlalu bertele-tele maklum aja, namanya juga New Baby...xixixixxixii... Klo tipe file yg Anda ingin ketahui banyak mungkin bisa gunakan case of mas...ato bikin list sendiri yg udah Anda tentukan... Semoga yg ini sesuai keinginan sampeyan...xixixxixixi...:D
user image
more 17 years ago

danieljun

wah makasih banget madi, niat bener jawab pertanyaan gue sampe banyak2 nulisnya. tapi ... (xixixi) masih ada tapi ... kalau pengen tahu file yang dibuka suatu app tanpa enum windows soalnya tidak ada window yang dibuka (dari mendapatkan daftar file handle yang dibuka suatu proses bagaimana ya caranya ? Sorry banyak pertanyaan.
user image
more 17 years ago

madi

contohnya?
user image
more 17 years ago

danieljun

Pernah lihat Process Explorer dari SysInternals ? http://www.sysinternals.com Kalau di View > Show Lower Pane lalu View > Lower Pane View > Handles akan terlihat semua handle yang di pegang oleh process tersebut. Pakai cara apa kita bisa extract semua file handle yang di buka oleh process yang bersangkutan? gitu lho.
user image
more 17 years ago

madi

oh itu tho mangsud sampeyan.... coba sampeyan coba produk dari Delphi-jed.org - JCL saya coba liat lom ada file handlenya yg ada dll yg di handle, mungkin versi 3.0 keatasnya ada mas...
more ...
  • Pages:
  • 1
  • 2
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com