人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ocxファイルについての質問です。
例えばカレンダーを実現するXXXX.ocxファイルが、実際になんと言う名称なのか、その実現機能とファイル名との対応関係が一覧になっている情報はないでしょうか。

●質問者: clinejp
●カテゴリ:コンピュータ インターネット
✍キーワード:XXXX Xファイル カレンダー ファイル 名称
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tarutatta
●10ポイント

Visual Studio 2008 Professional Edition しか手元にないので他のバージョンでは確認できませんでしたが、C# か VB プロジェクトを作成し、フォームデザイナを開いている状態で「ツールボックス」を右クリック(ツールボックスが開いていない場合は「表示(V)」→「ツールボックス(X)」でツールボックスを開けます)→「アイテムの選択(I)...」→「COM コンポーネント」タブで一覧を表示することができます。

おそらく、無料で配布されている Visual C# (Basic) 2008 Express Edition にも同様の機能があると思われます。

参考1:http://msdn2.microsoft.com/ja-jp/library/cby6tzh5(VS.80).aspx

参考2:http://www.microsoft.com/japan/msdn/vstudio/express/

◎質問者からの返答

ありがとうございます。

VB6で確認しました。

対応を表にしたいのですが、これは手作業しか無理なのでしょうか。

実はそれが一番欲しいのです。


2 ● cx20
●69ポイント ベストアンサー

対応を表にしたいのですが、これは手作業しか無理なのでしょうか。

ActiveX(COM) の情報は、基本的には「レジストリ」+「タイプライブラリ」(OLEView.exe で表示できる内容)から取得できます。

これらの情報を取得するコンポーネントがありますので、それらを使用して一覧を作成することが可能です。

参考までにコンポーネントの一覧を取得するスクリプト(VBScript を使用)を作成してみました。

<スクリプトの概要>
1. レジストリ HKCR\CLSID\ 配下のレジストリを列挙
2. レジストリ HKCR\CLSID\{XXXXXXXX}\Control のものを ActiveX と判断する
3. コンポーネント情報(ProgID, HelpString 等)を取得
4. 結果をレコードセットに詰める
5. 1?4 を繰り返す
6. 結果をタブ区切り形式で表示

以下のスクリプトをコマンドラインで

CScript ExportOcxList.vbs //Nologo > out.txt

として、実行すると、結果をタブ区切りのファイルとして出力します。

' File Name : ExportOcxList.vbs
' Usage : CScript ExportOcxList.vbs //Nologo > out.txt

Option Explicit

' Registry
Const HKEY_CLASSES_ROOT = &H80000000

' ADO
Const adVarChar = 200
Const adFldIsNullable = 32

Call Main()

' メイン
Sub Main()
  ' 初期処理
 Dim strComputer
 strComputer = "." 
 
  ' ■ レジストリ / サブキーの列挙
  ' http://www.microsoft.com/japan/technet/scriptcenter/scripts/os/registry/osrgvb10.mspx
 Dim oReg
 Set oReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv") 
 
  ' ■ FILE: Tlbinf32.exe : Help Files for Tlbinf32.dll
  ' http://support.microsoft.com/kb/224331/en-us
 Dim tliApp
 Set tliApp = CreateObject("TLI.TLIApplication")
 
  ' データ格納用レコードセットの用意
 Dim rs
 Set rs = MakeRecordset()
 
  ' データ収集開始
 Dim strKeyPath
 strKeyPath = "CLSID"
 Dim arrSubKeys
 oReg.EnumKey HKEY_CLASSES_ROOT, strKeyPath, arrSubKeys 
 Dim subKey
 Dim strFindKey
 For Each subkey In arrSubKeys 
 If Left(subKey,1) = "{" And Right(subKey,1) = "}" Then
 strFindKey = strKeyPath & "\" & subkey
 If IsActiveX( oReg, strFindKey ) Then
 Call GetComInfo( tliApp, oReg, strFindKey, rs )
 End If
 End If
 Next
 
  ' データ表示
 Dim strDelimiter
 strDelimiter = vbTab ' 区切り文字を指定(vbTab : タブ文字)
 ShowRecordset rs, strDelimiter
 
  ' メモリ開放
 Set rs = Nothing
 Set tliApp = Nothing
 Set oReg = Nothing
End Sub

' ActiveX かどうかの判別
Function IsActiveX( oReg, strKeyPath )
 Dim bResult
 bResult = False
 
 Dim subkey
 Dim arrSubKeys
 oReg.EnumKey HKEY_CLASSES_ROOT, strKeyPath, arrSubKeys
 If IsNull( arrSubKeys ) Then
 IsActiveX = bResult
 Exit Function
 End If
  ' "HKCR\CLSID\{XXXXXXXX}\Control" がある COM を ActiveX と判断する
 For Each subkey In arrSubKeys 
 If LCase( subkey ) = "control" Then
 bResult = True
 Exit For
 End If
 Next

 IsActiveX = bResult
End Function

' データ格納用レコードセットの準備
Function MakeRecordset()
 Dim rs
 Set rs = CreateObject("ADODB.Recordset")
 rs.Fields.Append "CLSID", adVarChar, 255, adFldIsNullable
 rs.Fields.Append "ProgID", adVarChar, 255, adFldIsNullable
 rs.Fields.Append "InprocServer32", adVarChar, 255, adFldIsNullable
 rs.Fields.Append "LocalServer32", adVarChar, 255, adFldIsNullable
 rs.Fields.Append "Description", adVarChar, 255, adFldIsNullable
 rs.Fields.Append "HelpString", adVarChar, 255, adFldIsNullable
 rs.Open
 Set MakeRecordset = rs
End Function

' データ表示
Sub ShowRecordset( rs, strDelimiter )
 On Error Resume Next

 rs.MoveFirst
 
  ' タイトル行
 Dim strLine
 strLine = GetFieldNameList( rs, strDelimiter )
 WScript.Echo strLine ' タイトル行を出力
 
  ' データ行
 While Not rs.BOF And Not rs.EOF
 strLine = GetFieldValueList( rs, strDelimiter )
 WScript.Echo strLine ' データ行を出力
 rs.MoveNext
 Wend
 
End Sub

' カラム名の一覧(1行分)を取得
Function GetFieldNameList( rs, strDelimiter )
 Dim strResult
 
 Dim bFirst
 bFirst = True
 Dim fld
 For Each fld In rs.Fields
 If bFirst Then
 strResult = Chr(34) & fld.Name & Chr(34)
 bFirst = False
 Else
 strResult = strResult & strDelimiter & Chr(34) & fld.Name & Chr(34)
 End If
 Next
 
 GetFieldNameList = strResult
End Function

' カラムデータの一覧(1行分)を取得
Function GetFieldValueList( rs, strDelimiter )
 Dim strResult
 
 Dim bFirst
 bFirst = True
 Dim fld
 For Each fld In rs.Fields
 If bFirst Then
 strResult = Chr(34) & fld.Value & Chr(34)
 bFirst = False
 Else
 strResult = strResult & strDelimiter & Chr(34) & fld.Value & Chr(34)
 End If
 Next
 
 GetFieldValueList = strResult
End Function

' COM 情報を取得
Function GetComInfo( tliApp, oReg, strKeyPath, ByRef rs )
 Dim strCLSID
 Dim strProgID
 Dim strInprocServer32
 Dim strLocalServer32
 Dim strDescription
 Dim strHelpString
 Dim strFilePath
 
 strCLSID = Mid( strKeyPath, InStrRev( strKeyPath, "\" ) + 1 )
 strProgID = GetKeyValue( oReg, strKeyPath & "\ProgID", "" )
 strInprocServer32 = GetKeyValue( oReg, strKeyPath & "\InprocServer32", "" )
 strLocalServer32 = GetKeyValue( oReg, strKeyPath & "\LocalServer32", "" )
 strDescription = GetKeyValue( oReg, strKeyPath, "" )
 strFilePath = SelectFilePath( strInprocServer32, strLocalServer32 )
 strHelpString = GetHelpString( tliApp, strFilePath )
 
 rs.AddNew()
 rs.Fields( "CLSID" ) = strCLSID
 rs.Fields( "ProgID" ) = strProgID
 rs.Fields( "InprocServer32" ) = strInprocServer32
 rs.Fields( "LocalServer32" ) = strLocalServer32
 rs.Fields( "Description" ) = strDescription
 rs.Fields( "HelpString" ) = strHelpString
 rs.Update()

End Function

' レジストリ値を取得
Function GetKeyValue( oReg, strKeyPath, strValueName )
 Dim strResult

 Dim strValue
 Call oReg.GetStringValue( HKEY_CLASSES_ROOT, strKeyPath, strValueName, strValue )
 strResult = strValue
 
 GetKeyValue = strResult
End Function

' パス名がセットされている方を選択
Function SelectFilePath( strFileName1, strFileName2 )
 Dim strResult
 
 If Len( strFileName1) > 0 Then
 strResult = strFileName1
 Else
 strResult = strFileName2
 End If
 
 SelectFilePath = strResult
End Function

' 指定コンポーネントのヘルプ情報を取得
Function GetHelpString( tliApp, strFullPath )
 Dim strResult
 
 On Error Resume Next
 
  ' TypeLibInformation ActiveX オブジェクト (tlbinf32.dll) を使用してヘルプ情報を取得
 Dim tli
 Set tli = tliApp.TypeLibInfoFromFile( strFullPath )
 If Err.Number > 0 Then
 strResult = ""
 Else
 strResult = tli.HelpString
 End If
 Set tli = Nothing
 
 GetHelpString = strResult
End Function
CLSID ProgID InprocServer32 LocalServer32 Description HelpString
{612A8624-0FB3-11CE-8747-524153480004} COMCTL.Toolbar.1 C:\WINDOWS\system32\comctl32.ocx
Microsoft Toolbar Control, version 5.0 (SP2) Microsoft Windows Common Controls 5.0 (SP2)
{66833FE6-8583-11D1-B16A-00C0F0283628} MSComctlLib.Toolbar.2 C:\WINDOWS\system32\mscomctl.ocx
Microsoft Toolbar Control, version 6.0 Microsoft Windows Common Controls 6.0 (SP6)
{0713E8A2-850A-101B-AFC0-4210102A8DA7} COMCTL.TreeCtrl.1 C:\WINDOWS\system32\comctl32.ocx
Microsoft TreeView Control, version 5.0 (SP2) Microsoft Windows Common Controls 5.0 (SP2)
{C74190B6-8589-11D1-B16A-00C0F0283628} MSComctlLib.TreeCtrl.2 C:\WINDOWS\system32\mscomctl.ocx
Microsoft TreeView Control, version 6.0 Microsoft Windows Common Controls 6.0 (SP6)
{603C7E80-87C2-11D1-8BE3-0000F8754DA1} MSComCtl2.UpDown.2 C:\WINDOWS\system32\MSCOMCT2.OCX
Microsoft UpDown Control 6.0 (SP6) Microsoft Windows Common Controls-2 6.0 (SP6)
{026371C0-1B7C-11CF-9D53-00AA003C9CB6} ComCtl2.UpDown.1 C:\WINDOWS\system32\COMCT232.OCX
Microsoft UpDown Control, version 5.0 (SP2) Microsoft Windows Common Controls-2 5.0 (SP2)
{8856F961-340A-11D0-A96B-00C04FD705A2} Shell.Explorer.2 C:\WINDOWS\system32\ieframe.dll
Microsoft Web Browser Microsoft Internet Controls
{248DD896-BB45-11CF-9ABC-0080C7E7B78D} MSWinsock.Winsock.1 C:\WINDOWS\system32\MSWINSCK.OCX
Microsoft WinSock Control, version 6.0 (SP6) Microsoft Winsock Control 6.0 (SP6)
{00E1DB59-6EFD-4CE7-8C0A-2DA3BCAAD9C6} MicrosoftWorks.WkImgSrv.WksImagingServer.6 C:\Program Files\Microsoft Works\wkimgsrv.dll
Microsoft Works Imaging Server WkImgSrv 1.0 Type Library
{8E27C92B-1264-101C-8A2F-040224009C02} MSCAL.Calendar.7 C:\Program Files\Microsoft Office\OFFICE11\MSCAL.OCX
Microsoft カレンダー コントロール 11.0 Microsoft Calendar Control 11.0
{D9347033-9612-11D1-9D75-00C04FCC8CDC} BARCODE.BarCodeCtrl.1 C:\Program Files\Microsoft Office\OFFICE11\1041\MSBCODE9.OCX
Microsoft バーコード コントロール 9.0 Microsoft Access BarCode Control 9.0
{67331D85-BE17-42f6-8D3F-47B8E8B26637} MigrationWizard.OOBE.1 C:\WINDOWS\system32\SHELL32.dll
Migration Wizard OOBE Automation Object Microsoft Shell Controls And Automation
■ [VB] Visual Basic 6.0 に添付されている ActiveX コントロール一覧
http://support.microsoft.com/kb/412577/ja
■ [VB] ActiveX コンポーネントで作成されるレジストリ エントリ
http://support.microsoft.com/kb/183771/ja
■ レジストリ / サブキーの列挙
http://www.microsoft.com/japan/technet/scriptcenter/scripts/os/r...
■ FILE: Tlbinf32.exe : Help Files for Tlbinf32.dll
http://support.microsoft.com/kb/224331/en-us
■ ADO API リファレンス
http://msdn.microsoft.com/library/ja/jpado260/htm/mdmscadoapiref...
◎質問者からの返答

完璧すぎる回答いただきましてなんだか恐縮です。

大変ありがとうございました。

今後ともよろしくお願いいたします。


3 ● tarutatta
●15ポイント

Visual Studio の表ですが、ListView to CSV というのを使ってみたところ上手く取得できました。

CSV 形式で出力されるので、エクセルで簡単に加工できると思います。

◎質問者からの返答

なるほど、こういう手もあるのですね。

他の用途にも使えますね。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ