喫茶XRAYトップページ

[▲前のスレッド]

[7317] 開いたフォルダを閉じるには返信 削除
2014/3/10 (月) 08:36:08 pon
初めておじゃまします。教えて下さい。現在以下のコードで
フォルダを開いています。これはうまく言っています。

procedure TForm1.OpenFdmFolder;
{===============================================================================
保存先を開く
===============================================================================}
var
  Si: TStartupInfo;
  Pi: TProcessInformation;
  bo: boolean;
  Cmdline : string;
  name : string;
begin
  name := ExtractFilePath(Application.Exename) + '製品データ';
  if not DirectoryExists(name) then Mkdir(name);
  Cmdline := '"' + 'Explorer.exe' + '" "' + ExtractFilePath(Application.ExeName) + '製品データ';
  GetStartupInfo(Si);
  bo := CreateProcess(nil,
                    PChar(Cmdline),
                    nil,
                    nil,
                    False,
                    CREATE_DEFAULT_ERROR_MODE,
                    nil,
                    nil,
                    SI,
                    PI);

end;

逆にこれをコードで閉じるにはどうすればいいのでしょうか?
よろしくお願いいたいます。

[7320] Re:開いたフォルダを閉じるには返信 削除
2014/3/10 (月) 12:43:03 Mr.XRAY
▼ ponさん,こんちには.

> 逆にこれをコードで閉じるにはどうすればいいのでしょうか?
> よろしくお願いいたいます。


どんな方法でプログラムを起動したとしても,
そのプログラムのウィンドウハンドルの値を取得しないと操作できません.
ウィンドウのハンドルは,そのプログラム,アプリを起動する時に,
OS が自動で設定します.

また,同じアプリを複数起動した場合,各々違う値になります.
で,具体的にどうするかなのですが,
実は,いくつか方法があります.

(1) CreateProcess から起動する場合は,CreateProcess から情報を取得
(2) 起動中のアプリから探す

等なのですが,さて,どうしましょう.
エクスプローラでフォルダを表示してるわけですね.
すると,起動しているアプリはエクスプローラですね.
ということは,また他の方法もありますね.

ちょっと待ってくださいね.
どんな方法がいいのか考えてみます.


[7334] Re2:開いたフォルダを閉じるには返信 削除
2014/3/11 (火) 15:20:42 Mr.XRAY
▼ ponさん,お待たせしてしています.

> エクスプローラでフォルダを表示してるわけですね.

重要なことを忘れていました.

[945_エクスプローラのテスト]
http://mrxray.on.coocan.jp/Delphi/plSamples/945_ExplorerTest.htm

で,ShellExecuteEx とCreateProcess では,エクスプローラの表示は
できるか,エクスプローラの操作は,IE のオブジェクトを取得する必要が
ある,ということを,自分で書いていて忘れていました.

エクスプローラは特殊で,Windows のシェルが提供している機能です.
同一プロセス内で複数起動しています.
(設定により,異なるプロセスでの起動も可能です)

したがって,CreateComObject か TShell を使用した方が簡単だと思います.
とりあえず,上のリンクの記事を参考にしてください.
例えば,最初のサンプルで [エクスプローラを閉じる] ボタンのコードが
それに該当します.

個人的には,TShell(TShellWindows) を使用した方法がいいのではないかと思っています.


[7336] Re3:開いたフォルダを閉じるには返信 削除
2014/3/11 (火) 16:46:19 pon
▼ Mr.XRAYさん

> ▼ ponさん,お待たせしてしています.
> 例えば,最初のサンプルで [エクスプローラを閉じる] ボタンのコードが
> それに該当します.


 あれをそのままコピーしたんじゃダメですね。 もう少し考えてみます。


[7343] Re4:開いたフォルダを閉じるには返信 削除
2014/3/11 (火) 20:37:56 Mr.XRAY
▼ ponさん

>  あれをそのままコピーしたんじゃダメですね。 もう少し考えてみます。

何とも言えませんです.ハイ (^^;
私が,ネット上のコードを利用する時は,まず,そのままの状態で実行します.
それから,自分自身用に書き換えるとか,必要な部分を利用するようにしています.


[7362] サンプル[945_エクスプローラのテスト]返信 削除
2014/3/14 (金) 14:05:37 Mr.XRAY
> 何とも言えませんです.ハイ (^^;

念のために,追記しておきます.
945 のサンプルはオブジェクトインスペクタでの設定はしていないので,
コピペでも動作可能です.
ただし,確実にコンパイル可能なのは,ページ先頭に書いてある動作確認環境です.


[7363] Re:サンプル[945_エクスプローラのテスト]返信 削除
2014/3/14 (金) 14:06:55 Mr.XRAY
> ただし,確実にコンパイル可能なのは,ページ先頭の動作確認環境です.

ちなみに,Windows 7 U64(SP1) + Delphi 7 Pro でコンパイルすると,
下図の用に,一部,コンパイルに失敗します.
修正が必要です.

http://mrxray.on.coocan.jp/Delphi/plSamples/index.htm#04


[7364] PNativeIntとNativeInt返信 削除
2014/3/14 (金) 14:26:17 Mr.XRAY

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82