テキストエディタにファイルのフルパスを渡す。

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: テキストエディタにファイルのフルパスを渡す。

by M.S. » 2008年4月16日(水) 17:57

僕が投稿したトピックも参考にしてみてください。

ファイルの関連付け: http://www.activebasic.com/forum/viewtopic.php?t=2188

by ゲスト » 2008年4月14日(月) 12:10

konisiさん
ありがとうございました。

なんとか頑張ります。
また、よろしくお願いします。

by konisi » 2008年4月14日(月) 07:21

どうにもofn構造体に値を代入してそのまま放置しているように見えます。

ofn.lpstrFile=GetCommandLine()

ofn.lpstrFile=FileName
にして、
ofn.lpstrDefExt="*"
の直後に
GetOpenFileName(ofn)
を入れてみてください。

Createイベント内でやる動作じゃないので、ウインドウに割り当てられたメニュー内の
メニューIDにIDM_OPENが既に存在するなら
PostMessage(hMainWnd,WM_COMMAND,IDM_OPEN,0)
に置き換えるべきだとは思いますが。

by ゲスト » 2008年4月14日(月) 05:21

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

by konisi » 2008年4月14日(月) 04:28

いまいちやろうとしている事が伝わってきませんorz

起動するとき、コマンドプロンプト(ここでは#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)
ところでグローバル領域に式があるように見えるのですが、どんなソースコードになってますか?

by ゲスト » 2008年4月14日(月) 02:03

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="*"

by konisi » 2008年4月14日(月) 01:31

直接起動させずに あたりの意味がよくつかめませんが、
とりあえずGetCommandLine()関数の使い方は分かりますか?

テキストエディタにファイルのフルパスを渡す。

by ゲスト » 2008年4月13日(日) 23:17

よろしくお願いします。

「Active Basic オフィシャル ユーザーズ ガイド」で勉強しながら、
「テキストエディタ」を作ってみました。
ここで、質問ですが、直接起動させずにコマンドプロンプトから読み込ませたいファイルのフルパスを渡して起動させたいのですが、、、、。

よろしくお願いします。

ページトップ