DOBON.NET DOBON.NETプログラミング掲示板過去ログ

リストボックスからパスを取得してファイルを開く

環境/言語:[WinXP/VC#2005ExpressEdition ]
分類:[.NET]

2007/11/10(Sat) 11:29:14 編集(投稿者)

はじめまして。ぽぽと申します。
最近VC#2005でプログラミングをはじめたのですが、以下の事がわからなく質問させていただきました。


リストボックスに複数のファイルをドロップしフルパスを取得しているのですが、そのパスからファイルを開く方法がわかりません。

リストボックスにファイルをドロップ

ボタンをクリック

リストボックス内にドロップしたファイルを順番に開く

とういう処理をしたいのです。


プログラミング初心者なので、説明が不足しているかもしれませんが、どなたか回答のほど宜しくお願いします。
■No20929に返信(ぽぽさんの記事)

土曜出勤中の休憩時間に入ったので、ちょっとばかし質問させてください。

> リストボックスに複数のファイルをドロップしフルパスを取得しているのですが、そのパスからファイルを開く方法がわかりません。

何のファイルをどのように開きたいですか?

プログラム内部で読み込む為にテキストファイルを開くのですか?

それとも、音楽ファイルはユーザーがいつも聞いてる音楽ソフトで
開いてみたり、
HTMLファイルはブラウザーで開いてみたりという事をしたいのですか?

上記によって大きく処理が違います。

内部でテキストファイルを開くだけであれば、
こちらのHPのサンプルにあるはずですし、
拡張子などに関連付けされたソフトでひらくとなると、
確かAPIでそんなのがあったような気もしますし。
(もっと簡単な方法があったようなきもしますが・・・)
2007/11/11(Sun) 23:45:31 編集(投稿者)

返信遅くなってすみません。

>何のファイルをどのように開きたいですか?

AUTO CAD LTのファイルを開きスクリプを実行し閉じる

という処理を1枚ずつ行いたいのです。
この処理を行う事は可能でしょうか?
■No20931に返信(ぽぽさんの記事)
1件単位でファイルを取得するのはできますが、
その後のAUTO CAD LTのファイルを開くどうこうについては、
私がAUTO CAD LTを使った事もなく知らないのでなんともというところです。

> AUTO CAD LTのファイルを開きスクリプを実行し閉じる

ところでAUTO CAD LTのプログラムファイルにコマンドラインから
対象ファイルとスクリプトファイル渡すような事はできないのですか?
>ところでAUTO CAD LTのプログラムファイルにコマンドラインから
>対象ファイルとスクリプトファイル渡すような事はできないのですか?

できるのですが、連続処理ができないです。
なんとか連続で処理をしたいと思っているのですが・・・
■No20937に返信(ぽぽさんの記事)
> できるのですが、連続処理ができないです。
> なんとか連続で処理をしたいと思っているのですが・・・

ファイルを開いて、スクリプト処理を流した後、開いたファイルを閉じる、
というよりも起動しているAUTO CAD LTを、指定したスクリプト実行後に
外から終了させて、繰り返しファイルリスト全てに対して処理をするという
事ですか?

ぱっと思いつくのでSendMessageで、対象のAUTO CAD LTを終了するメッセージを
投げてやるとかが思いつきました。
あとは、終了後に再度同じようにスクリプトを流していくと。

ただ、コマンドラインで実行したAUTO CAD LTのWindowハンドルは取得する
必要がありますが、起動しているプログラムを、プログラム名称で探せるので
あれば、そうやって探してもいいですが、複数の同一プログラム名が
あるのであれば、それを取得する方法は、私は判りません。

たしか、コマンドラインで流す際に開いたプログラムのHWNDを取得する方法が
あったような気がするので、
ここらへんはどなたか詳しい方がいれば、ハンドルの取得方法などを
聞いてみるのがよろしいかと。

あとは、スクリプトが流れ終わったかを知る方法をどうすればいいのかですが、
これについては、AUTO CAD LTのスクリプト完了時の挙動で完了が取れるものを
監視するしかないですが、何をもって完了と判断するかは、調査するしか
無いと思われます。
>ファイルを開いて、スクリプト処理を流した後、開いたファイルを閉じる、
>というよりも起動しているAUTO CAD LTを、指定したスクリプト実行後に
>外から終了させて、繰り返しファイルリスト全てに対して処理をするという
>事ですか?

ファイルを開いて、スクリプト処理を流した後に、開いたファイルを閉じるであってます。
それをファイルリスト全てに処理をしたいのです。
説明下手ですみません。

もうすこしプログラムの基礎自体を勉強しながら色々試して見ますね。
■No20940に返信(ぽぽさんの記事)
> ファイルを開いて、スクリプト処理を流した後に、開いたファイルを閉じるであってます。
> それをファイルリスト全てに処理をしたいのです。
> 説明下手ですみません。

申し訳ありません、自分も説明が下手で上手く伝わってなさそうです。

ファイルリストを作成する。

ファイル1つに対してCADソフトにスクリプトファイルとファイル1つを
コマンドラインで引き渡す。

CADソフトが立ち上がって、処理を始める。

スクリプトの処理が終了する(CADソフト立ち上がりっぱなし)

CADソフトを落として、新規にファイルをコマンドラインで引き渡す。
(ここで、つまってると思ったのですが、違いますか?)

それともCADソフト立ち上がらないで、スクリプト処理はコンソールが
立ち上がって、行ったりしてたりするんですか?

いまいちCADソフトがどうやってスクリプトの処理をしているかが
想像できないので、違っていたらすいません。
CADソフトを立ち上げて処理を始めるというのができないんです^^;

というか、CADソフトは立ち上がるんですがファイルが開けない状態です。
どういう処理をして、リストボックス内に取得したパスからファイルを開くのかが全くわからないのです。
> というか、CADソフトは立ち上がるんですがファイルが開けない状態です。

そもそも、そのソフトにファイル名を渡したりバックグラウンドでスクリプトを実行するというインターフェースは存在するのでしょうか?
#つまり、GUI(ユーザーの操作)ではなく他のプログラムからの操作
それがわからないことには「こうすれば」ということが言えません。

・エクスプローラでファイルを「送る」メニューでソフトのショートカットへ送るとそのファイルは開きますか?
・プログラミング用のCOMライブラリなどは提供されてはいませんか?
■No20946に返信(ぽぽさんの記事)
リストボックスからファイル名を取得するのは、こんな感じでいけませんか?

if (listBox1.Items.Count == 0)
return;

foreach(string fileName in listBox1.Items)
{
Console.WriteLine(fileName);
}

あとは、CADソフトに処理を投げる為のコマンドラインのパラメータが
あっているかを確認をする必要があります。

実際に手で1ファイルでいいので、コマンドラインからCADソフトに
投げているパラメータを指定して実行してみて下さい。

その結果が、問題なく意図した処理をしているかを。

手入力でコマンドラインから引渡したにもかかわらず、
意図した処理が動かない場合は、以下の事を確認してみてください。

パラメータがあっているか。
ファイルが読み取り専用になってたりしないか。
ファイルへのアクセス権があるか。
指定したファイルが、スクリプトを流すのではなく、普通に開けるか。

などなどです。
■No20937に返信(ぽぽさんの記事)

追記です。
まどか様がおっしゃっている通り、そもそもCADソフト側に
そういったインターフェースが用意されていなければ、
どうにもなりません。

とりあえず、前に質問した、以下の文章が、出来るという事での
回答なので、これ自体が出来ない場合は、なんともならないかもしれません。
最悪自分で判らなければCADソフトの販売元に問い合わせて、
コマンドラインのパラメータでこんなのありますか?と聞いてみる必要が
あるかもしれません。

> >ところでAUTO CAD LTのプログラムファイルにコマンドラインから
> >対象ファイルとスクリプトファイル渡すような事はできないのですか?
>
> できるのですが、連続処理ができないです。
> なんとか連続で処理をしたいと思っているのですが・・・
>
>・エクスプローラでファイルを「送る」メニューでソフトのショートカットへ送る>とそのファイルは開きますか?
>・プログラミング用のCOMライブラリなどは提供されてはいませんか?

両方YESです。

>じゅでさん

できました!!

ありがとうございました。

じゅでさん、まどかさんありがとうございました。

スクリプトを実行するというのはまだ途中ですが、できるというのがわかっただけでも大分進歩しました。

またなにかわからなくなり、どうしようもなくなったら質問させていただくと思いますが、その時は宜しくお願いします。

DOBON.NET | プログラミング道 | プログラミング掲示板