レジストリ

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
メッセージ
作成者
GTR

#16 投稿記事 by GTR »

ヘルプで調べてみましたが、
GetCommandLine関数
コマンドライン文字列を取得します。

--------------------------------------------------------------------------------
定義
Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" ( ) As BytePtr

戻り値

コマンドライン文字列が格納されているバッファへのポインタが返ります。

環境情報

インクルード ファイル: api_system.sbp 内で定義済み
DLLファイル: kernel32.dll
となっていましたが、この定義だけでいいのでしょうか?
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

#17 投稿記事 by hira »

GetCommandLine() の定義ははじめからされています。そのため自前での定義は必要ありません。
手っ取り早くやろうと思えば、文字列変数に MakeStr(GetCommandLine()) を代入し、InStr() を駆使して目的のファイル名を取り出すという方法が考えられます。
※難しいですが、戻り値がBytePtrなのを生かしてポインタで解決する方法もあります
後は、取得した名前のファイルを開いて処理すればいいです。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#18 投稿記事 by イグトランス »

PathGetArgsという関数を使えば簡単に自分自身の部分を除いた文字列が得られます。

コード: 全て選択

Declare Function PathGetArgs Lib "shlwapi" Alias "PathGetArgsA" (psz As BytePtr) As BytePtr

Dim pArg As *Byte
pArg = PathGetArgs(GetCommandLine())
MessageBox(0, pArg, "", MB_OK)
ただしWin 95/NT4ではIE4以上が必要になりますが。
GTR

#19 投稿記事 by GTR »

>文字列変数に MakeStr(GetCommandLine()) を代入し、InStr() を駆使して目的のファイル名を取り出すという方法
とは、どういう方法ですか?手っ取り早く考えてみようとするのですが、なかなかできません。
C1000

#20 投稿記事 by C1000 »

このような方法のことだと思います。

コード: 全て選択

Dim buffer As String
Dim hTop As Long
Dim hEnd As Long

buffer=GetCommandLine()
MessageBox(0,buffer,"コマンドライン引数",MB_OK)
hTop=InStr(2,buffer,Ex"\q")-2
MessageBox(0,Mid$(buffer,2,hTop),"自己ファイル名",MB_OK)

hTop=InStr(hTop,buffer,Ex"\q")+3
hEnd=InStr(hTop,buffer,Ex"\q")
MessageBox(0,Mid$(buffer,hTop,hEnd-hTop),"落されたファイル名",MB_OK)
End
コマンドライン引数は "自分自身のパス" "開くファイルのパス"のように
なっているので3つ目のダブルクォートを検索しそれに続く文字が開くファイルのパスになります。
GTR

#21 投稿記事 by GTR »

それは、どういうイベントでやれば良いでしょう?
イベントが分からないので、手のつけようがありません。
お願いします。教えてください。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#22 投稿記事 by イグトランス »

アプリケーションの起動時にファイルを開きたいはずでしょうから、
Createイベントに書けばよいでしょう。
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

#23 投稿記事 by hira »

>C1000さん
そういう感じですが、ダブルクォーテーションは存在しないこともありますよ(^^;

スペースとダブルクォーテーションのどちらが先に出てくるかとかの判断がややこしいので、この方法でも意外と面倒だったりします。
http://www.discoversoft.net/forum/viewt ... 8ee5197d92
↑を使ってみると早いかもしれません。
GTR

#24 投稿記事 by GTR »

いろんな方が書き込まれていますが、一応、どのコードもやってみました。
しかし、ファイルのある場所を示すだけで、そのもともとのプログラムは作動しません。
説明が不十分だったかもしれませんが、
関連付けされている(参考にしたOrangeArchiverなら、.oar)のファイルをダブルクリックすると、プログラムが作動して、エディットボックス1にその内容をセットする、そのようなコードが私はほしかったのですが、、、
すいません、高望みしすぎですか。。。
ゲスト

#25 投稿記事 by ゲスト »

> いろんな方が書き込まれていますが、一応、どのコードもやってみました。
> しかし、ファイルのある場所を示すだけで、そのもともとのプログラムは作動しません。
ファイルの場所を知るのが目的ではなかったんですか?
ファイルパスを得られればFile命令でもファイルを開いてInput #で
中身を得られると思いますが。。。

> 説明が不十分だったかもしれませんが、
はい、不十分だと思います。でも最初のうちはこんなもんでしょう。

> 関連付けされている(参考にしたOrangeArchiverなら、.oar)のファイルをダブルクリックすると、プログラムが作動して、エディットボックス1にその内容をセットする、そのようなコードが私はほしかったのですが、、、
これまでの話の内容を組み合わせれば動作すると思いますど、
いったいどんなプログラミングをしていらっしゃるのでしょうか?
まさか、新しい機能を入れるたびに前のコードを消してるんでしょうか?

まず、理解して欲しいのは質問に答えていらっしゃる方々は、
あなたの書いているプログラムを見ながら質問に
答えてくれている訳ではありません。
勝手な事を言っていなくなる方もいますし、
あなたが現在プログラミングしているものでは動かないようなソースを
乗っける方も居られるでしょう。
しかし、それで「自分の満足のいくようなコードを教えてもらえなかった」
というようなことは言わないでくださいね。

あくまで、ここで多くの方が紹介されているサンプルは
言わば「車の部品」なのです。

同じ車種どうしであればある程度部品はぴったりと合いますが、
別の車種どうしでは少しばかり改造をしないと組み合いません。

GTRさんの質問は何だか、「エンジンの作り方を聞いておいて、車が動かない」
と言っているようです。

皆、あなたに渡したエンジンは詳しく知っていますが、
他の部品がどんなになっているかは知りませんので
車が動かない理由は”分からない”と答えるしかありません。

動かない理由をもう少し絞ってください。
もしくは状況を詳しく書いてください。
> すいません、高望みしすぎですか。。。
別に高望みが悪いわけではありません。
プログラミングの技術向上には「あんなものを作りたい」という夢が大事です。
C1000

#26 投稿記事 by C1000 »

> 関連付けされている(参考にしたOrangeArchiverなら、.oar)のファイルをダブルクリックすると、プログラムが作動して、エディットボックス1にその内容をセットする、そのようなコードが私はほしかったのですが、、、

内容をセットするにはSetDlgItemTextを使います。
(ウィンドウがhMainWndでエディットボックスがEditBox1の場合)

hiraさんが言っているようにスペースとダブルクォーテーションのどちらが先に出てくるのかわからないのでうまく動かないこともあるかもしれません。

コード: 全て選択

Dim buffer As String 
Dim hTop As Long 
Dim hEnd As Long 

buffer=GetCommandLine() 
 
hTop=InStr(2,buffer,Ex"\q")-2 


hTop=InStr(hTop,buffer,Ex"\q")+3 
hEnd=InStr(hTop,buffer,Ex"\q")
SetDlgItemText(hMainWnd,EditBox1,Mid$(buffer,hTop,hEnd-hTop))
GTR

#27 投稿記事 by GTR »

やはり説明不足でしたね。
C1000さんが書かれたコードを組んでみましたが、拡張子を関連付けされたアイコンをクリックすると、どこにあるかというのが出てきました。
というのは、Cドライブのどこという感じです。
説明不足でした。私がしたいのは、どこにあるかではなく、そのファイルの内容をEditBox1にセットしたいのです。
説明不足ですいませんでした
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

#28 投稿記事 by hira »

そこで、ゲストさんの仰るようにそのファイルパスを使ってファイルを開けばいいわけです。
ヘルプファイルのOpen・Input #あたりを参照してみてください。これらの命令を使えばそのファイルの中身が得られます。
GTR

#29 投稿記事 by GTR »

Open・Input #命令はまだやったことがないのですが、どうやればいいのでしょうか?ヘルプファイルを見ても良く分からないのですが。
C1000

#30 投稿記事 by C1000 »

ファイル名のところにパスを指定します。(これは読み取り専用で開く場合です。後はヘルプを見てアクセス権を変えてください。)

コード: 全て選択

Open "ファイル名" For Input As #1
返信する