1

私は、HTMLとVBScriptを使用して、 ComDlg32.ocx(Commom Dialog Control)を使用してhtmlエディターを開発しています。私の正確な要件は、[開く]、[保存]、[色]、[印刷]、[フォント]のダイアログボックスを表示することでした。[ファイルの保存]ダイアログボックスを表示するコードを記述しました。また、LPKツールを使用してライセンスファイルをWebページに追加しました。

私のhtmlソースは次のようになります:

<body>
<!-- lpk file -->
<object classid="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
   <param name="LPKPath" value="License/comdlg.lpk" />
</object>
<!-- Microsoft Common Dialog Control -->
<object classid="CLSID:F9043C85-F6F2-101A-A3C9-08002B2F49FB" codebase="http://activex.microsoft.com/controls/vb6/COMDLG32.CAB" id="objComDlg"></object>
</body>

さて、ここに私のエラーがあります。[ファイルの保存]ダイアログボックスを表示するためにvbscriptを呼び出そうとすると、次のようなエラーが発生します。 オブジェクトはこのプロパティまたはメソッドをサポートしていません:'objComDlg.Filter'

objComDlg.Filterをコメントアウトすると、エラーはobjComDlg.DialogTitleに移動し、続行されます。

そして、私のVBScriptは次のようになります。

FILE_FORMATS = "Rich Text Format (*.rtf)|*.rtf|Microsoft Word (*.doc)|*.doc|ANSI Text Document (*.txt)|*.txt"
objComDlg.Filter = FILE_FORMATS <--- Error shows here
objComDlg.DialogTitle = "Save As "
objComDlg.Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly
objComDlg.CancelError = True
objComDlg.ShowSave

なぜこれが起こっているのか誰かが知っていますか?この特定のActiveXコントロールを使用するための適切なドキュメントはありますか?このエラーのため、現在の開発は停止しています。

ところで、私は開発にWindowsXPSP3とIE8を使用しています。

4

3 に答える 3

1

まったく同じ問題が発生していますが、特定のマシンでのみ発生します。次の手順で問題を再現できました。

  1. Microsoft Virtual PC 2007 を使用して、XP Pro のクリーン ビルドをインストールします。
  2. VM アドオン以外は何もインストールせずに、すべての MS Update を適用します。
  3. 上記のコードを実行します。以下の代替案も提供しました。

この問題は、MS の更新によって発生したようです。KB240797 ナレッジ ベース記事 ( http://support.microsoft.com/default.aspx/kb/240797?p=1 ) を使用して、コモン ダイアログ ActiveX コントロールに対して Kill Bit が発行されたことを確認できました。提供された代替クラス ID (8F0F480A-4366-4737-8265-2AD6FDAC8C31) は、コントロールが置き換えられたことを示唆しています。ただし、コントロールが機能する他のマシン、特に開発マシン (XP Pro x64、XP Pro x32、および Vista x32) をチェックした後、それぞれに Visual Studio 2008 のコピーがインストールされており、Kill Bit エントリも代替クラスもありませんでした。 ID。

ダイアログを機能させるために、レジストリ キーの名前を変更しただけです (削除することもできました)。つまり、Kill Bit がなくなりました。早速、うまくいきました!

レジストリ キーは次のとおりです。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX 互換性{F9043C85-F6F2-101A-A3C9-08002B2F49FB}

これは、将来の Microsoft 累積更新プログラムで再適用される可能性があり、セキュリティ上の脆弱性が生じる可能性もあると思います。

お役に立てば幸いです。元の投稿に感謝します。私を正しい軌道に乗せたようです。

カイネ

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Common Dialog Test</title>


    <script language="vbscript" type="text/vbscript">
    Sub AlertErr()
      On Error Resume Next

      document.objComDlg.Copies = 1
      document.objComDlg.FromPage = 1
      document.objComDlg.ToPage = 1
      document.objComDlg.Min = 1
      document.objComDlg.Max = 1
      document.objComDlg.Flags = cdlPDHidePrintToFile Or cdlPDNoSelection
      document.objComDlg.CancelError = True

      printerDialog = document.objComDlg.ShowPrinter
      If Err.Number = 0 Then
        Call MsgBox("No Error. The print simulation worked as expected.")
      ElseIf Err.Number = 32755 Then
        Call MsgBox("You clicked the 'Cancel' button.")
      Else
        Call MsgBox("The following error occurred: " & Err.Description & " (" & Err.Number & ")")
      End If
    End Sub
    </script>
</head>
<body>
    <div>
      <button id="btnAlertErr" onclick="AlertErr()">Print Me</button>

        <object classid="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
            <param name="LPKPath" value="CommonDialog.lpk">
        </object>

        <object id="objComDlg" codebase="http://activex.microsoft.com/controls/vb6/comdlg32.cab" classid="clsid:F9043C85-F6F2-101A-A3C9-08002B2F49FB" viewastext>
          <param name="_ExtentX" value="847" />
          <param name="_ExtentY" value="847" />
          <param name="_Version" value="393216" />
          <param name="_Version" value="393216" />
          <param name="CancelError" value="0" />
          <param name="Color" value="0" />
          <param name="Copies" value="1" />
          <param name="DefaultExt" value="" />
          <param name="DialogTitle" value="" />
          <param name="FileName" value="" />
          <param name="Filter" value="" />
          <param name="FilterIndex" value="0" />
          <param name="Flags" value="0" />
          <param name="FontBold" value="0" />
          <param name="FontItalic" value="0" />
          <param name="FontName" value="" />
          <param name="FontSize" value="8" />
          <param name="FontStrikeThru" value="0" />
          <param name="FontUnderLine" value="0" />
          <param name="FromPage" value="0" />
          <param name="HelpCommand" value="0" />
          <param name="HelpContext" value="0" />
          <param name="HelpFile" value="" />
          <param name="HelpKey" value="" />
          <param name="InitDir" value="" />
          <param name="Max" value="0" />
          <param name="Min" value="0" />
          <param name="MaxFileSize" value="260" />
          <param name="PrinterDefault" value="1" />
          <param name="ToPage" value="0" />
          <param name="Orientation" value="1" />
      </object>
    </div>
</body>
</html>
于 2010-03-15T12:30:16.647 に答える
1

あなたの問題は、MSがコントロールのさまざまなセキュリティホールを修正するためにOCXライブラリに加えたいくつかの主要な変更に関連しているようです. SP3 を実行していることに気付きました。これにはおそらく修正が含まれており、コントロールに影響を与えたように見えます。たとえば、いくつかのメソッドが消えています!

私は同じ問題に遭遇しました.msflxgrd.ocs(Rowsメソッド)のレガシーアプリで、存在しないように見えるメソッドが呼び出されていました。解決策を見つけるのに何年もかかりました。私の推測では、セキュリティ アップデートをロールバックするか、欠落している objComDlg.Filter メソッドを使用しないようにコードを変更する必要があると思います。

詳細については、この記事を参照してください。

--編集

OK、より具体的な情報がいくつかあります。これでうまくいきました(ただし、問題はmsflxgrd.ocxにありましたが、同じ問題だと思います)。

ActiveX コントロールのいくつかの穴を塞いだ特定の Microsoft 更新プログラム ( KB960715 ) があるため、脆弱なメソッドはまだコントロールに存在しますが、キルビットによってブロックされます。更新プログラムを削除すると、修正するように設計されたエクスプロイトに対して脆弱になるため、可能であればコードを変更した方がよいことは明らかです。

于 2009-10-23T15:10:26.693 に答える
0

投稿したVBscriptの上にobjComDlgを作成しますか?何かのようなもの:

Dim objComDlg As Object : Set objComDlg = CreateObject("MSComDlg.CommonDialog")
于 2009-07-18T06:49:58.443 に答える