■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#7001-0関連付け伊藤慎介2000-03-30(木) 05:24
     #7003-0RE#7001:関連付けぜんちゃん2000-03-30(木) 10:13
     #7005-0RE#7001:関連付けせつら2000-03-30(木) 10:37
     #7010-0RE#7005:関連付け魔界の仮面弁士2000-03-30(木) 11:57
     #7036-0RE#7001:関連付け伊藤慎介2000-03-31(金) 01:48
     #7037-0RE#7036:関連付け魔界の仮面弁士2000-03-31(金) 03:23
#7001-0
関連付け
はじめまして、VB3ヶ月ぐらいやってます。伊藤です。
自分で文章のエディターを作ったのですが、
プログラム上でファイルをそのエディターで関連付けさせたい場合、
どういう方法がありますか?
*.xxxという種類のファイルがあって、Lhazaのように”関連付け”のチェック
をつけるとそのエディターで開くように関連付けしたいんです。
#7003-0
RE#7001:関連付け
> はじめまして、VB3ヶ月ぐらいやってます。伊藤です。
> 自分で文章のエディターを作ったのですが、
> プログラム上でファイルをそのエディターで関連付けさせたい場合、
> どういう方法がありますか?
> *.xxxという種類のファイルがあって、Lhazaのように”関連付け”のチェック
> をつけるとそのエディターで開くように関連付けしたいんです。

関連づけの情報はレジストリに書き込まれています。
ただレジストリを触るのはかなり危険かと。。。

一応情報だけ
1.HKEY_CLASSES_ROOT\拡張子(.TXTなど)の中の(標準)より値を取得(txt_auto_fileなど)
2.HKEY_CLASSES_ROOT\の1.で取得したキー(txt_auto_fileなど)の\shell\open\command
  の中の(標準)の値が関連づけの情報です。

レジストリを操作するにはAPI関数が必要です。
#7005-0
RE#7001:関連付け
REGEDIT.EXE を利用して関連付け情報を書き換えてしまえば、API を使わなくても可能です。
例えば、こんな感じでどうでしょうか?

Private Sub Command1_Click()
    Dim cw As String
    Dim cw1 As String
    Dim cw2 As String
    Dim i As Integer

    cw1 = App.Path + "\" + App.EXEName + ".EXE" '自EXE名
    cw2 = ""

    For i = 1 To Len(cw1)
        cw = Mid(cw1, i, 1)
        If cw = "\" Then
            cw2 = cw2 + "\\"    '\自身を書くには\\とする
        Else
            cw2 = cw2 + cw
        End If
    Next i

    Open App.Path + "\xxx.REG" For Output As #1
    Print #1, "REGEDIT4"

    Print #1, "[HKEY_CLASSES_ROOT\.xxx]"
    Print #1, "@=" + Chr(34) + "xxx_file" + Chr(34)
    Print #1, "Content Type=" + Chr(34) + "text/xxx" + Chr(34)

    Print #1, "[HKEY_CLASSES_ROOT\xxx_file]"
    Print #1, "@=" + Chr(34) + "xxxファイル" + Chr(34)

    Print #1, "[HKEY_CLASSES_ROOT\xxx_file\DefaultIcon]"
    Print #1, "@=" + Chr(34) + cw2 + ",1" + Chr(34)

    Print #1, "[HKEY_CLASSES_ROOT\xxx_file\shell\open\command]"
    Print #1, "@=" + Chr(34) + cw2 + " \" + Chr(34) + "%1\" + Chr(34) + Chr(34)
    Close #1

    cw = "regedit.exe " + Chr(34) + App.Path + "\xxx.REG" + Chr(34)
    Shell cw, vbNormalFocus
End Sub

レジストリを操作するので、絶対に!間違えないで下さいね。 ちなみに、このソースは私は実行
して試していませんから、御自身の責任において使用してください。
#7010-0
RE#7005:関連付け
>     cw = "regedit.exe " + Chr(34) + App.Path + "\xxx.REG" + Chr(34)
サイレントモード(/Sオプション)にしないと、煩くないですか?(^-^;)

"REGEDIT.EXE /S """ & strREGFileName & """"
#7036-0
RE#7001:関連付け
せつらさん、ぜんちゃんさん、魔界の仮面弁士さん、アドバイスありがとうございます。
やっぱり関連付けはレジストリを利用しなければいけないみたいですね。
せつらさんのコード見ても、無知ゆえわからなかったし、
レジストリ操作はこわいので、僕は関連付けをあきらめます。

関連付けはユーザーさん自身でファイルタイプ編集して貰うようにします。
アドバイスありがとうございました。
#7037-0
RE#7036:関連付け
> やっぱり関連付けはレジストリを利用しなければいけないみたいですね。
> せつらさんのコード見ても、無知ゆえわからなかったし、
> レジストリ操作はこわいので、僕は関連付けをあきらめます。

レジストリ操作は、理解するまでは触らないのが無難です。

ただ、とりあえずコードの説明だけ。

> 関連付けはユーザーさん自身でファイルタイプ編集して貰うようにします。
ファイルタイプ編集をすると、#7003のようなデータが、レジストリに書き込まれます。
(REGEDIT.EXEで確認してみれば、意味が理解できるかも)

そして、REGEDITには、「レジストリ情報の書き出し」と「レジストリ情報の取り込み」という
機能があります。(ここで書き出される情報は、拡張子REGの、単なるテキストファイルです)
#7005で行っているのは、このテキストファイルの生成です。
そして、生成したレジストリ情報を、Shell関数を使ってREGEDIT.EXEに渡し、登録しているのです。

ただし、そのままだと登録確認のメッセージと登録完了のメッセージが表示されてしまうので、
それでは煩いですから、メッセージ表示を行わないサイレントモードにする例が、
#7010だったというわけです。
このページと関連する記事:
#38262-0関連付けをしたいのですが2001-02-05(月) 18:19
#4208-1ファイルの関連ずけ1999-08-30(月) 17:39
#18088-0レジストリへの登録2000-03-17(金) 04:02
#41259-0自作テキストエディタで作成したファイルを関連付けて開きたい2001-04-04(水) 14:44
#21598-0ファイルの関連付けをするには?2001-06-28(木) 20:53
#35255-0ファイル拡張子の関連付け2000-12-13(水) 13:43
#41262-0是非、教えてください2001-04-04(水) 14:56
#18911-0*.frmのアイコン表示2001-02-19(月) 15:05
#10950-0関連付け2000-05-26(金) 00:47
#10943-0OpenするFILEが他のアプリで開かれているかのチェック方法2000-08-28(月) 14:12
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)