バックグラウンドで動かすには?


狗護  2005-06-02 20:09:35  No: 15279

一切表に実行画面を出さずにバックグラウンドでの処理なんですけれども・・・
「スレッドを使う」的な事まではわかったのですが、詳細がつかめませんでした

●バックグラウンドでファイルをコピーする
●バックグラウンドで他のアプリケーションを起動する

はどのように記述したらいいのでしょうか?
わかりにくい説明ですが、よろしくお願いします


BG  2005-06-02 22:04:59  No: 15280

とりあえずTThreadの使い方は分かっているのでしょうか?
簡単に説明できるものではありませんが、それほど難しいものでもありません。とりあえず使い方はWeb上に色々あるので学んでください。
その後、TThread内でファイルのコピーやアプリの実行コードを書いてみては如何でしょうか?
色々Threadを扱う上で注意することはありますが、先ずは動かしてみることからはじめてみてはどうでしょうか?


@Enum  2005-06-05 06:33:38  No: 15281

Thread使わないで

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.ShowMainForm := False;
 WinExec('notepad.exe', sw_Show);
end;

じゃダメですか?  ↑ の処理ならプロジェクトファイルのみで出来ますけど。


狗護  2005-06-06 19:31:19  No: 15282

BGさん
@Enumさん
ありがとうございます。

両方とも試してみたのですが、やはりファイル転送時にコピー中の表示がでてしまいました。
このコピー中のダイアログを消す事はできないのでしょうか?


deldel  2005-06-06 19:34:51  No: 15283

>>コピー中の表示

というのは、どういうものでしょうか?


メラトニン  2005-06-06 19:39:54  No: 15284

うーん、どうもタイトルやThreadとは別問題の事で悩んでいるみたいですね。
やりたい動作と書いたコードを見ないとなんともいえませんが、
「コピー中のダイアログ」と言ったところからShellAPIを使っているのでしょう。ダイアログを表示/非表示はパラメータで切り替えられます。
チェックしてみてください。


狗護  2005-06-06 20:15:01  No: 15285

>deldelさん
えっと、良い画像がなかったので引用なのですが
http://allabout.co.jp/computer/lan/closeup/CU20020720A/hd2.jpg
↑このコピー画面の事です

>メラトニンさん
ShellAPI使ってますが・・・パラメータですか


狗護  2005-06-06 20:23:29  No: 15286

>メラトニンさん
コピーのソースは以下のモノを参考にしています
http://www.geocities.co.jp/SiliconValley-SanJose/1427/delphifaq.html#ファイルをコピー・移動・削除する


メラトニン  2005-06-06 20:36:07  No: 15287

リンクの
fFlags := FOF_FILESONLY or FOF_ALLOWUNDO;
って所にFOF_SILENTを追加します
fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or FOF_SILENT;

googleでトップに引っかかったリンクを示しておきます
http://yokohama.cool.ne.jp/chokuto/urawaza/struct/SHFILEOPSTRUCT.html

理解に余力があればTSHFileOpStructのパラメータは全て指定することをオススメします。


Fusa  2005-06-06 20:36:16  No: 15288

ShellAPIってことは
SHFileOperationですか?

みなさんは遠回しに「コードを晒せ」
って言っているんじゃないかな。

SHFileOperationを使っているとしたら

TSHFileOpStruct.fFlags
  FOF_ALLOWUNDO //ゴミ箱にファイルを移動 
  FOF_NOCONFIRMATION //すべての質問をYesと答える。 
  FOF_NOCONFIRMMKDIR //ディレクトリを作成するかどうかを聞かない。 
  FOF_SILENT //ダイアログを表示しない
  FOF_SIMPLEPROGRESS 
  //ダイアログボックスは表示するが、ファイル名は表示しない。 

というオプション指定ができたと思うので
FOF_SILENTを
使ってみてください。

元々のバックグラウンドで動かすにはってやつですが、
スレッドを使うのも正攻法とは思いますが

テキストで"ファイルコピーするための"
WSHファイルやBATファイルを作成して
それを起動かける

という方法もあるんじゃないでしょうか。

がんばって勉強してみてください。


メラトニン  2005-06-06 20:37:39  No: 15289

本家
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shfileoperation.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/shfileopstruct.asp


@Enum  2005-06-07 01:15:18  No: 15290

begin
 Windows.CopyFile('c:\windows\system32\calc.exe', 'c:\dentaku.exe', True);
end;

var
 mStream: TMemoryStream;
begin
 mStream := TMemoryStream.Create;
  try
   mStream.LoadFromFile('c:\windows\system32\calc.exe');
   mStream.SaveToFile('c:\dentaku.exe');
  finally
   mStream.Free;
end;

でやってみるのはどうでしょう


@Enum  2005-06-07 01:16:15  No: 15291

finally
 mStream.Free;
end;

でした;;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加