色々試していく内に解決しました。
以下、同じ問題で躓く人の為に。
原因
理由は分からないが、レジストリで自動実行した場合、GetCurrentDirectoryが正常に作動しない。
解決法
GetModuleFileNameは作動するのでこれで、自分のパスを取得し、それを切ったり、繋げたりして使う。
その他
パスが取得できなかった時の代わりなのか、"C:\Documents and Settings\ユーザー名"が勝手に取得され、
そこに本来あるはずのファイルが保存されてました。
GetFullPathNameも同様に、動作しません。
ファイル書き込みの注意
今までは、hFile = CreateFile("test.txt", GENERIC_WRITE, ~
となっていれば、実行ファイルと同じフォルダに書き込まれるが
フルパスを入れないと上記のようにC:\Documents~に書き込まれます。
コード
コード: 全て選択
Dim Buf As String
'パス取得
Buf = ZeroString(MAX_PATH)
GetModuleFileName(0, StrPtr(Buf), MAX_PATH)
Buf = MakeStr(Buf)
'整形の例
Buf = Left$(Buf, InStr(1, Buf, "sample.exe")-1) + "Test.ini"
konisiさん。レスありがとうございました。
ふぅ~、これで解決…
と思ったら、レジストリで自動実行した時のみ、今度はタスクトレイアイコンが表示されなくなりました。
透明のアイコンが追加されたかのようにタスクトレイに空きができますが、直にそのスペースも消えてしまいます。
これも、パス関係の不具合かもしれませんが、調べても分かりませんでした。
一応、タスクトレイアイコン部分を抜粋してコードを載せます。
引き続き、原因、解決法について、ご存知の方は教えて下さると助かります。宜しくお願いします。
もしかしたら、気づいてないだけで他にも不具合が出るのかも。
コード: 全て選択
'宣言
Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" ( _
ByVal dwMessage As Long, ByRef lpdata As NOTIFYICONDATA) As Long
Type NOTIFYICONDATA
cbSize As DWord '構造体のサイズ
hWnd As DWord 'ウィンドウハンドル
uID As DWord 'トレイアイコンID
uFlags As DWord '有効メンバを示すフラグ
uCallbackMessage As DWord 'メッセージコード
hIcon As DWord 'アイコンハンドル
szTip[63] As Byte 'ツールチップ文字列
End Type
Const MSG_TRAYICON = &H1000 'トレイアイコン用メッセージコード
Const NIM_ADD = &H0 'アイコンを登録
Const NIM_MODIFY = &H1 '登録内容を更新
Const NIM_DELETE = &H2 'アイコンを削除
'トレイアイコンのハンドルを取得
hIcon = LoadImage(CreateStruct.hInstance, IDI_ICON1, IMAGE_ICON, 16, 16, LR_SHARED)
FillMemory(VarPtr(TrayIcon),Len(TrayIcon),0) 'NOTIFYICONDATA構造体の初期化
With TrayIcon
.cbSize = Len(TrayIcon) '構造体のサイズ
.hWnd = hMainWnd
.uID = 1
.uFlags = &H1 or &H2 or &H4
.uCallbackMessage = MSG_TRAYICON
.hIcon = hIcon
lstrcpy(.szTip,"wait…")
End With
'追加
Shell_NotifyIcon(NIM_ADD,TrayIcon)
'時々トレイアイコンチップを更新する
lstrcpy(TrayIcon.szTip, tip + buffer)
Shell_NotifyIcon(NIM_MODIFY,TrayIcon)