FAQ 的な質問で申し訳ないです。うまく検索できなかったので・・・。
A:ユーザーのデスクトップに、アブリのショート・カット・アイコンを作る方法?。
B:ユーザーが任意に作成したそのアプリのショート・カット・アイコンの
ディレクトリ・フル・パスを知るには(どこから起動されたのか)?
関連 URL でも教えていただければ嬉しいです。よろしくお願いいたします。
>FAQ 的な質問で申し訳ないです。うまく検索できなかったので・・・。
どのような状態なのかはわかりませんが、ググッてみたらいくつか、または
結構ありますが、それでも不明なら、また質問してみて下さい。
# ググる(googleで検索すること)
今回の場合の例 ショートカット Delphi
A はなんとかなりそうですが、Bがなかな見つかりません。
ユーザーのPCにFindxxx かける。
ショートカットを見つけたら解析する。
自分のショートカットだったら記憶しておく。
自分のもの全部見つけたら、現在開いているフォルダを得る(その方法は不明)
そのフォルダのパスを得る。
・・こんな感じしか浮かびません。これではあまりに手間ですし、
「現在開いているフォルダ」を知る方法もよくわかりません。
B だけでもよろしくお願いします。
ここの過去ログに
https://www.petitmonte.com/bbs/answers?question_id=2069
なのがありましたが、どうですか。
それでも解決しなければ、また...
>自分のショートカットだったら記憶しておく。
これって、もしかしたら、自分でDelphiで開発したアプリをショートカット
(拡張子lnk)から起動した時に、元の起動パスを知りたいということでしょうか。
でしたら、以下のコードで取得できますが...
違うのかな?
procedure TForm1.FormCreate(Sender: TObject);
var
Str : String;
begin
Str:=ParamStr(0);
Label1.Caption:=Str;
end;
「現在開いてるフォルダ」の意味はわかりません。
デスクトップ上に、フォルダをいくつも開いている時もあります。
この時、どれが開いているフォルダなんでしょうか。
Mr.XRAY さん。ありがとうございます。
紹介ページのリンク先ページは何回か見ていました。
ただ他のことに興味があった時でしたので、結びつきませんでした。
あらためて、はじめてテストしてみましたら、「ショート・カット・アイコンの解析」
ですね。これはテストできました。
Str:=ParamStr(0); については、
Caption := Application.ExeName; と同じですね(?)
自分の居所そのものは簡単なんですけど、どこに自分への参照をしている
ショート・カット・アイコンをユーザが置いたのかが問題点です。
ショート・カットはファイル名も任意に変えられる可能性もありますし、
率としては低いでしょうが、全ドライブを調査スキャンする必要があります。
先に挙げたイメージ・フローは、もう少し簡単になりそうです。
開いているフォルダの列挙
そのうちからアイコンファイルを見つけては自分へのリンクかどうか解析
これでなんとかなるかも知れません。
やりたいことは、ショート・カット・アイコンのあるフォルダにある
ファイルの一括処理です。
たとえば、そのフォルダにテキスト・ファイルがあって、東京と言う地名を
大阪に一括で変えるとかです。
アプリの使用方法として、
「アイコンを処理したいフォルダに置いてください。
そこから起動すると、そのフォルダにある全テキストファイルを一度に
処理できます。」
このようなイメージです。
簡単には本体をそこへ置くと一番簡単なんですが、そう言う処理だと
いろいろな Ini だとかの管理がしにくいので、ショート・カットでやりたく思う
のです。
解析方法だけではちょっと辛いようですね、自分の思っていることの実現は。。
普通は、「処理したいフォルダの選択ダイアログを出す」で済ますことが多い
シーンなのでしょうけれど、上のイメージが簡単にできるならやってみたかったのです。
この質問の意図は上のようなことでしたので、解答していただいたもの、
つまり、ショート・カットの解析方法ではないのです。
それはバイナリ一致でもなんとかなるかなぁ・・という思いが頭にありました。
それは、上の問題が簡単にできるようなら「その後」調べてみようと思っていました。
そういうことで、上の問題の解を検索してもうまく見つけられない・・ということになりました。
よろしくお願いいたします。
まあ、ぶっちゃけ
ショートカットファイルを探すための
HDD全サーチなどは現実的でないので無理です。
って、言っておきます。
WSHのVBSファイルや別exeでも作って
もとのexeにParamStr(0)を引数として渡して起動したり
してあげたらどうでしょうか。
どのショートカットから起動されたか、
っていうのは、調べようがないのです。
ショートカット自体に起動引数とかつけてあげて細工すれば別ですけど。
>「アイコンを処理したいフォルダに置いてください。
>そこから起動すると、そのフォルダにある全テキストファイルを一度に
>処理できます。」
これは無理があると思います、アイコンが何個も作られた場合
対処するのが、難しいと思います。
Fusa さん、ありがとうございます。
イメージしていたのは、そんな API とかがあって、数行書いて取得できるのでは?
そのような感じの質問だったのですけど、ないのですね。
全サーチは非現実的ですね。できたにしても、そのやり方は避けるのが
賢明なように思います。
別exeで本体サーチするアイデアは思いつきませんでした。
それを少し検討してみます。
未解決なので、解決マークはなしにしておきます。
ありがとうございました。
>TS さん
>>そんな API とかがあって、数行書いて取得できるのでは?
このイメージがあっての質問でしたので・・。
わざわざカキコ、ありがとうございました。
できない事を「できない」っていうのは、少しいつもより+αで勇気の要ることなんですよね。
私も回答してても『もしかしたら俺の知らないやり方があるんでは?ここは知らないから黙っておこうかな』って、思うんですよ。
だから、誰も答えなくて、MailingListや掲示板でも回答が得られなくてそのまま放置される質問があったりするんですが、
でも、できないことをクヨクヨなやんでいても次にすすめなさそうなので、あえて、(多分)できない事をできない、って言い切ってみました。
>イメージしていたのは、そんな API とかがあって、数行書いて取得できるのでは?
>そのような感じの質問だったのですけど、ないのですね。
そうなんです。ないです。
やるんなら、ユーザーのコピー操作などではなく、自アプリ内で指定フォルダにショートカットファイルを作成する機能をつくり、そのショートカットの起動引数に細工するとか、、、、もやり方としてなくはないでしょうが、
それも実装が迂遠だと思います。
>iniだとかの管理が嫌
とのことなので、レジストリなども検討してみるといいかもしれませんね。
どうやってレスしようかと悩んでいたら....
既にレスがありますが。
(1)あるフォルダにあるアプリのショートカットがある。
このショートカットはユーザが勝手に任意の場所に作ってしまう。
(2)このショートカットを起動すると、そのフォルダ内のファイルにある操作
を行う。
というアプリですね。
でも、そのフォルダは、ユーザが開くことになりますよね。
そのアプリのショートカットを起動するためには...
どうやって開くんでしょう。
どうせ、開くんでしたらアプリから開いて、フォルダを指定してもらう
方がいいような気がします。これなら動作が確実です。
操作をしたいフォルダ内にやたら、アプリのショートカットを作ってしまう
というのは考えさせられますが、これは、アプリ開発者のポリシーにも関係
しますので、他人がとやかく言う問題ではないとは思いますが。
タバスコ
>Fusaさん。
>できない事を「できない」っていうのは、少しいつもより+αで勇気の要ることなんですよね。
そうでしょうね。未公開のAPIがあったりしたら・・。
でもこのぐらいのこと、APIがあっても良さそうな気がします。直接のAPIがないにしても
簡単にわかる方法があるなら・・そう思っての質問でした。
>>iniだとかの管理が嫌
>とのことなので、レジストリなども検討してみるといいかもしれませんね
レジストリにしたくないというのもポイントにありました。
簡単に書きましたがそれ以外に、変換候補の一覧ファイルとか、ヘルプとか、
関連dllとか、作業履歴とか、いろん点で本体の場所は固定してあるほうが
応用も利いて、いいと思っています。
>Mr.XRAY さん。
>どうせ、開くんでしたらアプリから開いて、フォルダを指定してもらう
>方がいいような気がします。これなら動作が確実です。
当方、それが煩わしく感じておりまして、その操作を避けたいがための
質問でした。
>操作をしたいフォルダ内にやたら、アプリのショートカットを作ってしまう
>というのは考えさせられますが、これは、アプリ開発者のポリシーにも関係
>しますので、他人がとやかく言う問題ではないとは思いますが。
やたら…は当方も考え物だと思います。いつもはデスクトップとかに置いておいて、
使う時にさっと移動させてそのままエンター…を想定していました。
コピーなら、ショートカット選択、コピー、該当ファルダに貼り付け、実行、
「ショートカット(Ctrl+Del)削除」ということになります。さくっと使ってさくっと終わる、
そんなイージー・オペレーションをイメージしていました。
自分の配置したフォルダはデイクトップのどの辺にあるか、すぐに把握できます。
左上はシステム関係、左下は仕事関係、右上は、最近の用途、左下は仮置き場等々…。
「フォルダ選択ダイアログでは、そのイメージが阻害されて、不愉快に感じております。」
…これが質問の隠れた背景です。これは最初の質問で、「その問題は〜こうこうです」
または、「それはできないでしょう」とのやりとりだけで済む話なので書きませんでした。
意図の伝達という点ではいいのかも知れませんが、Q&Aは意図より
「直接の疑問点とその解決」と、ドライに進むほうがいいと思うのです。
ポリシーや感情、普段の操作への言及は二次的なことかと思っていますので…。
以上、未解決としておきますが、これ以上のカキコは不要です。
一応、これで締めたいと思います。
もし、ほかにスマートにできる方法があれば宜しくお願いいたします。
ありがとうございました。
Shift + Del ですね。
>もし、ほかにスマートにできる方法があれば宜しくお願いいたします。
(1)右クリックメニューを活用する方法
・エクスプローラの右クリックメニューに、アプリ用のメニューを追加する。
・エクスプローラの右クリックメニューの「送る」メニューにアプリへのショート
カットを追加する。
(2)簡単な代替案
・デスクトップのショートカットに、対象のフォルダをD&Dする。
何れの場合も、FormCreate時のParamStr(1)で、対象のフォルダ等を取得することが
できるはずです。
最後に一言。余計なお世話ですが。
>A:ユーザーのデスクトップに、アブリのショート・カット・アイコンを作る方法?。
>B:ユーザーが任意に作成したそのアプリのショート・カット・アイコンの
>ディレクトリ・フル・パスを知るには(どこから起動されたのか)?
「直接の疑問点」が曖昧だったために、「意図」にまで言及する結果となったのでは
ありませんか?
>…これが質問の隠れた背景です。これは最初の質問で、「その問題は〜こうこうです」
>または、「それはできないでしょう」とのやりとりだけで済む話なので書きませんでした。
>意図の伝達という点ではいいのかも知れませんが、Q&Aは意図より
>「直接の疑問点とその解決」と、ドライに進むほうがいいと思うのです。
>ポリシーや感情、普段の操作への言及は二次的なことかと思っていますので…。
とまで言うのは、質問の意図を汲み取ろうと、貴重な時間を割いて回答して下さった方々に
対して無礼過ぎませんか?
>Chouxさん
アイデア、ありがとうございます。
(1)は、ヒントはありがたく頂戴させていただきますが、前述しましたように、
エクスプローラそのものもイメージ阻害要因が強いと感じておりますので、当方の作るアプリに
積極的に取り入れたい感じにはあまりなれないですね…。
(2)の案があるのは承知しておりました。実際その方法でいくつか作っております。ただ今回の場合、
なんとかアイコンのパスを知る方法はないのか・・・が主題となっておりまして、そのいい解を求めています。
どちらも、アイデア、ヒントの提供には感謝いたします。
>「直接の疑問点」が曖昧だったために、「意図」にまで言及する結果となったのでは
>ありませんか?
当初、曖昧とは思えずそう書いてしまいました。「自分を起動するための
ショートカットは、ユーザが任意に配置する訳ですが、どこに配置したのか、
その配置した場所のフルパスを簡単に知る方法があれば伝授してほしい…」とすると、
多少伝わっていたかも知れませんね。
>とまで言うのは、質問の意図を汲み取ろうと、貴重な時間を割いて回答して下さった方々に
対して無礼過ぎませんか?
精神が未成熟なゆえ勢いで書いてしまいました。お許しください。当方の不徳な一面を指摘していただいて、一つ成長できました。ただ、ひとつ、回答者の立場について、自分のスタンスとの違いを感じざるをえませんでした。と申しますのは、当方も別の掲示板で回答者として活動しておりますが、「貴重な時間を割く」のは、「回答者として答えることが好き」なためですので、その質問のために自分の時間を犠牲にしたとの感触はありません。たとえばボランティアから援助を受ける立場にしても、そのような思いを抱きながら援助されているのかと・・・と想像すると、気が重くなる、負担に感じる、負い目を感じることを無意識的に強いることにならないでしょうか? 当方ももう一度そのへん考えてみたいと思います。
ただ、この話題は、ここのボードでは議論を進めるのは適切でないと思いまのでこのぐらいでとどめておきたいと思います。
全然無礼には思わないけど....
会話が進んでいくなかで、
「意図」にまで言及する必要性が高まったタイミングがあって
それにあわせて、書き込んでいるから
とてもいい会話の流れだと思いますよ。
最初から全ての状況を詳しく書いてから
質問しなきゃいけないとすると、
質問者の労力がかかりすぎるんじゃないかなぁ。
> >「直接の疑問点とその解決」と、ドライに進むほうがいいと思うのです。
> >ポリシーや感情、普段の操作への言及は二次的なことかと思っていますので…。
> とまで言うのは、質問の意図を汲み取ろうと、貴重な時間を割いて回答して下さった方々に
> 対して無礼過ぎませんか?
お互い、楽しければ、別にどっちでもいいと思うんですが....
Chouxさんの代替案の(1)も(2)もどちらも、私もよく使いますし
世間のよく使われるアプリケーションも、そんな実装になっています。
使いやすい操作性の追求・工夫、がんばってくださいね。
あ、
>ただ、この話題は、ここのボードでは議論を進めるのは適切でないと思いまのでこのぐらいでとどめておきたいと思います。
同意ですが、書いちゃいました....
ま、同じような疑問を持った人が何ヵ月後か何年後かにこの書き込みをみて
「ああ、普通の手段じゃできないんだー」と
気がつくこともあるかと思いますので、有意義な会話ができたんじゃないですかね。
>Fusaさん
放置しておくのも気持ちが落ち着きませんので、一応スレ主として簡単にレスしいおきたいと思います。
>全然無礼には思わないけど....
ありがとうございます。人の感じ方は千差万別ですから、いろんな感じ方があるでしょうね。いろいろ思うことありますが、「相性」の要素は大きそうですね。無礼と感じる人がいる、それは、どこか自分に至らなさがあるからと、そう思うことで、成長させていただけるのかも知れません。隣の人の声は天の声...です。
>最初から全ての状況を詳しく書いてから
>質問しなきゃいけないとすると、
>質問者の労力がかかりすぎるんじゃないかなぁ。
同感ですね。今回の場合、APIがもし存在するなら、
UserFolder := GetShortCutIconPath(hwnd, 0, nil); // こんな感じでどうでしょう?
...このようになるかと予想しての質問でしたからね。また、「このページでどう?」みたいな感じでやり取りが進むかと思いながらの質問でもありましたのでね...そんなにこぢちゃごちゃ書く必要もなかろう...な感じでしたし...。
>気がつくこともあるかと思いますので、有意義な会話ができたんじゃないですかね。
「できなさそうだ...」これも一つの情報ですね。検索してみてこのページを発見できたなら、「ああそんなんだ...」と思えますからね...。それで一つの知見を得られれば、このベージも無駄ではないでしょうね。
IconのWorkPathを基準に、動作するようにアプリケーションを
構成したらどうでしょう。
起動の引き金となったショートカットを逆探知する方法は、ありません。
(少なくとも私は知らない)
WorkPathが空な時、警告ダイアログでも出せばいいと思います。
「WorkPathが未指定です。」みたいな(汗)
WorkPath(作業フォルダ)は、ショートカットの上でポップアップメニュのプロパティで設定できます。
アプリケーション側は、GetCurrentDir でそのフォルダを取得できます。
WorkPathが空かどうかは、
lowercase(IncludeTrailingBackSlash(ExtractFileExt(Applicatioin.ExeName))) = lowercase( IncludeTrailingBackSlash(GetCurrentDir))
で判断できると思います。
(アプリケーションと同じフォルダにショートカットがある場合は、判別できませんが)
以上
すみません逆でした。
作業フォルダ(workpath)が空の時、
呼び出しもとのショートカットのディレクトリを
GetCurrentDirで取得できます。
通常、ドラッグ&ドロップなどでショートカットを作成した場合は、
WorkPathは、そのアプリケーションのディレクトリになっていますね。
ので、「WorkPathを空にしてください」という
謎な警告ダイアログが必要になりますね・・。
foreverさん
ヒント、ありがとうございます。
>作業フォルダ(workpath)が空の時、
>呼び出しもとのショートカットのディレクトリを
>GetCurrentDirで取得できます。
これは大きなヒントですね。そのような専用アイコンをアプリで作る仕組みにすると、
可能性は出てくるかも知れませんね。これまでの経緯から、ほぼこれで解決な感じです。
実装はいつになるか未定ですので、その返答は難しそうですが、当初の、
質問に対する方法、つまり、答えが分かれば、それで解決....ですので、
このアドバイスにて、解決とさせていただきたく思います。
このヒントを戴けた事、恭悦至極です。
ありがとうございました。m(_._)m
ツイート | ![]() |