これは、メモ帳(c:\Windows\notepad.exe)を起動させるプログラムの例です。
ここで作成するプログラムは、ボタンを押すことで、API WritePrivateProfileString を使って、プログラム・アプリケーションの経路を検索して、ファイルの中にテキスト行を書きこみます。
そして、アプリケーション(メモ帳)を実行することができます。
私たちは Single Instance だけのコードの書き方を、学びます。
メニューの、「ファイル」→「新規プロジェクト」で、Program と言う名前のプロジェクトを作って下さい。
テンプレートとして DialogAsMain.tpl を選んで下さい。
重要なポイントです:
Program.rcファイルをクリックして、IDD_DIALOG ダイアログを選択します。
ここに、上の画面のように、2つのテキスト・ボックス(editbox,EditText) と、ボタン(Button)を作成します。
Button の Caption は、&Run Notepad とします。
Path only と Full path の文字列は、Static で設定します。
IDD_DIALOG ダイアログのプロパティ画面を見て下さい。
Caption を Basics of API using FbEdit に変更します。
その下の CLASS の行に、DLGCLASS が有るので、これを MYCLASS に変えます。
私たちがプログラムのクラスを変えるのは、これが初めてです。
他のプログラムとの衝突を防ぐために、こうします。
2つの editbox(EditText) のプロパティを、それぞれ選択します。
LOCKED を TRUE に、AUTOSCROLL を HORIZONTAL(xStyle で AUTOHSCROLL を選択) に設定します。
Dialogs 境界を TOOL に、SIZEBORDER のプロパティを FALSE に設定します。
これは、私たちのために TOOLWINDOW を作成します。
ここでまた、適当なアイコンを追加するのを、忘れないで下さい。
SYSMENU に FALSE を設定すると、終了ボタン「x」が、TOOLWINDOW で見えなくなるのが、分かります。
それで、SYSMENU を TRUE に設定していることを確認して下さい。
プログラムは、ALT+F4か、タスク・マネージャでも、閉じることができます。
作業を終わると、下のような画面になるはずです。:
Const ClassName="DLGCLASS"
を、下のように。
Const ClassName="MYCLASS" '(like we did in the dialog editor)
そして、プログラムの最後の部分に、以下を追加します。
Const Settings="Settings.ini"
Const process="c:\Windows\notepad.exe"
Dim Shared AppPath As ZString*256
' the buffer to store our application
path
'this is what we need to run other
programs
Dim Shared processinfo As PROCESS_INFORMATION
Dim Shared startinfo As STARTUPINFO
アイコン、テキスト・ボックス(EDITBOX)、ボタンの全てに、コードを付けることを、忘れないで下さい。
今後、この説明は繰り返しませんので、ここで覚えておいて下さい。
Program.bi ファイルはできました。これを閉じることができます。
コードは、以下のものを、 Dim msg As MSG の下に追加します:
' Single Instance
hWnd=FindWindow(@ClassName,NULL)
If hWnd Then
ShowWindow(hWnd,SW_RESTORE)
SetForegroundWindow(hWnd)
Return 0
EndIf
Dim buffer As ZString*256
Dim x As Integer
そして、WM_INITDIALOG に移ります。
ICON のコードを追加します。
まず、チュートリアル1で追加したものと同じ以下の2行のコードを、
hWnd=hWin の後に追加します。
hIcon= LoadIcon(hInstance,Cast(ZString Ptr,500)) ' our first Win API loading icon to our created window
SendMessage(hWin,WM_SETICON,NULL,Cast(LPARAM,hIcon)) ' our second WIN API sets the loaded icon to our dialog
その後に、以下を追加します。
' Get full path of our program
GetModuleFileName(NULL,@AppPath,260)
' Remove program name
While TRUE
If InStr(x+1,AppPath,"\") Then
x=InStr(x+1,AppPath,"\")
Else
Exit While
EndIf
Wend
AppPath[x]=NULL
SetDlgItemText(hWin,IDC_EDT1,@AppPath)
' Combine two strings
lstrcat(@AppPath,@Settings)
SetDlgItemText(hWin,IDC_EDT2,@AppPath)
' WIN API to write a line of text to an *.ini file
WritePrivateProfileString(@AppName,@ClassName,@process,@AppPath)
notepad(メモ帳)に適用するボタンのコードは、以下です。:
これを、 Select Case LoWord(wParam) の case の一つとして追加します。
Case IDC_BTN1
CreateProcess(@process,0,0,0,0,CREATE_NEW_CONSOLE,0,0,@startinfo,@processinfo)
これで終わりです。
この事例のコードを、 ここで、ダウンロードできます。