ファイル操作系のプログラムで への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2008/12/1 20:45:50
> VBファンなら必ずチェックする気がします。
揚げ足をとる気はありませんが、「必ず」というのは聊か大袈裟かと。(^^;


> それこそ公式資料が見当たらないのに、どこから仕入れているんだろうと思いました。
仕入先は人それぞれですが、一連の資料としてはまとまっておらず、あちこちに
情報が分散している場合もありますので、その分野に対してどこまで熱意を持って
調べられるか。そして日頃から、専門外の分野にまで網を広げているかどうかが
鍵となるでしょう。(って、何の回答にもなっていませんけれども)


で。文書化されていない情報の場合は、仕入先としては
 ・今は資料が無いだけで、一定時期(あるいは一部ユーザーのみ)には公開されていた。
  (例えば、パートナー契約企業のみに公開される資料などが存在します)
 ・Try & Error を繰り返して経験する。
  (レジストリを操作・監視して、動作の変化を調べるとか)
 ・内部情報を解析するなどして、それらしいところに中りを付ける。
  (Dependency Walker, Spy++, DDESpy, Regmon, APImon, Accessible Explorer など)
 ・Microsoft 内の当時の開発者や担当者、関係者などから仕様を直接聞く。
  (最近は blog で、内部仕様の一部が公開可能な範囲内で配信される場合も)
 ・他の人が仕入れた知識からの又聞き。
などがあるかと思います。


> Windowsのソースコードが公開されたとかされないとか、
公開されていますが、全ての範囲というわけでは無かったはず。
(確認しようとしたら、閲覧認証用の IC カードが期限切れだった…)


> 今回のパス情報とか公開にならないのかなあ、とか。
起動処理の基本は、ShellExecute(Ex) API にあります。(それに加えて、
シェル エクステンションや DDE が関わってくる場合もあります)

で。コマンドライン引数については、各アプリケーションに固有の設定であり、
統一された仕様は存在しません(引数を無視するアプリケーションも多いです)。
たとえばエクスプローラのコマンドライン引数を見ても、使用可能な引数は
Windows および エクスプローラ自身のバージョンによって異なります。


> 実は私も中高年向けのランチャーといって始めたのですが、
他者が作ったランチャーで、ソースコードが公開されている物を見ていくと、
いろいろと参考になるかも知れませんね。
たとえ、自分が知らない言語(人間語/コンピュータ語)で書かれたソースでも、
何をやっているかを推測する役には立つでしょうし。

たとえば昔、コマンドライン ランチャーが流行った時期のソフトで、こんなのとか。
http://www.momo-lab.net/inu/momomemo.html


> ネットワーク関連のみをピックアップしようかと考えました。
「ネットワーク関連」と一口に言っても、いろいろありますよ。(^^;

ネットワーク設定なら、最近の環境では、WMI を使う方法が使えます。
具体的には、Win32_NetworkAdapterConfiguration クラスなどが相当します。
(WMI を扱うなら、VB よりも PowerShell の方が便利ですけれどね)

あとは NETSH コマンドを使うのも手です。これなら、バッチファイルで十分。
http://technet2.microsoft.com/WindowsServer/ja/library/397d5a3d-87eb-49ce-b9f5-da58d000aa6d1041.mspx?mfr=true


> ちなみに私の環境はVISTAですが、バージョンによっても指定方法などはだいぶ異なるものでしょうか?
同じ部分もありますが、違っている所もあるのは確かですね。
これは手作業で変える場合の見た目の違いだけでなく、プログラム制御でも同様です。

たとえば Vista であれば、IPv6 系の設定項目がありますが、古い OS では、
IPv4 にしか対応していなかったりしますしね。

また上記 NETSH にしても、Win2000 では使えますが、NT4.0 では使えません。
WMI については、Vista では標準搭載ですが、Win95/98 では追加インストールが
必要になります(環境によって使用可能なクラス/メソッドさえも異なります)。

そのため処理内容によっては、OS のバージョンをチェックするようにして、
それぞれごとに異なるコードを記述しなければならないかも知れません。


> XP利用者の方が多いような噂話も聞き、以前のバージョンでも使える物を目指しております。
そのためには、動作検証用に Windows XP の端末が必須となりますね。
VirtualPC でも良いので、XP の環境を用意しておきましょう。
XP を持っている知人に動作検証をお願いするのも手です。

また XP は、「Service Pack 2 以降を適用したもの」と、それ以前の
「未適用/Service Pack 1 適用」とでも、動作面で違いがありますので、
できれば、複数バージョンの環境を用意できると良いですね。

さらに言えば、「開発環境」と「動作環境」は別にしておいた方が良いので、
可能であれば Vista も、Visual Studio を未インストールなまっさらな物を
用意しておく事が望ましいです。(個人だと、なかなかそこまで手が回りませんが)


> その昔はコマンドプロンプトの黒い画面上から打ち込んであらゆる操作をしたそうですが、
今でもコマンド プロントの存在は大きいですよ。たとえば Windows Server 2008 の
Server Core インストールでは、エクスプローラさえ用意されません。
http://www.microsoft.com/japan/windowsserver2008/technologies/server-core.mspx


> 例えばコントロールパネルだったら、それを開く指定方法など、
一連の回答にもありますように、コントロール パネルの各アイテムの実体は、
拡張子 cpl のファイル群です。最近は control コマンドからも呼び出せますね。
http://www.atmarkit.co.jp/fwin2k/win2ktips/585cplcmd/cplcmd.html

これら cpl は DLL の一種であり、古い環境においては、設定画面を開くためには
コマンドラインから RunDLL32.exe 経由で開く必要がありました。
http://support.microsoft.com/kb/164787/ja

最近の OS では *.cpl 単独でも実行できますが、それは cpl 拡張子に対して
『rundll32.exe shell32.dll,Control_RunDLLAsUser "%1",%*』
が実行されるよう、関連付けが行われているためです。

なお、「どのタブを開くか」などの設定をコマンドライン等から
操作できるかどうかは、それぞれの cpl にも依存しています。


> ネットワーク設定を親切にエスコートするプログラム。
Windows 98 の頃、メーカー製各社のパソコンでは、デスクトップ上に
プロバイダ各社の「我が社を使って接続するにはこれをダブルクリック!」な
アイコンがずらずらと並んでいて、辟易した思い出が…。


> 話の大小や中心がつかみにくかったかもしれません。
neptune さんの話と被りますが、ネットワーク設定といっても、その範囲は膨大です。
OS の設定だけでなく、突き詰めればハードウェアの設定まで必要な場合もあります。

自分以外が使うツールとなれば、環境も千差万別なので、まずは
「そもそも、何と何を設定すれば、ネットワークが使用可能となるのか」を
調べる事から始めてみてください。(まずは、手作業での設定方法の把握から…)
投稿者 リスナー  (学生) 投稿日時 2008/12/1 11:01:58
追加分ということで。

>>neptuneからもレスをもらっていたみたいで、

たいへん申し訳ありません。呼び捨てにするつもりはなかったんです。単に私がせっかちで。
neptuneさん、ごめんなさい。そしてアドバイスありがとうございます。
本当にどうかお気を悪くなさらないでくださいね。これからもアドバイスください。
こういう入力のミスがいちばんいけません。反省しますので。どうかよろしくお願いしますね。
投稿者 リスナー  (学生) 投稿日時 2008/12/1 10:58:12
neptuneからもレスをもらっていたみたいで、こちらも本当にありがとうございます。

>>なんか根源的なもの、原理的なものが判らないと前に進みにくい性質の人かな?

やっぱりそうなんでしょうね。自分ではおおざっぱに進んでいるつもりですが、
知りたいという気持ちが確かにありますし、その気持ちを優先してやるべきかもしれません。
ただ今回についてはパスやIDに始まりそこに終わっているんです。
そのついでとしてOSまで引っ張りだしてしまって。
パスまわりについての根源的な部分、とでも言うのでしょうか。

>>「ネットワーク設定」って自分で入力しなければならない
ところがあると思うんですがそれはどうするんでしょ?人のPCの設定に責任もてます? 

ルーターの番号か何かを入れるんでしたっけね。他にもありましたかね。とにかく入力、ありますね。
ある程度インターネットを始めようという明確な意思がある方からすると、
確かに自分のPC設定に対する責任も考えるんでしょうが、
やはり時代の流れとか周囲の勧めとかで、かなりゆるい感じでPCを買ったりネットを始める方も
いらっしゃると思うんです。

で、そういう方たちからすると、とにかく面倒はイヤっていうのが一番の思いだと思うんです。
そのため目論見としてはエスコートよりも自動的に設定してやるぐらいのプログラムのイメージです。
ぜんぶオレに任せろよ、みたいなイメージですかね。

もっとも電話線まわりの工事はどうしようもないと思うのですが。
私もそうですが、テレビまわりをやるにしても網戸の張り替えやるにしても、
人一倍に不器用な人っていると思うんです。
確かに中高年というくくりでネットに無知と括ったのはかなりいい加減だったかもしれませんが、
そういう深い意味はなくて、ネット世代でも分からないものを上の世代ならもっと分からないのが
自然なのではないかなあと。

ただ、およそご意見のとおり、今回の目的とプロセスが明確ではないですね。
大きな視点で見るならそれでいいとしても、パスだのIDだのOSだのとはじめてしまったので、
話の大小や中心がつかみにくかったかもしれません。
その点は上手にくみ取ってやってください。
投稿者 neptune  (社会人) 投稿日時 2008/12/1 08:18:18
こんにちは

>ありましたら忌憚ないご意見をお聞かせください。
との事ですので、ザックリ書くと
1.「接続先」で何を設定しているかの調査、理解
2.目的のソフトでは何をするのかの決定
3.それをそれぞれ個別に設定する方法の調査
4.それぞれの実現化
の手順になると思いますが、
当然、先ずは1でしょう。

感想を言わせてもらうと、私もターゲット世代ですが、
正直、手順を書いた紙のマニアルの方がありがたいです。
投稿者 リスナー  (学生) 投稿日時 2008/12/1 07:31:47
どうも皆さんこんばんは。11月も今日で終わり明日から今年最後の一か月ですね。

さて本題ですがレスが増えていましたね。

>>ただ、リスナーさんはこういった2次レベルの資料ではなく、公式資料のようなものを求めていらっしゃるのですよね?

そうですね。
本当にこういう資料ってそれこそ書籍とかにしてもらえたらVBファンなら必ずチェックする気がします。
とはいえ2次資料でも大助かりです。るきおさん、ありがとうございます。
私は検索の中で特殊フォルダというキーワードにぶつかったのですが、ああいうマニアックな情報って、
皆さん自分のホームページやブログに軽く載せてますけど、それこそ公式資料が見当たらないのに、
どこから仕入れているんだろうと思いました。

今回の件とは直接、関係ないかもしれませんが、よくWindowsのソースコードが
公開されたとかされないとか、言うじゃありませんか。
ああいう感じで、今回のパス情報とか公開にならないのかなあ、とか。

さて話が少しそれました。戻します。


>>どこまでが個別の仕様でどこからがWindowsの仕様なのかは私も明確に区別はできていません

なるほどそういうものなのですか。私は全部がWindowsなんだろうと思っていましたから、
個別の仕様があるというだけで「そういうものなのかぁ~」といった感じです。

私は初学者というよりVBプログラミングないしはプログラミング全体の雰囲気的なものが好きな、
そういう意味では雑学の1つとしてVBに触れているタイプで、単なる偶然ですが、
そのくせ難易度の高そうなものとか、マニアックな部分に興味が結びついてしまっているようでして、
それだけに掲示板での皆さんの情報についていけない部分も多いのですが、
それでも皆さんが知っているというだけで妙に安心でき、私も知っているような気分になれるのです。
そして皆さんでさえ知らないとか、場合によるという返事さえ私にとっては貴重な知識です。


>>私もわかりませんが、Windowsの開発チームでも一括操作は簡単には組み込めないと思います。
それは、「同じことをさせたい」という要求ではなく、「あるものにはあることを、別のあるものには別のあることをさせたい」という個別の要件だからです。

>>結局のところ今回の要件はなんなのでしょうか?もう少しはっきりその部分が見えないとこれ以上のことは説明できないです。
できれば、いくつか『具体的に』あげていただけると助かります。


まったくそのとおりだと思います。実は私も中高年向けのランチャーといって始めたのですが、
考えるほどに少しずつ変化があって、ネットワーク関連のみをピックアップしようかと考えました。

私は通販でPCを購入し初期設定からネット設定まで業者に頼んだ機械オンチでして、
そんな私からすると当時を思い出し、ネット設定は中高年層にとっても難しいだろうと。
現に私も知りませんし。ただこの中学ではそのへんが知らないのは問題にならないといったお話も、
確か最初の方であったと思うので、迷いなく参加できているわけなんです。
でもネットワーク関連って、設定とかよく分からないまま使っているのって何かひっかかるんです。 
それで今ネットワーク関連の書籍を読んでいるのですが進数のお話も最初の方にあって、
なかなか進んではいません。

メーカーや機材の種類などの問題もありますが、ネットワーク設定を親切にエスコートするプログラム。
そんなところです。詳しい部分はまだですが、とりあえずこんな情報から何かまだ指摘できる部分が
ありましたら忌憚ないご意見をお聞かせください。





投稿者 neptune  (社会人) 投稿日時 2008/12/1 07:11:03
こんにちは

なんか根源的なもの、原理的なものが判らないと前に進みにくい性質の人かな?

本当は、
・マシン語、又はアセンブリはどんなものか
 (表現を変えるとコンピュータとはどうやって動くものか)
・C言語などの低級といわれる言語で、その動かし方。
・Windowsの仕組み
などを簡単にでも勉強すると良いのですが、はっきり言ってどれをとってもそれは大変です。

幸いな事に、VBなどは非常にとっつきやすく、上記で書いたようなことは殆ど意識
しなくても良い言語なんです。殆どframeworkがやってくれるようになってます。
私もよく分かりませんが、たぶん初心者レベルではそれでいいと思います。

で、そこでなんですが、
どんなプログラムを作成したいかは大体こんなところですよね
>どうにかネットワーク設定をしてやれるランチャーのようなプログラムを完成させたいのです。
では、具体的にはその上で何がわからないのか
今のままでは漠然として、範囲が広すぎますからどうしても漠然としたアドバイスになってしまいます。
5W1Hを意識して書くと皆さんからもっと良いアドバイスをいただけると思います。

ところで今思ったんですが、「ネットワーク設定」って自分で入力しなければならない
ところがあると思うんですがそれはどうするんでしょ?人のPCの設定に責任もてます?
投稿者 るきお  (社会人) 投稿日時 2008/12/1 03:05:02
>他の方からKBの存在と呼びまわしを教えてもらったばかりなのですが、
>今回のパス(クラスID?)もそちらで見つけられたのでしょうか。
>私もサポートオンラインの検索をやってはいるのですが……。
Googleで検索しました。
最初のマイコンピューターを開く例で使用した"{20D04FE0-3AEA-1069-A2D8-08002B30309D}"という文字列はかなり特徴的ですので、これで検索すると関連した話題がたくさん出てきます。
http://www.google.co.jp/search?hl=ja&q=%22%7B20D04FE0-3AEA-1069-A2D8-08002B30309D%7D%22&lr=&aq=f&oq=

ただ、リスナーさんはこういった2次レベルの資料ではなく、公式資料のようなものを求めていらっしゃるのですよね?
そのような情報が公開されているのかは私もわかりません。見つけたら教えてほしいです…。
多少関連のあるKBでは以下を発見しました。
http://support.microsoft.com/kb/292504/ja

このあたりはVBだのCだのというプログラムの話ではなくて、Explorer.exeやControl.exeの仕様の話になります。どこまでが個別の仕様でどこからがWindowsの仕様なのかは私も明確に区別はできていません


>そういうものはWindowsの開発者以外、つまり私みたいな者でも作り出せるのものでしょうか。
これはケースバイケースとしかお答えできません。
できる部分もあればできない部分もあると思います。
でも、かなりすごいプログラマに同じことを聞かれてもやはり同じ回答をすると思います。

>とはい言っても、もしWindowsの開発者側が同じプログラムを作ろうとしたら、
>そのへんで迷うことはないのでしょうし、それこそウィンドウたちに一定の総括を与えることも
>できるのでしょうし、どうへんを踏み込んで勉強すれば、
私もわかりませんが、Windowsの開発チームでも一括操作は簡単には組み込めないと思います。
それは、「同じことをさせたい」という要求ではなく、「あるものにはあることを、別のあるものには別のあることをさせたい」という個別の要件だからです。

と、まずは書いておきますが、
結局のところ今回の要件はなんなのでしょうか?もう少しはっきりその部分が見えないとこれ以上のことは説明できないです。
できれば、いくつか『具体的に』あげていただけると助かります。
投稿者 リスナー  (学生) 投稿日時 2008/11/29 02:04:13
皆さんこんにちは。

るきおさんレスありがとうございます。

>>Process.Start("control", "NETCONNECTIONS")

さっそく試してみました。すると開きましたよ! すごい!
実際のところ表示されるウィンドウは少し違っていることは確かなのですがこれは感動しますね。

「接続先」をクリックすると、普段ファイルなどを保存するウィンドウなどとは
違った形のウィンドウが表示されます。

一方、教えてもらった上のコードで表示させると普段のフォルダウィンドウと同じ窓枠の中に、
「接続先」の内容が一般的なファイルと同じ要領で並んでいました。
もちろん表示方法を変えてみても、「接続先」をじかに選んだようなウィンドウや表示にはなりません。

よく分かりませんが、「接続先」によって表示されるウィンドウが一種のイメージのようなもので、
教えてもらったコードで表示されるウィンドウが本物なのかなあと。そんな印象を受けました。

ただこのウィンドウのプロパティを選んでも、ファイルのパスのようなものは表示されませんでした。
そこがちょっと普段のウィンドウやファイルとは違うところかなあと。
したがってウィンドウの中の項目を操作するとなるとまた検索するしかなさそうなのです。

他の方からKBの存在と呼びまわしを教えてもらったばかりなのですが、
今回のパス(クラスID?)もそちらで見つけられたのでしょうか。
私もサポートオンラインの検索をやってはいるのですが……。

>>だれかそういうものを作ってくれればいいのですが、開くところまではまだしも操作となるとどうしてもケースバイケースになってしまいます。

ちなみに、あくまでちなみに、なのですが、
そういうものはWindowsの開発者以外、つまり私みたいな者でも作り出せるのものでしょうか。
トンマな質問をしていることは重々わかっています。
しかし私が思い浮かぶものは実際にWindowsシステムに依存したものばかりで、
どうせなら、そうした総括のようなものを与えられたら、と今の段階でもつくづく感じました。

ここまでの段階で私が検索した結果、類似語や関連語としては、以下のようなものが出てきました。

・パス
・環境変数
・環境変数PATH
・ディレクトリ
・レジストリ
・特殊フォルダ

などなど、です。このスレッドで教えてもらった言葉ではクラスIDというのもありました。
頭の中で整理がつかず、

>>開くところまではまだしも操作となるとどうしてもケースバイケースになってしまいます。


とはい言っても、もしWindowsの開発者側が同じプログラムを作ろうとしたら、
そのへんで迷うことはないのでしょうし、それこそウィンドウたちに一定の総括を与えることも
できるのでしょうし、どうへんを踏み込んで勉強すれば、

>>だれかそういうものを作ってくれればいいのですが、

あたりを整理することができるのでしょう。
もちろんアドバイスどおり、ケースバイケースでやっていくに違いない私なのですが、
OSのどのあたりを理解すれば、あるていどは見えてくるものなのでしょう。
やはりメモリとかなんでしょうか。
しつこくなってしまいましたが、やはり気になってしまって……。




投稿者 るきお  (社会人) 投稿日時 2008/11/28 21:49:49
こんにちは。
Vistaは今手元にないのでためせませんが、「接続先」はこれで開けますか?
   
Process.Start("control""NETCONNECTIONS")


Windows APIを使っても.NETを使っても統一的な方法であらゆるフォルダを開いたり、操作することはできません。だれかそういうものを作ってくれればいいのですが、開くところまではまだしも操作となるとどうしてもケースバイケースになってしまいます。

>私の中でAPIは複数の処理を束ねた一つのプログラムといったイメージで、
>しかもWEBのAPIもあるそうで、今回のネットワーク設定関連の場合、どちらのAPIを使うべきか、
>など迷っているところです。
使うとすればWEBではなく普通のAPI、つまりWindowsAPIの方になります。
ただ、イメージとしては全く逆でAPIを束ねて1つのプログラムにするのです。
WindowsAPIはマウスだとクリックひとつで済む操作でもやたらといろいろ呼び出さなければならないことも多くかなり面倒です。
ランチャーであればVBがおすすめです。
ちなみにAPIとは単なるプログラムなどで使う「命令」程度の意味ですのでいろいろなシーンで使う言葉です。
今回話題に出ているAPIはWindowsAPIですね。

>それにAPIを使うにしても、やはりパスの指定方法のようなものと向き合うことになるのではないか。
はい。そうです。

>つまりウィンドウを大きなものから小さなものまで開ける。
>そしてウィンドウの中の項目を自由に選択する。
>これがパス指定の問題なくできるならAPIを学ぼうと思っています。
普通の発想では無理です。
でも、少し視点を変えて、マウスやキーボードを自動的に処理する(たとえばWindows+Eを勝手に押したことにする)などのように作れば少し汎用的になりそうです。
(…がこの道の方が険しいかもしれません)

個人的にはexlorer.exeやcontrol.exe、rundll.exeなどの情報を収集して
VBから制御する方針でいいと思います。
ただ、統一的な処理は無理で、制御したい対象を追加するたびにいろいろ調べたりしなければいけなくはなりますが、それが今回の話だと一般的な方法なのかなと思います。

>基礎もしっかりしていないのに発展的なことをやるのは愚かかもしれませんが、
>目的に合わせて必要な部分を学ぶというやり方で、どうにかネットワーク設定をしてやれるランチャーの
>ようなプログラムを完成させたいのです。
題材も面白いし、私はとてもいいと思います。






投稿者 リスナー  (学生) 投稿日時 2008/11/28 19:33:49
どうも皆さんおはようございます。

もしかしたら私の前のレスで、しばらくは書き込みナシかなあと思っていたのですが、
ふと閃くものがあって午前の用事をキャンセルしPCの前に戻ってきてしまった私です。
すると葉月さんからのレスがあったということで、やはりこの掲示板に助けられた格好です。

やあそれにしても葉月さんどうやって接続先の正体を見つけたんですか。
私はようやく「特殊フォルダ」なるものの存在に辿りついて、そいつで検索をあちこちかけてました。


>>Public Class Sample
  Public Shared Sub Main()
    System.Environment.GetFolderPath(Environment.SpecialFolder.System)
  End Sub
End Class

なんていうサンプルコードを見つけて、こいつでどうにかするんだろう、とか想像しているところでした。
しかし接続先はそもそも「特殊フォルダ」になるのかなど考えている所でした。
Windowsを普段の目的で使っている限りは当然のように細部まで簡単に表示させられるウィンドウ。
それをプログラムの上から表示させるのではまるで違うのですね。

>>どうすれば、実現できるか私見で答えます。
 接続先の項目は、複数の処理を合わせた感じです。自前で似たものを作ることは可能だと思いますが……

前に他の方のレスでちらと出ていたのですが、自前で作るというのはAPIというやつなのでしょうか。
今回で目指すプログラムの方向性としては、ランチャーではあるのだけれども、
単に目的のアプリを開くのではなくて、そこに至るまでの設定なども行えるもの、といったイメージです。
するとやはりプロセスとなるウィンドウを自由自在に操れるのがいいなあと。
コントロールパネルを開くにとどまらず、ネットワークの設定など、
Windowsが提供してくれている表示とは別により分かりやすい表示スイッチの並んだアプリケーション。
そんなものをイメージしています。
あるいは一定のところまで自動で設定を済ませてくれるようなプログラムです。
そこで「コントロールパネル」や「接続先」に言及したというわけなのです。

APIという技術でそれらが可能なものならと思い、以下の親切なサイト、

>>http://wisdom.sakura.ne.jp/system/winapi/win32/index.html

を見つけたのですが、項目を読んでいってもこれでできるという確証が得られず、
まだ踏み出せずにいる感じです。
私の中でAPIは複数の処理を束ねた一つのプログラムといったイメージで、
しかもWEBのAPIもあるそうで、今回のネットワーク設定関連の場合、どちらのAPIを使うべきか、
など迷っているところです。

それにAPIを使うにしても、やはりパスの指定方法のようなものと向き合うことになるのではないか。
ここが最も気になるところです。
APIを使うことで、そのあたりをスルーして目的を達成することは可能なのでしょうか。
つまりウィンドウを大きなものから小さなものまで開ける。
そしてウィンドウの中の項目を自由に選択する。
これがパス指定の問題なくできるならAPIを学ぼうと思っています。

基礎もしっかりしていないのに発展的なことをやるのは愚かかもしれませんが、
目的に合わせて必要な部分を学ぶというやり方で、どうにかネットワーク設定をしてやれるランチャーの
ようなプログラムを完成させたいのです。







投稿者 リスナー  (学生) 投稿日時 2008/11/28 19:04:08
どうも皆さんおはようございます。

もしかしたら私の前のレスで、しばらくは書き込みナシかなと思っていたのですが、
ふと閃くものがあってPCの前に戻ってきてしまった私です。
すると葉月さんからのレスがあったということで、や
投稿者 葉月  (社会人) 投稿日時 2008/11/28 10:47:46
>>>どうすれば「接続先」のウィンドウのパスを取得できるのかなと。
 ↓接続先の正体と思われます。
 C:\Windows\system32\van.dll
 DLLはダブルクリックなどで開いて使うものではありません。
 http://support.microsoft.com/default.aspx?scid=kb;ja;815065

 どうすれば、実現できるか私見で答えます。
 接続先の項目は、複数の処理を合わせた感じです。自前で似たものを作ることは可能だと思いますが……

 残念ながら初級向けではないと思います。
 ネットワークのある程度の理解が必要になります。
 http://msdn.microsoft.com/ja-jp/library/system.net%28VS.80%29.aspx
投稿者 (削除されました)  () 投稿日時 2008/11/28 10:41:18
(削除されました)
投稿者 リスナー  (学生) 投稿日時 2008/11/28 08:05:48
どうも皆さんこんばんは。
漠然とした質問にもかかわらず具体的なご回答ありがとうございます。
私のヤンヤと的を得ない要求だというのに本当に感謝、感謝です。

実はちょうどレジストリについて調べて、
レジストリエディターなるものを開いているところなのですが、
直前のレスを読みましたところ、
必ずしもここに全部のパス的なものが記されているのではないのですねえ。
しかもむやみにいじるべき場所でもない、といった事も参照しているサイトにはあります。
ちなみにレジストリについて参照しているのは以下のサイトです。

>>http://www.geocities.jp/anfiny/registry/index.html

それで話は戻るのですが、どうしても現実としてVBのプログラムで操作したいウインドウがあるのです。
自分はVISTA HOME BASIC 環境なのですが、
(余談ですがエアロという新機能はそのため未体験であります)
Windowsボタンを押すとメニューが開き、
右側の下から四つ目に、「接続先」なる項目があります。
こいつを開いて、具体的に操作しようと考えているのです。

単純にデスクトップにあるフォルダ内の画像を開くプログラムなら、
フォルダのプロパティからパスを取得しプログラムに書き込めば成立する話なのですが、
この「接続先」という項目を選んだ先のウィンドウにはプロパティが見当たらないのです。
右クリックしても小窓が登場しませんし、どうすればこのウィンドウのパスを取得できるのかなと。
結構この手の少し型の違ったウィンドウってあるんですね。
それはとにかく、どうすれば「接続先」のウィンドウのパスを取得できるのかなと。

かなり現実的に質問したつもりですが、環境の違いもあるので、うまく伝わったでしょうか。

投稿者 neptune  (社会人) 投稿日時 2008/11/28 07:18:09
こんにちは

>実際にはWindows上で普段何気なく使っているメニューを
>作成したVBアプリ上から操作していくというプログラムです。
>メニューソフトに代表されるシンプルなユーテリティーアプリを作ろうと考えています。
>(普段PCと距離を置かれているご高齢者用のメニューソフトのようなもの)
メニューソフトってのはランチャーソフトとは違うんですか?
http://freesoft-100.com/pasokon/launcher.html
ランチャーソフトは作った事はないのですが、そんなに難しくはないような気がします。

>こちらから何らかの働きかけを行えば、
>Windows上のある程度の細かな項目の起動パスまで表示してくれるような気がするのですが、
>これはだいぶ見込みが甘いのでしょうか。
調べてみたら判りますが、甘いでしょう。

>実際にはWindows上で普段何気なく使っているメニューを
>作成したVBアプリ上から操作していくというプログラムです。
これらの「その内側の項目のパスやID的なもの」を一気に知る方法はないです。と、思います。

例えば、Windowsのアクセサリ類とか、スタートメニューとかならエクスプローラで
見られますから簡単に取得は出来ますよね。・・ショートカットなど。
情報の格納場所が違いますからね。例えば、レジストリに書き込んでいるとは限りませんし。
取得したいソフトによるでしょう。
なので漠然と取得したいと言われても漠然とした答えにしかならんと思います。

ちなみに、もし、大概は、.net frameworkで処理できるとは思いますが、.net frameworkに
ない機能でWindowsに近い処理がしたければ、C,C++系の言語の参考資料しかなくなります
のでそのつもりで。

これ以上は識者のアドバイスをお待ち下さい。
投稿者 リスナー  (学生) 投稿日時 2008/11/28 02:36:12
どうも皆さんこんばんは。
そしてお返事ありがとうございます。


DOSのコマンドあたりでWindows上の各アプリケーションやその内側の項目のパスやID的なものを
一気に列挙させるような方法はやはりないのでしょうか。
そこで羅列している文字の意味が分からなくても、
そこから後はじっくり一個ずつ分析していけばよいと思うので、
今も現に動かしている、しかもこれだけ高度なOS・Windowsですから、
こちらから何らかの働きかけを行えば、
Windows上のある程度の細かな項目の起動パスまで表示してくれるような気がするのですが、
これはだいぶ見込みが甘いのでしょうか。
これができれば本当に効率が上がりますし、
またよりいっそうプログラムに興味が持てる気がするのですが。


ただ提供してくださった情報を試したところ確かに開きます。ちなみにマイコンピュータでしたが。
なんとか根気づよく検索をかけてみますが、一気に知る方法などご存じの方はぜひ教えてください。
単純にWindowsそのものについてももっと知らなければいけないのもあるのでしょうけれど。


投稿者 neptune  (社会人) 投稿日時 2008/11/28 01:24:18
こんにちは

 KB:Microsoft Knowledge Base を指します。MSの言語の話では時々情報源として出てくるので
   覚えておくほうが何かと便利
   
   私はMSDN Library for Visual Studio 2008 SP1 日本語版をインストールしているので
   それで調べましたが、
 
 MSのMSDNでも調べられます。
 
 サポート オンライン 
http://support.microsoft.com/search/?adv=1
コミュニティで作成された技術情報 
 機械翻訳版 技術情報 
 にチェックを入れます。
 
 「コントロール パネル 実行」で検索
 真ん中辺りに下記がヒット
 文書番号: 232536 - 最終更新日: 2004年12月27日 - リビジョン: 4.1
[HOWTO] 使用可能なコントロール パネル アプリケーションを列挙して実行する方法
 http://support.microsoft.com/kb/232536/ja
 
 ここからcpl拡張子がキーワードと当たりを付け、cpl拡張子を持った複数のファイル名を条件
 に再度検索。

>>Process.Start("explorer.exe", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")
ですが、以下は調べたわけでないので勘です。
多分後半の部分はクラスIDです。これはレジストリに書いてあるはずです。
検索してみて下さい。

ついでに書くと、いわゆる関連付けられたファイルを実行するにはAPIになりますが、
ShellExecute とか、ShellExecuteEx関数などもあります。
(私にはこちらの方がなじみがあるんですが、VB固有のコマンドがあるかどうかは知りません。)
こちらも興味があれば調べてみては如何?
投稿者 リスナー  (学生) 投稿日時 2008/11/27 23:41:01
お二人とも非常に早い段階でのレスありがとうございます。
ちょっと長くなってしまいます。

>>もう少ししぼっていただければ情報源はありますし、
紹介することもできるでしょう。

なるほどおっしゃるとおりです。
それでは必要に応じてこのスレッドに続けて書き込んでみたいと思います。

>>もちろん標準的な操作はVBでは簡単に使用できるようになっていますが、
コントロールパネルを開いたり、マイコンピューターを開くという動作は
あまり標準的ではないようです。

ネット検索をして徐々に感じ始めたことなのですが、
どうやらDOSコマンドでの基本ルールのようなものが現在にも受け継がれているのかなあと。
環境変数PATHというのでしょうか。
私は早速setと入力して全部を表示してみたのですがびっくりするぐらい分かりません。
そして見た感じ、コントロールパネルを意味しているような環境変数は見当たりませんでした。
これこそが、るきおさんのおっしゃっている>>あまり標準的ではないようです。>>の意味なのかなあと。
漠然とですが。まったく素人すぎて。どうにかアドバイスの内容について行けるようなりたいのですが。

それで今マイコンピュータのプロパティからも環境変数を開いたのですが、
コマンドプロンプトで表示させたよりも圧倒的に項目が少ないのがちょっと気になっています。

まとまりのない内容になっているのに、お付き合い、本当にありがとうございます。

それでneptuneさんの情報提供についてなのですが、

>>文書番号: 232536
[HOWTO] 使用可能なコントロール パネル アプリケーションを列挙して実行する方法
文書番号: 313808

本当に素人すぎて恥ずかしいのですが、このご紹介を読んでも、何をどうやったら良いのか、
私には分からないのです。文書番号とは何の文書の番号なのでしょうか。
何かのマニュアルなのでしょうか。
せっかくの情報だというのに申し訳ないです。

それで、例えばコントロールパネルを開いて、ネットワークに関する設定をするとしたら、
どの環境変数をパスとしてみればよいのでしょうか。
それとも自分で任意の環境変数を追加すればよいのでしょうか。
しかしそうすると自分のパソコンではそのパスで呼び出せても、
利用者の方のパソコンでは設定されていないので呼び出せないことになります。
このあたりの共通ルールの導き方はどうすればよいのでしょう。
OSのバージョンによってもやはり違うのでしょうし。

より具体的には、VISTAでは、コントロールパネルを開くと、アイコンを先頭に様々な項目があり、
ネットワークに関しては、上から順に、

>>ネットワークとインターネット
>>ネットワークの状態とタスクの表示
>>ファイルの共有と設定

このようにあり、私の理解では、この三行にも環境変数PATHがあるのかなと。
そして各行を選択すると、さらに多くの項目が出てきます。それらにもPAHTがあるのかなと。

マイクロソフトのホームページ資料のどこかに、VISTAならそれの、XPならそれの、
デフォルトとしての環境変数のようなものがあるのでしょうか?

もしかしたらneptuneさんも、そういったところから調べだしたのかなあと。
ところが私には>>KBにこんなのがありました>>で言うところのKBの意味が分からないというオチでして。

また、るきおさんの提示された、

>>Process.Start("explorer.exe", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")
 
の中にあるパスは何を読むと知ることができるのでしょうか。
Processは他のアプリケーションを開くためのクラスという理解で良いのですよね。
これは今から他のアプリをVBで操作しようとしている私としては、
非常に私に力を与えてくれる単語でありますが。

まとまりに欠けるかもしれませんが、デフォルトのパスを一通り知るような方法はないでしょうか。

先ほどの例だと、>>ネットワークとインターネット>>を選ぶと、
Windowsがそれを開いてくれるというからには、やはりその部分だけのパスがあるのかなあと。

自分はテレビショッピングで購入した初マイPCでして、VISTAそのものが付いていたのではなくて、
既にインストールされており、VISTAのパッケージや資料的な物が一緒に付いていたわけではないので、
もし、そういうものを見ることで、デフォルトの環境変数が分かるなら、知りたいと思いますし。

システムのプロパティを開いても、隅々までは表示されていないので、より詳しいパスを知るには、
どの資料を読めばよいのかなあと思いまして。




投稿者 neptune  (社会人) 投稿日時 2008/11/27 22:29:07
こんにちは

探せばあるもんですね。KBにこんなのがありました。
コントロールパネル関係に限りますが、
文書番号: 232536
[HOWTO] 使用可能なコントロール パネル アプリケーションを列挙して実行する方法
文書番号: 313808
Windows XP のコントロール パネル ファイルについて

vistaについては・・・やってみて下さい。ないのでわかりません。
投稿者 るきお  (社会人) 投稿日時 2008/11/27 22:15:16
>VBでたとえばコントロールパネルやマイコンピュータを開くなどの作業はできるのでしょうか。
>これら二つはあくまで一つの例でして、
>実際にはWindows上で普段何気なく使っているメニューを
>作成したVBアプリ上から操作していくというプログラムです。
簡単にできるものもあれば、できるとは思うが苦労が予想されるものもあります。

普段何気なく使っているWindowsのメニューなどの操作は、
プログラム上は1つの統一的な手法で実行できるものばかりではありません。
ですので、やりたいことによって苦労の具合が変わります。

そのため情報源も操作の種類によって異なり、
「Windows上で普段何気なく使っているメニュー」というくくりでは
探すのは難しいと思います。
もう少ししぼっていただければ情報源はありますし、
紹介することもできるでしょう。

もちろん標準的な操作はVBでは簡単に使用できるようになっていますが、
コントロールパネルを開いたり、マイコンピューターを開くという動作は
あまり標準的ではないようです。

たとえば、次のコードではマイコンピュータが開けます。
   
Process.Start("explorer.exe""::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")


外部のコンポーネントやWindows APIを使用しなければ実現できないものもあります。

こんな回答で参考になりますでしょうか?


投稿者 リスナー  (学生) 投稿日時 2008/11/27 21:58:24
どうも皆さんこんにちは。

VBでたとえばコントロールパネルやマイコンピュータを開くなどの作業はできるのでしょうか。
これら二つはあくまで一つの例でして、
実際にはWindows上で普段何気なく使っているメニューを
作成したVBアプリ上から操作していくというプログラムです。
メニューソフトに代表されるシンプルなユーテリティーアプリを作ろうと考えています。
(普段PCと距離を置かれているご高齢者用のメニューソフトのようなもの)

ちなみに私の環境はVISTAですが、バージョンによっても指定方法などはだいぶ異なるものでしょうか?
XP利用者の方が多いような噂話も聞き、以前のバージョンでも使える物を目指しております。
その昔はコマンドプロンプトの黒い画面上から打ち込んであらゆる操作をしたそうですが、
そういった操作に親しみがないので、例えばコントロールパネルだったら、それを開く指定方法など、
(パスの指定方法?という言い方で良いのでしょうか)
そういった基本ルールも含めて何か良い情報提供先をご存じでしたらアドバイスお願いします。

自分は飛ばし飛ばし虫食いな感じでこちらの情報を利用させてもらっているので、
もしかしたら私がまだ読んでいないだけで、順を追って読めばこちらでも用意されているのだとしたら、
管理人さんや他の利用者の人たち、お気を悪くしないでください。

自分では初級講座のファイル処理や操作のあたりを読めば分かるかなあと見当をつけてはいるのですが、
もし何かお気づきの点がございましたら、アドバイスお願いします。