> (1)は無理なんですね・・・EXECでメモ帳起動させてパラメータの個所へ細工すれば出来るのかな?と安易に考えてました。
> そこでフィルタリングは諦めそのまま通常通りにファイル(*.mm2)を開く事にしたのですが、この開いたファイル名を保存しておいて後で又利用したい場合はどの様にしておいたら良いのでしょうか?
無理ではないです。Sinryowさんの投稿をよく見てください。
> (A)ABで「.mm2ファイルを選択し,そのファイルをメモ帳で開くようにする」ソフトを作る。(ファイルの編集はメモ帳で行う)
> (A)の方法は簡単です。ファイル選択ダイアログを呼び出して,そのファイルをShellExecuteでメモ帳から実行すればよいですので。
> どちらの場合も,GetOpenFileName関数を呼ぶ際にOPENFILENAME構造体のlpstrFilterメンバを
コード: 全て選択
ofn.lpstrFilter=Ex"MM2 ファイル(*.mm2)\0*.mm2\0すべてのファイル(*.*)\0*\0\0"
のようにしてやればよいです。
とあります。
要するにファイルの選択(フィルタリング含む)は自前のプログラムで行って、そのファイル名を取得、その後メモ帳などに渡してファイルを開いてもらう、ということになります。
ファイル名を自分で取得するので、後で利用するのも簡単です。
とりあえずこれ↓をソースに貼り付けておき、
Win32プログラミング講座 ~ Step14. DLLを作る ~ より抜粋、一部変更 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Function GetFileDlg(hWnd As Long, lpBuf As BytePtr, lpFilter As BytePtr, bOpen As Long) As Long
Dim ofn As OPENFILENAME
'OPENFILENAME構造体の初期化
FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hWnd
ofn.lpstrFilter=lpFilter
ofn.nFilterIndex=1
ofn.lpstrFile=lpBuf
ofn.nMaxFile=MAX_PATH
ofn.Flags=OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
ofn.lpstrDefExt="*"
If bOpen Then
'「ファイルを開く」ダイアログ ボックスを表示
If GetOpenFileName(ofn)=0 Then
GetFileDlg=0
Exit Sub
End If
Else
'「名前を付けて保存」ダイアログ ボックスを表示
If GetSaveFileName(ofn)=0 Then
GetFileDlg=0
Exit Sub
End If
End If
GetFileDlg=1
End Function
↓このようにすればフィルタリングができます。
コード: 全て選択
Dim FileName[MAX_PATH] As Byte
Dim lpFil As BytePtr
lpFil=Ex"ネットリスト ファイル(*.mm2)\0*.mm2\0すべてのファイル(*.*)\0*\0\0"
'「ファイルを開く」ダイアログ ボックスを表示
If GetFileDlg(0, FileName, lpFil, TRUE) Then
MessageBox(0,FileName,"選択されたファイルのパス",MB_OK)
End If
'プロセス終了
ExitProcess(0)
なお、この関数GetFileDlg()で取得するファイル名はフルパスです。
ファイルのタイトル名(test.mm2とか)が必要なら、
(1)ofn.lpstrFileTitleを取得できるようにする
(2)Win32API:GetFileTitle()関数を使う
(3)AB標準関数:_splitpathを使う
のどれかを試してください。
> 'メモ帳を起動
> ShellExecute(0,"open","C:\WINDOWS\notepad.exe",NULL,NULL,SW_SHOWDEFAULT)
> 'ここで実際に開くファイルを後で使用したいのです。
> 'execとShellExecuteの違いが余り良く理解出来てません
ヘルプセンターを見れば大体のことが書いてありますが、
lpOperationに "open" を指定し、lpFileにファイルのパス名を指定すれば、エクスプローラ上でファイルをダブルクリック、または右クリック→[開く]を選択したときと同じ動作をします。(拡張子に関連付けられたアプリで開く)
コード: 全て選択
ShellExecute(0,"open",FileName,NULL,NULL,SW_SHOW)
メモ帳など、特定のアプリで開くなら、lpFileに実行ファイルを指定し、lpParametersにファイルパスを指定します。
コード: 全て選択
ShellExecute(0,"open","notepad",FileName,NULL,SW_SHOW)
ちょうどコマンドプロンプトで
コード: 全て選択
C:\>notepad "ファイルのパス"
などと入力したときとほぼ同じと考えてよいです。