登録日時: 2005年6月01日(水) 21:51 記事: 212
お住まい: 奈良県北西部
|
ファイルの関連付けで、
レジストリの部分は猫でもわかるプログラミングを見てできましたが、
コマンドラインの部分がうまくできていないのか、
関連付けたファイルをダブルクリックで開こうとすると、
「問題が発生したため、xxx.exe を終了します。 ご迷惑をおかけして申し訳ありません。」
というエラー報告のメッセージが出てきてしまいます。
*D & D ではちゃんと動きます
どこがいけないのでしょうか?
レジストリ部分 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: Dim hKey As HKEY
Dim file As String
Dim ico As String, pg As String
Dim buf As String
buf=String$(255,Chr$(0))
GetModuleFileName(0,buf,255)
file="SafetyNoteFile"
RegCreateKeyEx(HKEY_CLASSES_ROOT,".snf",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,ByVal 0,hKey,0)
RegSetValueEx(hKey,0,0,REG_SZ,file,Len(file))
RegCloseKey(hKey)
ico=ZeroString(255)
ico=Ex"\q"+buf
lstrcat(ico,Ex"\q")
lstrcat(ico,", 1")
RegCreateKeyEx(HKEY_CLASSES_ROOT,"SafetyNoteFile\DefaultIcon",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,ByVal 0,hKey,0)
RegSetValueEx(hKey,0,0,REG_SZ,ico,Len(ico))
RegCloseKey(hKey)
pg=ZeroString(255)
pg=Ex"\q"+buf
lstrcat(pg,Ex"\q")
lstrcat(pg," %1")
RegCreateKeyEx(HKEY_CLASSES_ROOT,"SafetyNoteFile\shell\open\command",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,ByVal 0,hKey,0)
RegSetValueEx(hKey,0,0,REG_SZ,pg,Len(pg))
RegCloseKey(hKey)
コマンドライン部分 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: Dim cFile As String ' グローバル変数
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim cbuffer As String
Dim hTop As Long
Dim hEnd As Long
cbuffer=GetCommandLine()
hTop=InStr(2,cbuffer,Ex"\q")-2
hTop=InStr(hTop,cbuffer,Ex"\q")+3
hEnd=InStr(hTop,cbuffer,Ex"\q")
' -----------------------
' その他の処理
' -----------------------
cFile=Mid$(cbuffer,hTop,hEnd-hTop)
If lstrcmpi(cFile,"")<>0 Then CommandLine() ' ファイルパスがあれば、CommandLine() を実行
End Sub
Sub CommandLine()
Dim FileName[MAX_PATH-1] As Byte
Dim res As Long
Dim Ext[255] As Byte
lstrcpy(FileName,cFile)
res=PathFindExtension(FileName)
wsprintf(Ext,"%s",res)
Dim hFile As Long
Dim dwFileSize As DWord
Dim dwAccessByte As DWord
Dim buffer As BytePtr
Dim i As Long
' 拡張子の判定
If lstrcmpi(Ext,".snf")=0 Then
CopyFile(FileName,temp,FALSE)
For i=1 to 3
HexadecimalDecode(hMainWnd,temp,out)
If CopyFile(out,temp,FALSE)=FALSE Then
MessageBox(hMainWnd,"エンコードに失敗",0,MB_OK or MB_ICONSTOP)
Exit Sub
End If
Next i
hFile=CreateFile(temp,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,"ファイル オープンに失敗","SafetyNote",MB_OK or MB_ICONEXCLAMATION)
Exit Sub
End If
dwFileSize=GetFileSize(hFile,0)
buffer=malloc(dwFileSize+1)
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)
buffer[dwAccessByte]=0
CloseHandle(hFile)
SetWindowText(hEdit,buffer)
SendMessage(hStatus,SB_SETTEXT,0,FileName)
free(buffer)
Else
hFile=CreateFile(FileName,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,"ファイル オープンに失敗","SafetyNote",MB_OK or MB_ICONEXCLAMATION)
Exit Sub
End If
dwFileSize=GetFileSize(hFile,0)
buffer=malloc(dwFileSize+1)
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)
buffer[dwAccessByte]=0
CloseHandle(hFile)
SetWindowText(hEdit,buffer)
SendMessage(hStatus,SB_SETTEXT,0,FileName)
free(buffer)
End If
SetFocus(hEdit)
MainWnd_EditBox1_Change()
End Sub
コマンドラインの取得部分は、
SPIRIT さんの WinTips のものを引用しました。
AB Ver.: 5.00.00 (CP3)
|
|