もっと読む
« 2016年2月 | メイン | 2016年4月 »
INIファイルというと今更感がありますが、 簡単にプログラムの動作パラメータなどを保存しておくには便利な機能です。 私もプログラムの変更なしに、外からタイミングの時間の値を後から少し変えたい場合によく使います。 INIファイルの構造は以下の様になります。 ---------- [SECTION1] KEY1=keydata1 KEY2=keydata2 [SECTION2] KEYA=keydataA ... ---------- ■セクション [] で囲まれた部分がセクションで、各セクションの中にキー文字列を宣言します。 ■キー 各セクションの中に宣言される文字列で、その値を = で定義します。 セクションが異なれば、同じキーが在ってもOKです。 ■コメント 先頭に ;(セミコロン) を置くとその行はコメント行とみなされます。 また、行の途中に ;(セミコロン) が在ると、それ以降はコメントであるとみなされます。 ■エスケープシーケンス キーの値の文字列として ;(セミコロン) :(コロン) =(等号) #(シャープ) の各文字を含めたい場合があります。その時には各文字の前に \(円マーク) を置きエスケープしてやります。 (以下のソースのクラスではエスケープシーケンスの設定と解除を関数化しています) 以下にINIファイルを取り扱うクラスのソースを示します。 Imports System.Text Public Class ClsIni 'プロファイル文字列取得 Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _ ByVal lpApplicationName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As StringBuilder, _ ByVal nSize As UInt32, _ ByVal lpFileName As String) As UInt32 'プロファイル文字列書込み Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _ ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal lpString As String, _ ByVal lpFileName As String) As Integer Private strIniFileName As String = "" ''' <summary> ''' コンストラクタ ''' </summary> ''' <param name="strIniFile">INIファイル名(フルパス)</param> Sub New(ByVal strIniFile As String) Me.strIniFileName = strIniFile 'ファイル名退避 End Sub ''' <summary> ''' プロファイル文字列取得 ''' </summary> ''' <param name="strAppName">アプリケーション文字列</param> ''' <param name="strKeyName">キー文字列</param> ''' <param name="strDefault">デフォルト文字列</param> ''' <returns>プロファイル文字列</returns> Public Function GetProfileString(ByVal strAppName As String, _ ByVal strKeyName As String, _ ByVal strDefault As String) As String Try Dim strWork As StringBuilder = New StringBuilder(1024) Dim intRet As Integer = GetPrivateProfileString(strAppName, strKeyName, strDefault, strWork, strWork.Capacity - 1, strIniFileName) If intRet > 0 Then 'エスケープ文字を解除して返す Return ResetEscape(strWork.ToString()) Else Return strDefault End If Catch ex As Exception Return strDefault End Try End Function ''' <summary> ''' プロファイル文字列設定 ''' </summary> ''' <param name="strAppName">アプリケーション文字列</param> ''' <param name="strKeyName">キー文字列</param> ''' <param name="strSet">設定文字列</param> ''' <returns>True:正常, False:エラー</returns> Public Function WriteProfileString(ByVal strAppName As String, _ ByVal strKeyName As String, _ ByVal strSet As String) As Boolean Try 'エスケープ文字変換 Dim strCnv As String = SetEscape(strSet) Dim intRet As Integer = WritePrivateProfileString(strAppName, strKeyName, strCnv, strIniFileName) If intRet > 0 Then Return True Else Return False End If Catch ex As Exception Return False End Try End Function ''' <summary> ''' エスケープ文字変換 ''' </summary> ''' <param name="strSet">設定文字列</param> ''' <returns>変換後文字列</returns> Private Function SetEscape(ByVal strSet As String) As String Dim strEscape As String = ";#=:" Dim strRet As String = strSet Try For i = 0 To strEscape.Length - 1 Dim str As String = strEscape.Substring(i, 1) strRet = strRet.Replace(str, "\" & str) Next Return strRet Catch ex As Exception Return "" End Try End Function ''' <summary> ''' エスケープ文字解除 ''' </summary> ''' <param name="strSet">設定文字列</param> ''' <returns>変換後文字列</returns> Private Function ResetEscape(ByVal strSet As String) As String Dim strEscape As String = ";#=:" Dim strRet As String = strSet Try For i = 0 To strEscape.Length - 1 Dim str As String = strEscape.Substring(i, 1) strRet = strRet.Replace("\" & str, str) Next Return strRet Catch ex As Exception Return "" End Try End Function End Class このクラスを利用する例を以下に記します。 Module Module1 'INIファイルのテスト Public Sub Main() '自分自身の存在するフォルダ Dim strPath As String = System.IO.Path.GetDirectoryName(Application.ExecutablePath) 'INIファイルクラスの生成 Dim Ini As New ClsIni(strPath & "\TEST.INI") 'INIファイルへの書込みテスト Ini.WriteProfileString("SECTION1", "DATA1", "test-data-1:aaa") Ini.WriteProfileString("SECTION1", "DATA2", "test-data-2;bbb") Ini.WriteProfileString("SECTION2", "DATA1", "TEST-DATA-1=:;#AAA") 'INIファイルからの取得テスト Dim str As String str = Ini.GetProfileString("SECTION1", "DATA1", "default-data-1:aaa") Console.WriteLine("SECTION1:DATA1=" & str) str = Ini.GetProfileString("SECTION1", "DATA2", "default-data-2;bbb") Console.WriteLine("SECTION1:DATA2=" & str) str = Ini.GetProfileString("SECTION2", "DATA1", "default-DATA-1=:;#AAA") Console.WriteLine("SECTION2:DATA1=" & str) str = Console.ReadLine() End Sub End Module INIファイルへの書込みでエスケープしないといけない文字を含んでいますので、 このプログラムを実行し「TEST.INI」をテキストエディタで確認すると、 \(円マーク) が付加されて書き込まれているのがわかるはずです。
■関連記事 ⇒VB.NETでのXMLファイルをINIファイル風に使う方法について
Visual Basic 2013逆引き大全 555の極意【電子書籍】[ 増田智明 ]
価格: 2,527円 (2016/09/29 14:32時点 )
感想:0件
オラクルでログイン処理で何回もエラーを起こした場合には、既定回数を超えるとアカウントがロックされてしまいます。 以下のSQLの実行を見てください。(SQLコマンドラインから実行しています) なお、既定回数はデフォルトでは10回の様です。10回目の「CONNECT」でアカウントがロックされました。 SQL> CONNECT TEST/TEST ERROR: ORA-28000: the account is locked このTESTユーザのアカウントのロックを解除する為に、強制的にログインします。 「/ AS SYSDBA」でのログインはOS認証で「SYSDBA」の権限を持つログインになります。 SQL> CONNECT / AS SYSDBA 接続されました。 SQL> ALTER USER TEST ACCOUNT UNLOCK; ユーザーが変更されました。 SQL> 「ALTER USER」命令によりアカウントをアンロックしています。 尚、強制ログインの方法は「CONNECT SYSTEM/MANAGER AS SYSDBA」などもあります。
新・門外不出のOracle現場ワザ ?エキスパートが明かす運用・管理の極意【電子書籍】[ 五十嵐建平, 大塚信男, 小田圭二, 村方仁, 谷敦雄, 宮崎博之, 神田達成 ]
価格: 2,894円 (2016/09/29 14:00時点 )
VB.NETのフォームに張り付けた入力コントロールの遷移は通常は「Tab」キーで行えますが、 「Enter」キーでも次の入力コントロールへフォーカスを移動したい要求は少なからずあります。 普通の人はテキストボックスに何かを入力し、入力の最後に「Enter」を押したくなります。 キーボードの配置(形)からしても1個の入力後は「Enter」を押すことが前提の様な感じがします。 さて、複数のTextBoxを並べたFormを例にしますが、画面的には以下の様な感じです。 この画面で、各TextBoxで「Enter」キーを押下した時に、次のコントロールにフォーカスを移動させます。
次のコントロールにフォーカスを移動させるためのメソッドが、Formコントロールのメソッドとして在ります。 以下のメソッドがそうです。 ----- SelectNextControl(ctl As System.Windows.Forms.Control, forward As Boolean, tabStopOnly As Boolean, nested As Boolean, wrap As Boolean) As Boolean -----
ctl
forward
tabStopOnly
nested
wrap
このメソッドをKeyDownイベントで呼出せる形でメソッド化し、 FormのKeyDownで呼出してやるか、または、フォームのコンストラクタでKeyDownイベントにハンドラとして追加してやります。 以下のソースでは、コンストラクタでKeyDownイベントにハンドラを追加しています。 Public Class Form2 '当クラスのコンストラクタ Public Sub New() ' この呼び出しはデザイナーで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 '「Enter」キーでのコントロール遷移処理の設定 Me.KeyPreview = True AddHandler Me.KeyDown, AddressOf MoveNextCtrl AddHandler Me.KeyPress, AddressOf MoveNextCtrlBeepSup End Sub '「Enter」キーによるコントロールの移動メソッド Private Sub MoveNextCtrl(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Try If e.KeyCode = Keys.Enter Then Dim fProc As Boolean = True If TypeOf sender.ActiveControl Is TextBox Then If (CType(sender.ActiveControl, TextBox)).Multiline = True Then fProc = False End If End If '次のコントロールをアクティブにします。 If fProc Then 'forward: タブ オーダー内を前方に移動する場合は true。後方に移動する場合は false。 Dim forward As Boolean = e.Modifiers <> Keys.Shift sender.SelectNextControl(sender.ActiveControl, forward, True, True, True) End If End If Catch ex As Exception MsgBox("PGエラー:" & ex.ToString) End Try End Sub '「Enter」キーによるコントロールの移動メソッド時にビープ音の消音 Private Sub MoveNextCtrlBeepSup(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Try 'Enterキーが押された事を取得 If e.KeyChar = Chr(Keys.Enter) Then Dim fProc As Boolean = True If TypeOf sender.ActiveControl Is TextBox Then If (CType(sender.ActiveControl, TextBox)).Multiline = True Then fProc = False End If End If 'イベントをキャンセルでBeep音の消音 If fProc Then e.Handled = True End If End If Catch ex As Exception MsgBox("PGエラー:" & ex.ToString) End Try End Sub End Class ■「Enter」キーによるコントロールの移動メソッド時にビープ音の消音 入力コントロールで「Enter」キーを押下するとビーとBeep音がなります。 これを止めるには、KeyDownイベントで「Enter」の次のコントロール移動をした様に、 KeyPressイベントで、「Enter」キー入力時にイベント処理のキャンセルを行うことです。
花粉予報が気になる時期になってきました。「花粉」という言葉に春を感じますが、みなさんは如何でしょうか。 春と言えばフレッシュな社会人や学生さんを連想しますが、VB.NETを始めたころも春だった様な... そこでこのブログのVB.NET関連の記事ですが、データ変換などと基本的なものを取り上げました。 オブジェクト型から各種のデータ型への変換関数を以下のソースに示します。 オブジェクト型から変換する場合、いろいろな方法がありますが、 各データ型への変換メソッド「Parse」を使うのが一番簡単です。 この「Parse」ですが、変換に失敗を Try ... Catch で捉えられるのでエラー発生時にデフォルト値を返します。 これらの関数を利用する場面ですが、 データベースからの数値データを取得する場合にNULLデータを0に変換したい時によく使っています。 ''' -------------------------------------------------------- ''' <summary>Object型からInteger型変換</summary> ''' <param name="obj">変換元Object型データ</param> ''' <returns>変換後Integer型データ(変換不可の場合は0)</returns> ''' -------------------------------------------------------- Public Function ObjectToInt(ByVal obj As Object) As Integer Try Return Integer.Parse(obj) Catch ex As Exception Return 0 End Try End Function ''' -------------------------------------------------------- ''' <summary>Object型からDecimal型変換</summary> ''' <param name="obj">変換元Object型データ</param> ''' <returns>変換後Decimal型データ(変換不可の場合は0)</returns> ''' -------------------------------------------------------- Public Function ObjectToDec(ByVal obj As Object) As Decimal Try Return Decimal.Parse(obj) Catch ex As Exception Return 0 End Try End Function ''' -------------------------------------------------------- ''' <summary>Object型からLong型変換</summary> ''' <param name="obj">変換元Object型データ</param> ''' <returns>変換後Long型データ(変換不可の場合は0)</returns> ''' -------------------------------------------------------- Public Function ObjectToLng(ByVal obj As Object) As Long Try Return Decimal.Parse(obj) Catch ex As Exception Return 0 End Try End Function ''' -------------------------------------------------------- ''' <summary>Object型からDouble型変換</summary> ''' <param name="obj">変換元Object型データ</param> ''' <returns>変換後Double型データ(変換不可の場合は0)</returns> ''' -------------------------------------------------------- Public Function ObjectToDbl(ByVal obj As Object) As Double Try Return Decimal.Parse(obj) Catch ex As Exception Return 0.0 End Try End Function ''' -------------------------------------------------------- ''' <summary>Object型からString型変換</summary> ''' <param name="obj">変換元Object型データ</param> ''' <returns>変換後String型データ(変換不可の場合は"")</returns> ''' -------------------------------------------------------- Public Function ObjToStr(ByVal obj As Object) As String Try Return obj.ToString Catch ex As Exception Return "" End Try End Function このソースは単に「Public Function」と宣言していますので、 静的なModuleかSharedなクラスで宣言してどこからでも参照出来る様にすればいいと思います。
2個のSPREADコントロールをフォームに貼って、それぞれ2列×5行のシートを同じ様に設定します。 基本的な設定はSPREADコントロールのデザイナで設定していますが、以下の様な表示になります。
今回の動作の想定は以下の様に考えます。 ・セルは全てテキスト入力で「←」「→」はセル内での左右移動 ・「Tab」、「Enter」、「Ctrl」+「←」、「Ctrl」+「→」はアクティブセルの移動 但し、左SPREADのDATA2の最下行セルの場合、右SPREADのDATA1の先頭セルに移動 また、右SPREADのDATA1の先頭セルの場合、左SPREADのDATA2の最下行セルに移動 今回の処理では以下の処理が肝になります。
■初期処理でのSPREADのキー動作設定 そのままですと、矢印キーなどでアクティブセルの移動ができないのでキー制御をフォームロード時に行います。 ・入力マップの変更で編集中セルでの「Enter」キー動作を指定します。 ・各セルをTextCellTypeにしますが、「矢印キー」の動作を、「矢印キー」のみはカーソルのセル内のみ左・右移動で、 「Ctrl」+「矢印キー」はセル編集を終了し、アクティブセルのカーソル方向移動に設定します。 ■Advanceイベントでの処理 AdvanceイベントはSPREADコントロールからフォーカスが移動する場合に発生します。 今回の場合は以下のキー入力でイベントが発生します。 ・DATA1カラムで「Shift」+「←」、「Tab」、「Enter」 ・DATA2カラムで「Shift」+「→」、「Tab」、「Enter」 ・DATA1カラム及びDATA2カラムの先頭行で「↑」 ・DATA1カラム及びDATA2カラムの最下行で「↓」 左SPREADでのAdvanceイベントで、DATA2カラムで最下行の場合、イベントの「e」引数の「Cancel」プロパティを Falseにすることでデフォルト処理をさせることで、右SPREADにフォーカスが移動します。 右SPREADでのAdvanceイベントで、DATA1カラムで先頭行の場合、イベントの「e」引数の「Cancel」プロパティを Falseにすることでデフォルト処理をさせることで、左SPREADにフォーカスが移動します。 Imports FarPoint.Win.Spread Public Class Form1 'フォームの初期化 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'SpreadのSPREADの「Enter」キー設定,各セルの「Ctrl」+「矢印」でアクティブセル移動への設定 SetSpreadAttr(Me.FpSpread1) SetSpreadAttr(Me.FpSpread2) 'Spreadのフォーカス枠非表示 ClearSpreadActiveFrame(Me.FpSpread1) ClearSpreadActiveFrame(Me.FpSpread2) End Sub 'Spread編集開始時処理 Private Sub FpSpread1_EditModeOn(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles FpSpread1.EditModeOn, FpSpread2.EditModeOn '編集中セルの背景色を変更する CType(sender.EditingControl, CellType.GeneralEditor).BackColor = Drawing.Color.Moccasin End Sub '左のSpreadでの最下行での右Spreadへの移動制御 Private Sub FpSpread1_Advance(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.AdvanceEventArgs) _ Handles FpSpread1.Advance With CType(sender, FpSpread).ActiveSheet '最終セル?? If .ActiveRowIndex = .RowCount - 1 And .ActiveColumnIndex = .ColumnCount - 1 Then e.Cancel = False FpSpread2.ActiveSheet.SetActiveCell(0, 0) End If End With End Sub '右のSpreadでの最上行での左Spreadへの移動制御 Private Sub FpSpread2_Advance(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.AdvanceEventArgs) Handles _ FpSpread2.Advance With CType(sender, FpSpread).ActiveSheet '先頭セル?? If .ActiveRowIndex = 0 And .ActiveColumnIndex = 0 Then e.Cancel = False FpSpread1.ActiveSheet.SetActiveCell(4, 1) End If End With End Sub 'Spreadフォーカス取得時イベント Private Sub FpSpread1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles FpSpread1.Enter, FpSpread2.Enter Dim spd As FpSpread = CType(sender, FpSpread) If spd.Name = "FpSpread1" Then '左のSpreadのフォーカス取得 ResetSpreadActiveFrame(Me.FpSpread1) '左Spreadフォーカス枠表示 ClearSpreadActiveFrame(Me.FpSpread2) '右Spreadフォーカス枠非表示 Else '右のSpreadのフォーカス取得 ClearSpreadActiveFrame(Me.FpSpread1) '左Spreadフォーカス枠非表示 ResetSpreadActiveFrame(Me.FpSpread2) '右Spreadフォーカス枠表示 End If End Sub 'Spreadのフォーカス枠を表示 Private Sub ResetSpreadActiveFrame(ByVal spd As FpSpread) ' フォーカスインジケータをリセット spd.ResetFocusRenderer() End Sub 'Spreadのフォーカス枠を非表示 Private Sub ClearSpreadActiveFrame(ByVal spd As FpSpread) ' フォーカスインジケータを非表示 spd.FocusRenderer = New FarPoint.Win.Spread.DefaultFocusIndicatorRenderer(0) End Sub 'SPREADの「Enter」キー設定,各セルの「Ctrl」+「矢印」でアクティブセル移動 Private Sub SetSpreadAttr(ByVal spd As FpSpread) '編集セルでの[Enter]キーを「次列へ移動」 Dim im As New InputMap im = spd.GetInputMap(InputMapMode.WhenAncestorOfFocused) im.Put(New Keystroke(Keys.Enter, Keys.None), SpreadActions.MoveToNextColumn) For Row = 0 To spd.ActiveSheet.RowCount - 1 '[矢印キー]のみ :カーソルのセル内のみ左・右移動 '[Ctrl]+[矢印キー]:セルは編集を終了し、アクティブセルのカーソル方向移動 Dim tc As New FarPoint.Win.Spread.CellType.TextCellType tc.AcceptsArrowKeys = FarPoint.Win.SuperEdit.AcceptsArrowKeys.Arrows spd.ActiveSheet.Rows(Row).CellType = tc Next End Sub End Class ■EditModeOnイベントでの処理 尚、現在のセルを分かりやすくするために、EditModeOnイベント(編集開始時処理)で編集中セルの背景色を変更しています。
■関連記事 ⇒VB.NET:SpreadでのEnter時にセルを右移動させる方法 ⇒VB.NET:Spreadでフォーカスを持っていない時にセル枠を表示しない設定 ⇒VB.NET:Spreadのヘッダカラム及び、通常のカラムの連結 ⇒VB.NET:Spreadのシートへの簡単な一覧データの設定について ⇒VB.NET:Spreadのシートのセルにボタン、テキスト、チェックボックスのセルタイプの設定 ⇒VB.NET:Spreadのセルのボタンクリック時のイベント処理 ⇒VB.NET:Spreadのセルへのデータ設定の描画速度アップ ⇒VB.NET:Spreadのセルのチップウインドウで別に設定された文字列を表示する ⇒VB.NET:Spreadでデータ一覧表示を簡単に行う方法について ⇒VB.NET:Spreadデータ一覧表示での行選択処理(CellDoubleClickイベント , KeyDownイベント) ⇒VB.NET:Spreadデータ一覧表示での行選択処理(CellDoubleClickイベント , KeyDownイベント)その2 ⇒VB.NET:Spreadデータ一覧表示での自動ソート実行時に複数のソート条件を指定する方法について ⇒VB.NET:Spreadで異なるSPREADコントロール間でシートデータのコピーを行う方法 ⇒VB.NET:SpreadでのCSV出力とCSV入力を使って、異なるSPREADコントロール間でシートデータのコピーを行う方法 ⇒VB.NET:SpreadシートのPDF出力と表示を行う方法 ⇒VB.NET:Spreadの数値セルタイプを使ってデータメンテナンスのプログラムに使う方法 ⇒VB.NET:Spreadのテキストセルでバイト数入力制限を掛ける方法 ⇒VB.NET:Spreadのチェックボックス型セルにはCheckChangedイベントを、ボタン型セルにはClickイベントの発生方法
たまにDOSプロンプトを開いて作業を行いたい場合があります。 ただ、フォルダの階層が深い場合にはDOSプロンプトを開いてそのディレクトリに 「CD」コマンドでチェンジすることが面倒なときがあります。 その時は、以下のバッチファイルをそのディレクトリに置いて実行します。 %SystemRoot%\system32\cmd.exe cd %~p0
「dos.bat」が該当するバッチなので、それを起動します。
PostgreSQLでシステム日付を取得する場合には、以下の様なFROMの無いSQL文で行います。 PostgreSQLではFROMが必要なければ記述することはありません。 PostgreSQLの「SQL Shell(psql)」で実行します。 postgres=# SELECT NOW(); now ---------------------------- 2016-03-10 14:44:20.369+09 (1 行) 定数を同時にSELECT取得することもできます。 postgres=# SELECT NOW() AS DATETIME, 1 AS NumberTest, 'TEST' AS StringTest; datetime | numbertest | stringtest ----------------------------+------------+------------ 2016-03-10 14:47:16.987+09 | 1 | TEST (1 行) ここで、PostgreSQLの面白い関数について紹介します。 それが「generate_series」で複数行の整数を返すことができます。
generate_series(start, stop)
generate_series(start, stop, step)
以下にその例を示します。 postgres=# SELECT generate_series(1, 3); generate_series ----------------- 1 2 3 (3 行) postgres=# SELECT * FROM generate_series(1, 3); generate_series ----------------- 1 2 3 (3 行) postgres=# SELECT NumTbl.NumVal FROM generate_series(1, 3) AS NumTbl(NumVal); numval -------- 1 2 3 (3 行) 1番目の様にSELECT文のなかのカラムを記述するところにいれてもいいですし、 また、2番目の様にFROM句でテーブル扱いにしてもOKです。 さらに、3番目ではテーブルの別名として「NumTbl(NumVal)」(仮にここでの命名)とすると 生成される数値を「NumTbl」テーブルのカラム名「NumVal」で参照ができます。 この3番目の方法を使うことでいろいろ応用が利くと思います。 以下は、今日からの3日間を羅列するSQL文になります。 postgres=# SELECT current_date + N.V FROM generate_series(1, 3) AS N(V); ?column? ------------ 2016-03-11 2016-03-12 2016-03-13 (3 行)
このブログで「CSE」についての記事が在りますが、 「CSE」でヘルプを見ようと思うと以下の様な表示になります。
「CSE」は古いソフトなのでヘルプファイルが「.hlp」の拡張子で 形式が古いので、Windows7等ではそのままでは表示できません。 古いソフトに付属するヘルプファイル(".hlp" の拡張子を持つ32 ビット ヘルプ ファイル)を 表示するためには、Microsoftが提供する以下のプログラムをインストールする必要があります。 ■Windows7用 ・Windows 7 用 Windows Help プログラム(WinHlp32.exe) ■Windows8用 ・Windows 8.1 用 Windows Help プログラム (WinHlp32.exe) 上記のプログラムをインストールしたら、「CSE」のヘルプファイルが見られる様になりました。
最近のコメント