DOBON.NETプログラミング掲示板過去ログ
64bitでの動作
題名: 64bitでの動作
著者: キャンディ
日時: 2010/02/06 0:38:43
ID: 26393
この記事の返信元:
(なし)
この記事への返信:
[26394]
Re[1]: 64bitでの動作
オショウ
2010/02/07 16:28:01
ツリーを表示
環境/言語:[XP、vista 64bit VS2008 C# Framework3.5]
分類:[.NET]
たびたびすみません。
64bit(OS)での動作ができるように・・・・との調査で、
mdbのODBC接続を64bitモードでは不可能だったため、
ターゲットをx86に固定にして作成したところ、Xp 64bitで動作することを
確認したのですが・・・・・・・
1点だけ・・・・・
スクリーンセーバーのチェックを行っているのですが、ターゲットを32ビットでexeを作成するとスクリーンセーバーが検出できません。
スクリーンセーバーは64bitで動いているからでしょうか。
これを検出する方法は何かいい手段はあるでしょうか。。。。
64bitではプロセスチェックが違うのでしょうか。。。。
以下のロジックで検出しています
リモート接続するとsystemの出すスクリーンセーバーが稼動するため
スクリーンセーバーのユーザが自分のものを検出しています。
XP 32bitではこれでうまくいっています。
良い方法があればご教授願います
ManagementScope scope = new ManagementScope("root\\CIMV2");
scope.Connect();
ObjectQuery query = new ObjectQuery(@"SELECT * FROM Win32_Process");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection col = searcher.Get();
foreach (ManagementObject o in col)
{
try
{
string name = o["Name"].ToString();
if (strExe.ToLower() == name.ToLower())
{
Object[] UserInfo = new object[2];
o.InvokeMethod("GetOwner", UserInfo);
strUser = (string)UserInfo[0];
if (Environment.UserName.ToLower() == strUser.ToLower())
{
return true;
}
}
}
catch
{
continue;
}
}
題名: Re[1]: 64bitでの動作
著者: オショウ
日時: 2010/02/07 16:28:01
ID: 26394
この記事の返信元:
[26393]
64bitでの動作
キャンディ
2010/02/06 0:38:43
この記事への返信:
(なし)
ツリーを表示
■No26393に返信(キャンディさんの記事)
> スクリーンセーバーのチェックを行っているのですが、ターゲットを32ビットでexeを作成するとスクリーンセーバーが検出できません。
> スクリーンセーバーは64bitで動いているからでしょうか。
> これを検出する方法は何かいい手段はあるでしょうか。。。。
> 64bitではプロセスチェックが違うのでしょうか。。。。
それはOS的に当然な仕様です。
32ビットから上位の64ビット環境の情報を得るのは、権限的に
できない場合もあるかと。
ただし、スクリーンセーバー起動時には、
WM_SYSCOMMAND メッセージで、wParam == SC_SCREENSAVE を取得
できれば、検出が可能かと思います。
お試し下さい。
以上。
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
たびたびすみません。
64bit(OS)での動作ができるように・・・・との調査で、
mdbのODBC接続を64bitモードでは不可能だったため、
ターゲットをx86に固定にして作成したところ、Xp 64bitで動作することを
確認したのですが・・・・・・・
1点だけ・・・・・
スクリーンセーバーのチェックを行っているのですが、ターゲットを32ビットでexeを作成するとスクリーンセーバーが検出できません。
スクリーンセーバーは64bitで動いているからでしょうか。
これを検出する方法は何かいい手段はあるでしょうか。。。。
64bitではプロセスチェックが違うのでしょうか。。。。
以下のロジックで検出しています
リモート接続するとsystemの出すスクリーンセーバーが稼動するため
スクリーンセーバーのユーザが自分のものを検出しています。
XP 32bitではこれでうまくいっています。
良い方法があればご教授願います
ManagementScope scope = new ManagementScope("root\\CIMV2");
scope.Connect();
ObjectQuery query = new ObjectQuery(@"SELECT * FROM Win32_Process");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection col = searcher.Get();
foreach (ManagementObject o in col)
{
try
{
string name = o["Name"].ToString();
if (strExe.ToLower() == name.ToLower())
{
Object[] UserInfo = new object[2];
o.InvokeMethod("GetOwner", UserInfo);
strUser = (string)UserInfo[0];
if (Environment.UserName.ToLower() == strUser.ToLower())
{
return true;
}
}
}
catch
{
continue;
}
}