よろしくお願いします。
「Active Basic オフィシャル ユーザーズ ガイド」で勉強しながら、
「テキストエディタ」を作ってみました。
ここで、質問ですが、直接起動させずにコマンドプロンプトから読み込ませたいファイルのフルパスを渡して起動させたいのですが、、、、。
よろしくお願いします。
テキストエディタにファイルのフルパスを渡す。
直接起動させずに あたりの意味がよくつかめませんが、
とりあえずGetCommandLine()関数の使い方は分かりますか?
とりあえずGetCommandLine()関数の使い方は分かりますか?
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
konisi さん ありがとうございます。
「直接起動」というのはただ単にこのテキストエディタを立ち上げて、
「開く」からファイルを読み込む。。。ということを表現した次第です。
GetCommandLine()をロード時の関数内に挿入しましたが。
やっぱりできないみたい。
お願い教えてください。よろしくお願いします。
Sub TEST_Create(ByRef CreateStruct As CREATESTRUCT)
GetCommandLine(FilePath)
End Sub
'OPENFILENAME構造体の初期化
Dim ofn As OPENFILENAME
Dim FilePath[MAX_PATH] As Byte
Dim FN1[MAX_PATH] As Byte
Dim lpBuffer[255] As Byte
'FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lpstrInitialDir=NULL
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex" TXTデータ(*.*)\0*.*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=FilePath
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle=""
ofn.Flags=OFN_EXPLORER or OFN_ALLOWMULTISELECT OR OFN_OVERWRITEPROMPT or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
ofn.lpstrDefExt="*"
「直接起動」というのはただ単にこのテキストエディタを立ち上げて、
「開く」からファイルを読み込む。。。ということを表現した次第です。
GetCommandLine()をロード時の関数内に挿入しましたが。
やっぱりできないみたい。
お願い教えてください。よろしくお願いします。
Sub TEST_Create(ByRef CreateStruct As CREATESTRUCT)
GetCommandLine(FilePath)
End Sub
'OPENFILENAME構造体の初期化
Dim ofn As OPENFILENAME
Dim FilePath[MAX_PATH] As Byte
Dim FN1[MAX_PATH] As Byte
Dim lpBuffer[255] As Byte
'FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lpstrInitialDir=NULL
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex" TXTデータ(*.*)\0*.*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=FilePath
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle=""
ofn.Flags=OFN_EXPLORER or OFN_ALLOWMULTISELECT OR OFN_OVERWRITEPROMPT or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
ofn.lpstrDefExt="*"
いまいちやろうとしている事が伝わってきませんorz
起動するとき、コマンドプロンプト(ここでは#prompt(BASIC PROMPT)ではなく、cmd.exe)から例えば
D:\>Notepad.exe "D:\1.txt"
と等と入力したとき、下のコードは(実行ファイル名がNotepad.exeで、かつDドライブのルート直下に置かれている場合は)「Notepad.exe "D:\1.txt"」と表示します。
ところでグローバル領域に式があるように見えるのですが、どんなソースコードになってますか?
起動するとき、コマンドプロンプト(ここでは#prompt(BASIC PROMPT)ではなく、cmd.exe)から例えば
D:\>Notepad.exe "D:\1.txt"
と等と入力したとき、下のコードは(実行ファイル名がNotepad.exeで、かつDドライブのルート直下に置かれている場合は)「Notepad.exe "D:\1.txt"」と表示します。
コード: 全て選択
#console
Print MakeStr(GetCommandLine())
/*このPrint文は、ここでは
Notepad.exe "D:\1.txt"
と表示する。*/
Sleep(-1)
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
konisi さん
ありがとうございます!
以下が全ソースです。(ごめんなさい)
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
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()
TextEditor_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer)
dim rc as RECT
dim hEdit2 as HWND
'クライント領域のサイズを取得
GetClientRect(hMainWnd,rc)
'EditBox1のウィンドウハンドルを取得
hEdit2=GetDlgItem(hMainWnd,EditBox1)
'hEditの大きさを変更する
MoveWindow(hEdit2,0,0,rc.right,rc.bottom,0)
'フォーカスをセット
SetFocus(hEdit2)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
dim hEdit as HWND
Dim ofn As OPENFILENAME
dim hFile as HWND
dim dwFileSize as DWord
dim dwAccessByte as DWord
dim FileName[MAX_PATH-1] as Byte
dim buffer as BytePtr
FillMemory(VarPtr(ofn),Len(ofn),0)
'ofn.lpstrInitialDir=NULL
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex"all files(*.*)\0*.*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=GetCommandLine()
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle=""
ofn.Flags=OFN_EXPLORER or OFN_ALLOWMULTISELECT OR OFN_OVERWRITEPROMPT or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
ofn.lpstrDefExt="*"
hFile=CreateFile(ofn.lpstrFile,GENERIC_READ,FILE_SHARE_READ OR FILE_SHARE_WRITE,ByVal 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
if hFile=INVALID_HANDLE_VALUE then
MessageBox(hMainWnd,"Can not open the file",ofn.lpstrFile,MB_ICONEXCLAMATION)
End If
dwFileSize=GetFileSize(hFile,0)
buffer=malloc(dwFileSize+1)
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)
buffer[dwAccessByte]=0
CloseHandle(hFile)
hEdit=GetDlgItem(hMainWnd,EditBox1)
SetWindowText(hEdit,buffer)
free(buffer)
SetFocus(hEdit)
End Sub
ありがとうございます!
以下が全ソースです。(ごめんなさい)
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
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()
TextEditor_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer)
dim rc as RECT
dim hEdit2 as HWND
'クライント領域のサイズを取得
GetClientRect(hMainWnd,rc)
'EditBox1のウィンドウハンドルを取得
hEdit2=GetDlgItem(hMainWnd,EditBox1)
'hEditの大きさを変更する
MoveWindow(hEdit2,0,0,rc.right,rc.bottom,0)
'フォーカスをセット
SetFocus(hEdit2)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
dim hEdit as HWND
Dim ofn As OPENFILENAME
dim hFile as HWND
dim dwFileSize as DWord
dim dwAccessByte as DWord
dim FileName[MAX_PATH-1] as Byte
dim buffer as BytePtr
FillMemory(VarPtr(ofn),Len(ofn),0)
'ofn.lpstrInitialDir=NULL
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex"all files(*.*)\0*.*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=GetCommandLine()
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle=""
ofn.Flags=OFN_EXPLORER or OFN_ALLOWMULTISELECT OR OFN_OVERWRITEPROMPT or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
ofn.lpstrDefExt="*"
hFile=CreateFile(ofn.lpstrFile,GENERIC_READ,FILE_SHARE_READ OR FILE_SHARE_WRITE,ByVal 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
if hFile=INVALID_HANDLE_VALUE then
MessageBox(hMainWnd,"Can not open the file",ofn.lpstrFile,MB_ICONEXCLAMATION)
End If
dwFileSize=GetFileSize(hFile,0)
buffer=malloc(dwFileSize+1)
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)
buffer[dwAccessByte]=0
CloseHandle(hFile)
hEdit=GetDlgItem(hMainWnd,EditBox1)
SetWindowText(hEdit,buffer)
free(buffer)
SetFocus(hEdit)
End Sub
どうにもofn構造体に値を代入してそのまま放置しているように見えます。
ofn.lpstrFile=GetCommandLine()
を
ofn.lpstrFile=FileName
にして、
ofn.lpstrDefExt="*"
の直後に
GetOpenFileName(ofn)
を入れてみてください。
Createイベント内でやる動作じゃないので、ウインドウに割り当てられたメニュー内の
メニューIDにIDM_OPENが既に存在するなら
PostMessage(hMainWnd,WM_COMMAND,IDM_OPEN,0)
に置き換えるべきだとは思いますが。
ofn.lpstrFile=GetCommandLine()
を
ofn.lpstrFile=FileName
にして、
ofn.lpstrDefExt="*"
の直後に
GetOpenFileName(ofn)
を入れてみてください。
Createイベント内でやる動作じゃないので、ウインドウに割り当てられたメニュー内の
メニューIDにIDM_OPENが既に存在するなら
PostMessage(hMainWnd,WM_COMMAND,IDM_OPEN,0)
に置き換えるべきだとは思いますが。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。