Windowをはじめて起動したときだけ別のWindowを表示する
(使用承諾書のようなもの)にはどういったコードを書けばいいか
教えてください。
konishiさんへ
konishiではなくkonisiです。
外部にファイルを出力させる方式ならたやすいです。
MainWndとは別のウインドウに使用許諾書を作る。
Createイベント内で、例えばfast.iniファイルがあるかどうかを検索。
fast.iniファイルが正規のものだったら使用許諾書用のウインドウを表示せずにCreateイベントから抜ける。
fast.iniファイルが正規のものではなかったり、ファイル自体が無い場合は使用許諾書用のウインドウを表示させる。(CreateDialog関数を使う等する。)
使用許諾書に、EditBox一つとCommundButton二つを用意しておく。
同意しない という方のボタンを押された場合は、MainWnd_Destroy()関数を直接呼び出して終了させる。
同意する という方のボタンを押された場合は、正規のfast.iniファイルを作ってから、使用許諾書のウインドウを消す。(CreateDialog関数で作ったウインドウはEndDialog関数を使う。)
外部ファイルについて。
単純なコピーでの攻撃を回避したい場合は、半角文字列あるいは改行文字列の直後にバイナリデータで言う0を挟んでおくといい。バイナリエディタがない環境だとコピーするのが面倒である。
ファイル自体をコピーされることによる攻撃については、Windowsのシステムの状況(長い間不変のもの。OSの種類やCPUのクロック数等。)や環境変数をもとに暗号化された文字列を用いるなどするとよい。そうすればまったく同じ環境でない限りそのファイルは無意味なものになる。
レジストリに正規のデータを書き込むという手法もある。でもやや面倒。
MainWndとは別のウインドウに使用許諾書を作る。
Createイベント内で、例えばfast.iniファイルがあるかどうかを検索。
fast.iniファイルが正規のものだったら使用許諾書用のウインドウを表示せずにCreateイベントから抜ける。
fast.iniファイルが正規のものではなかったり、ファイル自体が無い場合は使用許諾書用のウインドウを表示させる。(CreateDialog関数を使う等する。)
使用許諾書に、EditBox一つとCommundButton二つを用意しておく。
同意しない という方のボタンを押された場合は、MainWnd_Destroy()関数を直接呼び出して終了させる。
同意する という方のボタンを押された場合は、正規のfast.iniファイルを作ってから、使用許諾書のウインドウを消す。(CreateDialog関数で作ったウインドウはEndDialog関数を使う。)
外部ファイルについて。
単純なコピーでの攻撃を回避したい場合は、半角文字列あるいは改行文字列の直後にバイナリデータで言う0を挟んでおくといい。バイナリエディタがない環境だとコピーするのが面倒である。
ファイル自体をコピーされることによる攻撃については、Windowsのシステムの状況(長い間不変のもの。OSの種類やCPUのクロック数等。)や環境変数をもとに暗号化された文字列を用いるなどするとよい。そうすればまったく同じ環境でない限りそのファイルは無意味なものになる。
レジストリに正規のデータを書き込むという手法もある。でもやや面倒。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
やってみたんですけど..
やってみたんですけど無効のエラーが5箇所くらいか表示されて
私の力じゃ無理かと思いまして返信いたしました。
どうかソースコードと解説の投稿をお願いします。
私の力じゃ無理かと思いまして返信いたしました。
どうかソースコードと解説の投稿をお願いします。
すんません、CreateDialogではなくDialogBoxでした。
適当に組んでみる。 [ここをクリックすると内容が表示されます]
それなりに適当なので参考程度にしてください。MainWnd.sbpA.sbp
コード: 全て選択
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim Check$ As String
Dim FileName$ As String
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
siyoukyodaku_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim Flag1=0 As Long
Check$="許諾書を見たと判断するためのファイル"'許諾書に同意したときにFileName$内の文字列(fast.ini)に記録される文字列
FileName$="fast.ini"'ファイル名
Open FileName$ For Append As #1
Close #1
Flag1=Check()
If Flag1=1 then'使用許諾書を見ていないと判断されたら
DialogBox(hMainWnd,"A")'使用許諾書を表示
End If
End Sub
Function Check() As Long
Dim A$ As String
'ファイルの内容を読み取る
Open FileName$ As #1
Field #1,Lof(1)
Input #1,A$
Close #1
'文字列が等しいかどうかの判断
If A$=Check$ then
Check=0
Else
Check=1
End If
End Function
Sub CreateMineFile()
Open FileName$ As #1
Field #1,Len(Check$)
Write #1,Check$
Close #1
End Sub
コード: 全て選択
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [A] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hA
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function AProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
AProc=EventCall_A(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub A_CommandButton2_Click()'同意しない を押したら
MainWnd_Destroy()'ソフトを終了させる
EndDialog(hA,0)'許諾書を閉じる
End Sub
Sub A_CommandButton1_Click()'同意する を押したら
CreateMineFile()'専用ファイルを出力する
EndDialog(hA,0)'許諾書を閉じる
End Sub
Sub A_Create(ByRef CreateStruct As CREATESTRUCT)
Dim Print$ As String
'許諾書に表示する文字列を代入する。
Print$=Ex"これは許諾書です。\r\nソース内で改行したい所は\\r\\nと入れます。"
SetWindowText(GetDlgItem(hA,EditBox1),Print$)
End Sub
Sub A_EditBox1_Change()'ボックス内の文字列が変更されたら
Dim CreateStruct As CREATESTRUCT
A_Create(CreateStruct)'強制的に元に戻す
End Sub
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。