• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WMIを使用した際のItemプロパティの文字列指定)

WMIを使用したItemプロパティの文字列指定について

このQ&Aのポイント
  • C#.NETでWMIのWin32_Serviceを使用し、Windowsサービスを作成しています。
  • Itemプロパティの文字列について、どのような指定ができるのか教えてください。
  • 指定する値が取得できる方法についても教えていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

>"ReturnValue"で値が取れるということはどこに書いてあるのでしょうか? ご質問の意図に沿うかどうかわかりませんが。 「ReturnValue プロパティは、OutParameters プロパティによって返される ManagementBaseObject の特別なプロパティであり、メソッドの戻り値を保持します。」 と書かれています。 ↓ http://msdn.microsoft.com/ja-jp/library/system.management.methoddata.outparameters%28VS.80%29.aspx

robinho
質問者

お礼

ありがとうございます。 リンク先確認致しました。 そこで、新しい疑問なんですが、 リンク先に下記記述がありました。 Console.WriteLine("Description: " + method.Qualifiers["Description"].Value) method.Qualifiers["Description"].Valueと書けば値が取れるんだろうというのはわかるのですが、 他に指定できる文字列(プロパティ)があるのかな? と疑問に思って調べても、見つかりません。 質問のItem[]もそうですが、こういった指定できる文字列(プロパティ)というのは、 どこにも列挙してないものなのでしょうか? こういったことは、あまり深く考えずに「こういう書き方だ」と思って記憶するべきなのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • wininetでPOSTで値を渡せません

    winnetを使ってPOST形式でサーバにパラメータを渡そうとしていますが、パラメータが渡せずに困っています。 HttpOpenRequestかHttpSendRequestがおかしいと思うのですが、自分では見当がつきません。 よければ何処に問題があるのか教えてください。 環境:vc++2005 int DoHttpRequest( void ) { HINTERNET hInet, hSession, hRequest; DWORD dwTotal = 0; wchar_t param[] = L"type=1"; wchar_t header[] = L"Content-Type: application/x-www-form-urlencoded"; wchar_t accept[] = L"Accept: */*"; // 使ってない BOOL flag; Console::WriteLine( "Http接続START" ); //インターネット(WinInet)初期化 hInet = InternetOpen( NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (hInet == NULL) { Console::WriteLine( "エラー1" ); return -1; } // サーバへ接続 hSession = InternetConnect( hInet, L"192.168.11.25", 9999, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0 ); if( hSession == NULL ) { Console::WriteLine( "エラー2" ); InternetCloseHandle(hInet); return -1; } //HTTPセッションの開始, 指定のURLオープン hRequest = HttpOpenRequest( hSession, L"POST", L"/sample/service.php", NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0 ); if (hRequest == NULL) { Console::WriteLine( "エラー3" ); InternetCloseHandle(hSession); InternetCloseHandle(hInet); return -1; } // 送信 flag = HttpSendRequest( hRequest, header, wcslen( header ), param, wcslen( param )); if( flag == FALSE ) { Console::WriteLine( "エラー4" ); InternetCloseHandle(hRequest); InternetCloseHandle(hSession); InternetCloseHandle(hInet); return -1; } //インターネットハンドルの解放 InternetCloseHandle( hRequest ); InternetCloseHandle( hSession ); InternetCloseHandle( hInet ); Console::WriteLine( "Http接続END" ); return 0; }

  • どうして、Windows server 2008の場合、下記のコードを

    どうして、Windows server 2008の場合、下記のコードを利用してローカルPCのIPAddress、IPSubnetなどの情報を取得することができませんか。 _mosNetworkAdapterConfiguration = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_NetworkAdapterConfiguration"); // ********************************************************* // -- インターネットプロトコルTCPIPの詳細 // ********************************************************* _clsXML.WriteXMLStartElement("インターネットプロトコルTCPIPの詳細"); foreach (ManagementObject obj in _mosNetworkAdapterConfiguration.Get()) { _clsXML.WriteXMLStartElement("DHCPの使用"); _clsXML.WriteXMLAttributes("DHCPEnabled", Tools.ConvertNullToString(obj["DHCPEnabled"])); _clsXML.WriteXMLEndElement(); // DHCPの使用 Console.WriteLine("IPAddress..."); if (obj["IPAddress"] == null) { Console.WriteLine("NULL"); _clsXML.WriteXMLStartElement("IPアドレス"); _clsXML.WriteXMLEndElement(); // IPアドレス } else { arr = (string[])(obj["IPAddress"]); foreach (string arrValue in arr) { Console.WriteLine("###" + arrValue + "###"); _clsXML.WriteXMLStartElement("IPアドレス"); _clsXML.WriteXMLAttributes("IPAddress", arrValue); _clsXML.WriteXMLEndElement(); // IPアドレス } } Console.WriteLine("IPSubnet..."); if (obj["IPSubnet"] == null) { Console.WriteLine("NULL"); _clsXML.WriteXMLStartElement("IPサブネットマスク"); _clsXML.WriteXMLEndElement(); // IPサブネットマスク } else { arr = (string[])(obj["IPSubnet"]); foreach (string arrValue in arr) { Console.WriteLine("###" + arrValue + "###"); _clsXML.WriteXMLStartElement("サブネットマスク"); _clsXML.WriteXMLAttributes("IPSubnet", arrValue); _clsXML.WriteXMLEndElement(); // IPサブネットマスク } } ...

  • .NET1.1でPING処理(C#からの変換)

    VB2002+WIN2000を使用。 リモート端末へのアクセス前に起動確認処理としてPINGを使い、電源OFF時の待ち時間を減らしたいと考えています。 ○PINGの他に導通確認できる手軽なものがあるのでしたら教えてください。 PINGの処理はネットで検索した結果C#(1.1)のものでしたら発見できたため、それを利用しようと思っています。(サイトでもVBへの変換は簡単にできるとあったので^_^;) 自分なりに変換してみましたがエラーが発生してしまい原因/対応方が分かりません。 ぜひご教授下さい。よろしくお願いいたします。 (補足が必要であれば記述します。) 【元からの変更】 ・引数はなしにし、固定にしました。 ・Button1の処理に記述しました。 ・参照設定でSystem.Managementを追加しました。 【エラー】 スレッド '<名前がありません>' (0x59c) はコード 0 (0x0) で終了しました。 'System.Management.ManagementException' のハンドルされていない例外が system.management.dll で発生しました。 追加情報 : 無効なクラスです 【予想】 searcherにGetがない? 対策が分からず… ----- 変更プログラム ------ Imports System Imports System.Management Dim arg As String arg = "192.168.0.1" 'クエリ文字列の設定() Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher() searcher = New ManagementObjectSearcher("select * from Win32_PingStatus where address = '" & arg & "'") ' クエリ結果のとりだし Dim mo As ManagementObject 'エラー箇所 For Each mo In searcher.Get Dim i As Integer ' 結果のプロパティのチェックと状態の表示 If mo.Properties("StatusCode").Value = "" Or Convert.ToInt32(mo.Properties("StatusCode").Value) <> 0 Then Console.WriteLine(arg + ":稼働していません") Else Console.WriteLine(arg + ":稼働中") Console.WriteLine("IPAddress:" & mo.Properties("ProtocolAddress").Value) Console.WriteLine("ResponseTime:" & mo.Properties("ResponseTime").Value) End If Next Console.WriteLine("----------------") ------ 元プログラム(C#) ---------------------- using System; using System.Management; class PingExec { public static void Main(string[] args) { if(args.Length > 0) { foreach(string arg in args) { // クエリ文字列の設定 ManagementObjectSearcher searcher = new ManagementObjectSearcher( "select * from Win32_PingStatus where address = '" + arg + "'"); // クエリ結果のとりだし foreach( ManagementObject mo in searcher.Get() ) { // 結果のプロパティのチェックと状態の表示 if(mo.Properties["StatusCode"].Value == null || Convert.ToInt32(mo.Properties["StatusCode"].Value) != 0) { Console.WriteLine(arg + ":稼働していません"); } else { Console.WriteLine(arg + ":稼働中"); Console.WriteLine("IPAddress:" + mo.Properties["ProtocolAddress"].Value); Console.WriteLine("ResponseTime:" + mo.Properties["ResponseTime"].Value); } } Console.WriteLine("----------------"); } } } }

  • 二次元的な(?)文字列から指定した箇所の数を取り出す方法を教えてください

    はじめまして。 C++を勉強している途中なのですが、興味本位でwin32apiに手を出してみたのですが、文字列について混乱中です。 http://www.geocities.jp/ky_webid/win32c/051.htmlの使用例を参考にして、テキストファイルtext.txtから文字を抽出し、MessageBoxで表示できるようになりました。 使用例というのは、↓です。 HANDLE hFile; // ファイルを開く。ReadFile()が目的なのでGENERIC_READ指定が必須 hFile = CreateFile( _T("test.dat"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( hFile != INVALID_HANDLE_VALUE ) // 本当に開くことができたか { TCHAR buf[256]; DWORD readsize; // 使わないとしても、読み取ったサイズは受け取らなくてはならない // bufに読み込んで、結果をメッセージボックスに表示 ReadFile( hFile, buf, sizeof(buf), &readsize, NULL ); buf[readsize] = _T('\0'); // 末尾に'\0'が無いので付加 MessageBox( hWnd, buf, _T("結果"), MB_OK ); // 最後に忘れずにファイルハンドルを閉じる CloseHandle( hFile ); } テキストファイルtext.txtの中身は、↓のようになっています。 1 2 aui 2 4 sd 6 7 db 2 1 cx ですので、MessageBoxでも、↑のように表示されたのを確認しました。 bufの中に↑の数字と文字が代入されているということなのでしょうが、たとえば4を指定したり、dbを指定したりと、一つずつ抽出する方法がわかりません。 配列みたいにbuf[1][1]と書いてみても、「int型はcharに変換できない」といった感じのエラーが表示されるだけでした。 この文字列bufにある文字や数字を一つずつ抽出する方法を教えてください。

  • フォームを開くときのwhere条件式でnull値のものに絞りたい

    VBAの記述で、フォームを開くときにレコードの抽出条件を指定できますが、その際,指定したフィールドの値がNullのもの、逆にNullLでないものという条件の与え方はできないのでしょうか? 値がある文字列と等しいとかある数値や日付以上といった条件式はヘルプでみるのですが、NullかNullでないといった判断をさせる条件式が参考書等でもみあたらないのですが。  それとも何か違うやりかたがあるのでしょうか?ご存知のかたは教えてください。

  • C#についての質問です

    現在C#でソフトを開発しています ベースのフォームのボタンを押すと サブのフォームの位置情報を取得したいのですが Console.WriteLineで確認すると X軸とY軸の値が0になってしまします どうしたら位置情報を取得できるのでしょうか? よろしくお願いします。

  • フォルダ選択のダイアログボックスについて

    おはようございます。 現在、VB.NETでフォルダ選択のダイアログを表示させたいと 思っているのですが以下の記述だとダイアログは表示されますが 選択したフォルダのパスを取得する方法がわかりませんでした。 この後にどんな記述をすれば取得できるのでしょうか? 宜しくお願いします。 Dim f As New BrowseFolder() Console.WriteLine(f.BrowseDialog("出力先フォルダを指定してください。", Me))

  • WMIを有効にする方法が分かりません。

    WMIを有効にする方法が分かりません。 ベンチマークソフトが動作しないのは WMI の初期化が完了しない(WMI が無効になっている)からだということがわかりました。 ベンチマークの作者に問い合わせたところ 「WMI を有効にする方法(デフォルトは有効なので、何らかのソフトで無効に されたものと思います。Windows を軽くすると謳うソフトなど)はネット 上で多数紹介されているので検索してみてください。」 と回答をいtだきましたが・・・ どうしてもWMIを有効に出来ません。 以下2つの方法を試みました。 ・マイコンピューターを右クリック→コンピューターの管理→ サービス→WNI Performance Adapterの開始ボタンを押す。 同じくWNIコントロールで動作してるかチェックすると 「Win32: 指定されたサービスは無効であるか、または有効なデバイスが 関連付けられていないため、開始できません。」 というエラーが出る。 ・コマンドプロンプトから、WNIを再起動した際のエラー内容 参照 http://www.microsoft.com/japan/technet/scriptcenter/topics/help/wmi.mspx winmgmt /kill と入力してWMIを停止後 net start winmgmt と入力してWMIサービスを再起動すると 「指定されたサービスは無効であるか、または有効なデバイスが関連付けられて いないため、開始できません。」 というエラーが出ます。 どのようにしたらWMIを有効にすることが出来るのでしょうか? OS:Windows XP SP3

  • 読込んだ文字列でDeleteFileWを使うには

    Visual Studio2005を用いて、Windows Mobile上で動作するWin32アプリケーションを コーディングしています。言語はC++を選択しています。 DeleteFileW関数で困っており、みなさんのご意見を聞かせていただきたいと思います。 よろしくお願いします。 ・PGの概要 ファイルに書かれている内容(削除したいファイルのパス及びファイル名)を読み込んで、 該当するファイルをDeleteFileW関数で削除するというものです。 ・困っている点 読み込んだ文字列をANSIからUnicodeに変換しても(下記のdelete_file1())、 パスを記載したファイルをUnicodeで作成して読み込んでも(下記のdelete_file2())、 ファイルを削除できません。 コンパイルは正常にできるので、何が悪いのかわかりません。 ・コード #include<windows.h> #include<norify.h> #include<stdio.h> //ANSIで読み込んだ文字列をUnicodeに変換して指定したファイルを削除する int delete_file1() { FILE *fp; char readString[42] = ""; TCHAR readString2[42] = L""; if((fp = fopen("\\Storage Card\\test.txt", "r")) == NULL) { MessageBoxW(NULL, L"open_error", L"open_error", 0); } fgets(readString, 42, fp); { #ifdef UNICODE MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, readString, 42, readString2, sizeof(readString)); #else strcpy(readString2,readString); #endif if( DeleteFileW(readString2) == TRUE) { MessageBoxW(NULL, readString2, L"delete_OK", 0); }else{ MessageBoxW(NULL, readString2, L"delete_NG", 0); } return 0; } //中身がUnicodeで書かれたファイルを読み込んで指定されたファイルを削除する int delete_file2() { HANDLE hand; hand = CreateFile(L"\\Storage Card\\testread.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); TCHAR readString[MAX_PATH]; DWORD dword; ReadFile(hand, readString, sizeof(readString), &dword, NULL); CloseHandle(hand); if( DeleteFileW(readString) == TRUE) { MessageBoxW(NULL, readString2, L"delete_OK", 0); }else{ MessageBoxW(NULL, readString2, L"delete_NG", 0); } return 0; } //メイン関数 int WinMain(HINSTANCE hInstance, HINSTANCE hPreinstance, LPWSTR lpCmdLine, int nShowCmd) { //動作を確認したい方をコメントアウトから外して実行 // delete_file1(); // delete_file2(); return 0; }

  • Listクラスについて

     こんにちは。いつもお世話になっております。  プログラミングの初心者で、現在VC++でプログラムを作成しています。環境は、OSがWindowsXP、統合環境はVisualStudio2008 Professionalを使用しています。  プログラムの中で配列の代わりにListクラスを使いたいのですが、Listのインデックスを指定して値を代入することができません。MSDNではinsertメソッドでインデックスを指定して挿入ができるように書かれているのですが・・・・・。リストは整数を格納するためのもので、 List<int>^ zangakuList; と、宣言してメソッドの中では、 zangakuList->Insert(i, item->Money); のように使用しています。ちなみに、iの代わりに0を設定するとリストの先頭に値が代入されます。  お手数ですが、原因がお分かりの方、よろしくご教授ください。m(_)m