PC起動時に自動実行させようとレジストリに登録したのですが

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: PC起動時に自動実行させようとレジストリに登録したのですが

RE:PC起動時に自動実行させようとレジストリに登録したのですが

by 吉澤和成 » 2006年1月29日(日) 16:41

なぜか、何もしてないのですが、タスクトレイアイコンが表示されないという現象が再現されなくなりました。
結果的にはよい方向になったわけですけど。

訂正
私の上の文で、「本来本来あるはずの」ではなく
「本来本来あるはずがない」の間違いですね。

新に分かった事
ショートカットを作って、それのパスをレジストリに登録すると
GetCurrentDirectoryで、正常に取得できるようです。
その時のショートカットファイル名が"sample.exe"の場合
登録する時は"sample.exe.lnk"にしないといけないようです。
予め"sample.lnk"にしても"sample.lnk.lnk"にしないといけないようです。

なんか、私一人で空回ってますね(泣)。
後進の人達の参考になれば、この空回りも存在意義があったはず。
この話題はこれにて終了です。みなさん、さようなら。orz

RE:PC起動時に自動実行させようとレジストリに登録したのですが

by 吉澤和成 » 2006年1月28日(土) 17:54

色々試していく内に解決しました。
以下、同じ問題で躓く人の為に。

原因
理由は分からないが、レジストリで自動実行した場合、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)

by konisi » 2006年1月27日(金) 02:02

レジストリはあまりよく分からないのですが・・・

ファイルの入出力の方で何かエラーがあるのかもしれません。と言うより、無いとは言い切れません。
実行するにあたって最低限のコードは提示してほしいものです。比較しやすくなるので。

あとは、Program FilesをProgram%20Filesと言う表記にしてみるとか。


すみません。<<何の解決にもならない発言について

PC起動時に自動実行させようとレジストリに登録したのですが

by 吉澤和成 » 2006年1月24日(火) 13:00

パソコン起動時に、作ったソフトを自動実行させようとレジストリに登録したのですが、
なぜか、ソフトは起動しますがファイルの読み書きが行なわれなくなってしまいました。
レジストリの登録/削除は出来ます。
勿論、普通にソフトを起動した場合や、スタートアップフォルダに入れて自動起動した場合は正常に動きます。

登録した場所は
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

読み書きしようとしたファイルは
ini、txt

OSは
WIN XP home sp2

一応、レジストリ登録コードを。RegEditで見ても正常に登録されてます。

コード: 全て選択

Dim hKey As HKEY
Dim strRegBuff As String

strRegBuff = C:\Program Files\ActiveBasic\MyProjects\Sample\Sample.exe

RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
0,NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,ByVal 0,hKey,NULL)
			
RegSetValueEx(hKey,"SampleName",0,REG_SZ,StrPtr(strRegBuff),lstrlen(StrPtr(strRegBuff)))

RegCloseKey(hKey)
原因、解決法について、ご存知の方は教えて下さると助かります。宜しくお願いします。

ページトップ