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


狗護  2005-06-02 11:09:35  No: 15279  IP: 192.*.*.*

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

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

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

編集 削除
BG  2005-06-02 13:04:59  No: 15280  IP: 192.*.*.*

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

編集 削除
@Enum  2005-06-04 21:33:38  No: 15281  IP: 192.*.*.*

Thread使わないで

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

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

編集 削除
狗護  2005-06-06 10:31:19  No: 15282  IP: 192.*.*.*

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

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

編集 削除
deldel  2005-06-06 10:34:51  No: 15283  IP: 192.*.*.*

>>コピー中の表示

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

編集 削除
メラトニン  2005-06-06 10:39:54  No: 15284  IP: 192.*.*.*

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

編集 削除
狗護  2005-06-06 11:15:01  No: 15285  IP: 192.*.*.*

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

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

編集 削除
狗護  2005-06-06 11:23:29  No: 15286  IP: 192.*.*.*

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

編集 削除
メラトニン  2005-06-06 11:36:07  No: 15287  IP: 192.*.*.*

リンクの
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 11:36:16  No: 15288  IP: 192.*.*.*

ShellAPIってことは
SHFileOperationですか?

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


SHFileOperationを使っているとしたら

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

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


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

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

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


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

編集 削除
メラトニン  2005-06-06 11:37:39  No: 15289  IP: 192.*.*.*

本家
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-06 16:15:18  No: 15290  IP: 192.*.*.*

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-06 16:16:15  No: 15291  IP: 192.*.*.*

finally
 mStream.Free;
end;

でした;;

編集 削除