- PR -

環境変数について

投稿者投稿内容
ベジータ
会議室デビュー日: 2007/10/29
投稿数: 14
投稿日時: 2007-11-05 10:00
お世話になります。

ターミナルサービス上等でユーザ環境変数を取得するVBSやVB.NETを起動し、
コマンドプロンプトのSETで確認した所、即時反映されません。
一度ログオフしてログオンし直すと値を取れているようです。

以前の環境変数値を取得してそうなため、以下のサイトの内容ではないかと
考えています。
http://support.microsoft.com/kb/104011/ja

即時反映させる方法が書いてありますが、いまいち内容が分からない為
どなたかご存知の方がいらっしゃいましたらお教え頂けないでしょうか。
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-11-05 13:56
SendMessageTimeoutはAPI(SDKとも言う)の関数です。
VBでの使用方法は判りますが、.NETでの使用方法が判らないので
検索してみたら下記のサイトがヒットしました。

.NetでのAPI関数の使用方法はこちらから。
http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html

MSDNサイトでのSendMessageTimeout関数についてはこちらから。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_sendmessagetimeout.asp
ベジータ
会議室デビュー日: 2007/10/29
投稿数: 14
投稿日時: 2007-11-05 17:59
あまり.NETに詳しくないため、お尋ねしたいのですが

SendMessageTimeoutを
Private Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" _
(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As _
Long, ByVal fuFlags As Long, ByVal uTimeout As Long, ByVal lpdwResult As _ Long) As Long

の様に宣言し、環境変数登録後に
Ret = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,・・・
とすれば良いのでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-05 18:16
コード:

    <DllImport("User32.dll"> _
    Public Shared Function SendMessageTimeout( _
        ByVal hWnd       As System.IntPtr, _
        ByVal msg        As Integer, _
        ByVal wParam     As System.IntPtr, _
        ByVal lParam     As System.IntPtr, _
        ByVal fuFlags    As SendMessageTimeoutFlags, _
        ByVal uTimeout   As Integer, _
        ByRef lpdwResult As System.IntPtr) As System.IntPtr _
    End Function


すでに上総さんが回答されているとおり、困った時は P/Invoke.net ウマーです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ベジータ
会議室デビュー日: 2007/10/29
投稿数: 14
投稿日時: 2007-11-06 11:13
ご回答ありがとうございます。

<DllImport("User32.dll"> はC#でしょうか。
大変ご面倒かとは思いますが、VB.NETの記述が分かりましたら
ご教授頂けますでしょうか。

尚、私の環境では何故かインストールしてもPINVOKE.NETが動かない様です。
(VS2005 ExpressEdition)
特別な設定等は無いと記述されているのですが・・・
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-06 11:29
引用:

ベジータさんの書き込み (2007-11-06 11:13) より:

<DllImport("User32.dll"> はC#でしょうか。
大変ご面倒かとは思いますが、VB.NETの記述が分かりましたら
ご教授頂けますでしょうか。


VB.NET ですけど? (C# だと [DllImport...] ですから)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-11-06 12:23
<DLLImport("User32.dll">では無く、<DllImport("User32.dll")>のスペルミスかと。
あとはSMTO_ABORTIFHUNG・SMTO_BLOCK・SMTO_NORMAL・SMTO_NOTIMEOUTIFNOTHUNGの
定数の値が判れば問題無いかと思われます。

下記のページにSMTO_ABORTIFHUNG・SMTO_BLOCKの2つの定数の値が、サンプルソース上
に記述されています。
(サンプルと言っても、今回の質問で挙げられている状態と全く同じという訳では
ありませんので御注意下さい。)
http://support.microsoft.com/kb/231844/ja

VB6.0のAPIビューアがあれば定数の値が判別したかも知れませんが、無いなら無いで
Windows.hがローカルマシンにあると判断がつくかと思います。
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-11-06 12:29
すいません、SendMessageTimeoutでググったら下記のページがヒットしました。
http://yokohama.cool.ne.jp/chokuto/advanced/function/SendMessageTimeout.html

一応、定数の値が記載されていますので、参考になるかと思います。

スキルアップ/キャリアアップ(JOB@IT)