HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0907
GrapeColor(DION)ファイルのアクセス権取得(?)8解決


GrapeColor(DION)

リンク

2012/9/7(Fri) 14:13:44|NO.49188

現在音楽プレイヤーを作っているGrapeColorです。
近状を一応報告すると、バージョン5を今まで作っていたのですが、デザインに拘った結果、
ダサくて重いプレイヤーが完成してしまったので、只今バージョン6としてプログラムを作り直しています。
一応プログラムを1から作り直すたびにバージョンが上がってます。

それはさて置き本題に入ります。
(※この先文章がおかしくなると思いますが、ご了承ください)
MCIにロードしているファイルは使用中なので移動等ができ無くなりますよね?
しかしリストボックスにファイル名がストックされているファイルは事実上使用されていないので移動も削除も自由にできてしまいます。
これでは困るので移動できないようにアクセス権(?)を取得したいのですが、方法が分かりません。
どなたか教えてください。



この記事に返信する


KA

リンク

2012/9/7(Fri) 16:30:50|NO.49193

他の市販ソフトも、そういう仕様だと思います。

逆に質問の方法を実現するには、ソフトを起動していなくても
ロックさせる事と同じ様な気がします。



cats

リンク

2012/9/7(Fri) 18:07:23|NO.49195

めちゃくちゃ便利なDLLです。
http://www.vector.co.jp/soft/winnt/prog/se370279.html
HSPでは以下の様に記述します。

#uselib "SecCtl.dll" #func FileLockControl "FileLockControl" str,int FileLockControl "ファイル名",1 stop



GrapeColor(DION)

リンク

2012/9/7(Fri) 18:34:50|NO.49196

>>catsさん
おお
これは便利そう
ところでこのDLLはロックしたファイルをアプリケーション終了時に自動で開放するのですか?
それとも手動ですか?



cats

リンク

2012/9/7(Fri) 18:36:39|NO.49197

>ところでこのDLLはロックしたファイルをアプリケーション終了時に自動で開放するのですか?
説明書にありますが自動で開放します。



GrapeColor(DION)

リンク

2012/9/7(Fri) 18:40:24|NO.49199

すみません
今仕様書を読みました
自動開放されるとは書いてありますが、個々に開放したほうがいいと書いてあります。
これは何故なのでしょうか?
あと、開放する場合ですが第二パラメーターを0にすればいいのでしょうか



inovia

リンク

2012/9/7(Fri) 19:51:19|NO.49200

Win32APIを利用するなら例えばこんな感じ。

#include "kernel32.as" #define INVALID_HANDLE_VALUE -1 #define GENERIC_READ 0x80000000 #define OPEN_EXISTING 3 #define FILE_ATTRIBUTE_NORMAL 0x00000080 #define NULL 0 title "ロックするファイルを選択してください" dialog "*", 16 if (stat == 0) : end fname = refstr // ファイルハンドルを取得する CreateFileA fname, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL hFile = stat ; ファイルハンドル if (hFile == INVALID_HANDLE_VALUE){ dialog "ファイルハンドル取得失敗" : end } // ファイルサイズを取得 FileSizeHigh = 0 GetFileSize hFile, varptr(FileSizeHigh) FileSizeLow = stat if (FileSizeLow == -1){ dialog "ファイルサイズ取得失敗" gosub *close end } // ファイルをロックする LockFile hFile, 0, 0, FileSizeLow, FileSizeHigh if (stat == 0){ dialog "ロックに失敗しました" gosub *close end } dialog "OKボタンを押すと開放します" // ファイルのロックを解除する UnLockFile hFile, 0, 0, FileSizeLow, FileSizeHigh if (stat == 0){ dialog "ロックの解除に失敗しました" gosub *close end } gosub *close stop *close // ファイルハンドルを閉じる CloseHandle hFile return



cats

リンク

2012/9/7(Fri) 20:06:28|NO.49202

>自動開放されるとは書いてありますが、個々に開放したほうがいいと書いてあります。
念のためですので心配なら自分で開放してください。
>あと、開放する場合ですが第二パラメーターを0にすればいいのでしょうか
はい、そうです。



GrapeColor(DION)

リンク

2012/9/7(Fri) 21:01:10|NO.49204

catsさんが紹介してくださったプラグインを使用することにしました(簡単なので)。
KAさん、catsさん、inoviaさんありがとうございました。



ONION software Copyright 1997-2018(c) All rights reserved.