こんにちは。
はじめての投稿になります。
私は現在、「ファイルを開く」のコモンダイアログボックスを起動できるHTML画面を作りたいと思っております。
その画面ではサーバ側のファイルを閲覧させたいのですが、認証やセキュリティなどの観点から、
ダイアログボックスの起動はクライアント側で動作するようにしたいです。
それにあたって、ダイアログボックスを呼び出すオブジェクトをAxtiveXコントロール(OCX)で作成し、
そのOCXをHTMLから呼び出すことで実現できないかと考えました。
そこで、以下のことを調べております。
(1)無償のVB開発環境を使ってAxtiveXコントロールを作成することができるか?
(2)AxtiveXコントロールを作成できないなら、AxtiveX DLLをHTMLから呼び出せるか?
ちなみに現在使用している「無償のVB開発環境」は、Visual Studioの Visual Basic 2008 Express Edition です。
(1)に関しては、VB6ではAxtiveXコントロールを作成できたと聞きますが、どうもVB2008では(.Netでは)作成できないようです。(現在までに見つけた情報に、「.Netで作成できる」というものがないため)
(2)に関しては、VB2008 Express Edition を使って、ダイアログボックスを呼び出す AxtiveX DLL を作成することには成功しています。
VBのCOMクラスのテンプレートにダイアログボックス起動の関数を記述し、ビルドしてdllを作成。
↓
別途VBによるWindowsフォームアプリケーションを作成し、「参照の追加」で上記dllを登録してダイアログボックス起動の関数を呼び出す。
という方法で、ダイアログボックスを呼び出せました。
ですので、HTMLの画面からも同じようにdll呼び出しができないかと思ったのですが、現在のところ方法が見つかりません。
ダイアログボックスを開く機能さえあればよく、ユーザーインターフェースは不要なので AxtiveX DLL でもよいと思ったのですが、HTMLからの呼び出しにはDLLではなくOCXを用いるという情報しか見つけられませんでした。
以上のことから、VB2008ではHTMLからダイアログボックスを呼び出すActiveXを作れないのではないか?と思える状態なのですが、それが可能であるという話がもしありましたら、お教えいただきたく思います。
最低限「クライアント側からのダイアログボックス起動ができるHTML」「ダイアログボックス起動はVBで作成」という条件を満たせればよいので、(1)(2)で実現できなければ別の方法を探すことにします。
最後に
必要かどうかわかりませんが、(2)で試しに作ったダイアログボックス呼び出しのCOMクラスのソースを載せておきます。
ご回答の参考になりますでしょうか。
Imports System.Windows.Forms
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
Public Const ClassId As String = "2bdd38a4-f946-44e2-af47-5b9cbd2c24d5"
Public Const InterfaceId As String = "fcd22890-f4cd-4e2a-b8c0-ae83f290c250"
Public Const EventsId As String = "86c74809-966a-47cf-9324-adce776030eb"
Public Sub New()
MyBase.New()
End Sub
Public Function subOpenFile(ByVal inFilePass As String) As Boolean
subOpenFile = False
'OpenFileDialogクラスのインスタンスを作成
Dim ofd As New OpenFileDialog()
If inFilePass = "" Then
ofd.InitialDirectory = "C:\"
Else
ofd.InitialDirectory = inFilePass
End If
ofd.Filter = "HTMLファイル(*.html;*.htm)|*.html;*.htm|すべてのファイル(*.*)|*.*"
ofd.FilterIndex = 2
ofd.Title = "開くファイルを選択してください"
ofd.RestoreDirectory = True
ofd.CheckFileExists = True
ofd.CheckPathExists = True
'ダイアログを表示
If ofd.ShowDialog() = DialogResult.OK Then
Console.WriteLine(ofd.FileName)
End If
subOpenFile = True
End Function
End Class
(呼び出し側では以下の記述で呼び出しに成功しました)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Test As New COMTest1.ComClass1
Call Test.subOpenFile("C:\WINDOWS")
End Sub
以上、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
> HTMLからのDLL呼び出しは可能でしょうか?
EXEなら可能(だだし、色々制限があり)
ノータッチ・デプロイメント
http://www.atmarkit.co.jp/fdotnet/special/ntdepl …
> その画面ではサーバ側のファイルを閲覧させたいのですが、認証やセキュリティなどの観点から、
> ダイアログボックスの起動はクライアント側で動作するようにしたいです。
クライアント側からサーバ側のファイルを任意に参照??
どんな方法でも無理でしょう。
> Call Test.subOpenFile("C:\WINDOWS")
これはクライアント側のフォルダを開いているだけです。
サーバ側のフォルダをWebで公開したいのであれば、
フォルダを右クリック→Web共有
IISマネージャでフォルダを右クリック→ディレクトリ参照をオン。
HTMLからそのフォルダにリンク。
または
WebアプリをASP.NETなどで自作する。
この回答への補足
ご回答ありがとうございます。
>> Call Test.subOpenFile("C:\WINDOWS")
>これはクライアント側のフォルダを開いているだけです。
申し訳ありません。
テストでローカルのフォルダを指定していたことがありまして、その時のソースを載せておりました。
Call Test.subOpenFile("\\サーバの共有フォルダ\フォルダ1\フォルダ1_1")
のようにサーバのフォルダを指定して使います。
クライアント側は、
HTMLの画面を使わずともブラウザや「ファイル名を指定して実行」等で
サーバの共有フォルダのアドレスを直接入力すれば、フォルダの内容を閲覧できる環境です。
(ですので、subOpenFileでもサーバのフォルダの内容を閲覧できました。)
前提条件の説明が足りておりませんでした。
あとこれも最初に書いていなかったのですが、
VB6の時のActiveXの資料によると、ActiveXコントロールは自分自身をインストールする機能があるとのことですので
クライアントからHTML画面のサーバ閲覧の参照ボタンを押下 → ocxかdllのファイルをクライアント側にダウンロード
→ ダウンロードされたファイルからダイアログボックスを起動
という流れのものをイメージしておりました。
いろいろ説明が足りず申し訳ありません。
>(2)AxtiveXコントロールを作成できないなら、AxtiveX DLLをHTMLから呼び出せるか?
その後実験で、VB2008の「クラスライブラリ」のプロジェクトで「ユーザーコントロール」を使って作成したdllを
ローカルの仮想ディレクトリに保存し、下記のようにHTMLから呼び出すことはできました。
※この「呼び出す」は、dllで作成したコントロール(UserControl1)をHTMLの画面上に表示できたという意味です。
<object id="TestControl1"
classid="http:DllTest1.dll#DllTest1.UserControl1"
height="500" width="500" VIEWASTEXT>
</object>
「.NETにおいては、ActiveXコントロールに代わってWindowsフォームコントロールを作成できる」と聞いたので、
このdllがActiveXコントロールに等しいものなのではないかと。
よって、(2)の「dllをHTMLから呼び出す」ということ自体は成功なのですが、これもHTMLファイルとdllを同じ場所に
保存していないと、HTML画面上にdllのコントロールが表示されませんでした。
つまり、クライアント側にあるdllの実行は結局できませんでした。
またdllのコントロールが表示できる場合でも、前述のダイアログボックス起動の処理をコントロールから呼び出そうとすると
「アクセス許可の要求に失敗しました」エラーが出て実行できませんでした。
もし、この補足で何か取れる手段があるようでしたら、お教えください。
そして、
>EXEなら可能(だだし、色々制限があり)
「ノータッチ・デプロイメント」は知りませんでした。
その手段を調べさせていただきます。
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
Access VBAよりシート名を取得...
-
*.asp の拡張子名がついたht...
-
LabVIEWでEXCELファイルを操作...
-
RPA(PowerAutomate)の実装について
-
量子化学計算ソフト GAMESS の...
-
jspのエラーが修正できません。
-
HTMLファイルからexeファイルを...
-
EXCELアドイン自動起動マクロ
-
<BODY oncontextmenu="return f...
-
VBでエクセルをOPEN
-
オリジナルのプログラムへの拡...
-
別のAccessファイルのフォーム...
-
拡張子cueとbin
-
Eclipseで、プロジェクト名のと...
-
Eclipseのアンインストールの仕方
-
正しいURL指定しているにもかか...
-
JSPのクラスをコンパイルできな...
-
Eclipse(JAVA)のデバッグで他...
-
Eclipse・プロジェクトで、フォ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
RPA(PowerAutomate)の実装について
-
別のAccessファイルのフォーム...
-
HTMLファイルからexeファイルを...
-
jspのエラーが修正できません。
-
Access VBAよりシート名を取得...
-
VBA Application visibleの...
-
*.asp の拡張子名がついたht...
-
system.mdwを見つけることが出...
-
量子化学計算ソフト GAMESS の...
-
VBAで作成したマクロをデスクト...
-
EXE間で同期をとりながらデータ...
-
LabVIEWでEXCELファイルを操作...
-
エラー この変数は宣言されて...
-
vbsかバッチファイルでmp3を再...
-
起動中の全てのアプリ名の取得...
-
EXCELアドイン自動起動マクロ
-
VBでShell○なのにShellExecute×
-
複数のパソコン間のDir関数につ...
-
AccessのMDBファイルを自動で最...
おすすめ情報