PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
18831 03/02/07 23:24:10 RE(2):自分のEXEの在り処 By isii
18827 03/02/07 17:39:20 RE(1):自分のEXEの在り処 By coo
18825 03/02/07 16:54:49 自分のEXEの在り処 By namahamu21

カテゴリ:スクリプトの記述
日付:2003年02月07日 23:24 発信者:isii
題名:RE(2):自分のEXEの在り処

namahamu21さん、cooさん、こんばんは。

>>自分のEXEファイルのフォルダパスを知りたいのですが、
>>どのように取得するのでしょうか?
>>どなたかご存知ないですか、凄く急いでます。
>>よろいくお願いします。

>API関数で取得出来たと思います。
>外部関数定義は、PBでは下記でOKだと思います。

>Function Long GetCurrentDirectory(Long BuffLen, ref string dir) &
>         LIBRARY \"kernel32\" Alias for \"GetCurrentDirectoryA\"
>Function Long SetCurrentDirectory(String PathName) &
>         LIBRARY \"kernel32\" Alias for \"SetCurrentDirectoryA\"
基本的には、GetCurrentDirectoryA()でいいのですが、SetCurrentDirectoryA()、
GetFileOpenName()、GetFileSaveName()を使用した後等で、カレントが変わって
いる可能性がありますので、私は、GetModuleFileNameA()から求めるようにしてい
ます。

以下に、例を記述します。
記述例の仕様
・EXEファイルは[アプリケーション名].EXEとする。
・PBから実行(PBLの状態で)した場合は、カレントディレクトリとする。

・グローバル外部関数の定義
function ulong GetCurrentDirectoryA(ulong lBuf, ref string CurDir) &
library \"kernel32.dll\"
function ulong GetModuleFileNameA(ulong hWnd, ref string Fname, ulong lBuf) &
library \"kernel32.dll\" 

・スクリプト
// アプリケーション名を求める
Application app
app = GetApplication()

// カレントディレクトリを求める
ulong  lBuf
string CurDir
lBuf = 260
CurDir = Space( lBuf + 1 )
GetCurrentDirectoryA( lBuf, CurDir )

// 実行ファイル名を求める
string FileName, work
FileName = Space( lBuf + 1 )
GetModuleFileNameA( Handle( this ), FileName, lBuf )
work = Upper( FileName )

// 実行ディレクトリを求める
string PathName
long   index
index = Pos( work, \"\\\" + Upper( app.AppName ) + \".EXE\" )
if index > 0 then
  PathName = Left( FileName, index - 1 )
else
  PathName = CurDir
end if


付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows 2000
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

OS Windows 2000
DBMS Oracle 8.0
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.