نمایش نتایج 1 تا 13 از 13

نام تاپیک: بحث در مورد (WQL(WMI Query Language

  1. #1
    کاربر دائمی آواتار sepehr.net
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران
    پست
    386

    بحث در مورد (WQL(WMI Query Language

    سلام
    من چند وقتی هست که با WQL اشنا شدم. ولی هنوز نکات زیادی هست که اونها رو نمیدونم
    برای همین این تاپیک رو ایجاد کردم تا دوستانی که اطلاعاتی در این زمینه دارند اون ها رو در اختیار بقیه ی دوستان هم قرار بدهند

  2. #2
    کاربر دائمی آواتار sepehr.net
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران
    پست
    386

    نقل قول: WQL

    برای اینکه دوستان بیشتر از (WMI Query Language) یا WQL بدونند و مشتاق به یادگیری این مبحث بشوند کمی در مورد آن توضیح میدم
    WQL همانند SQL یک زبان اسکریپتی است. به وسیله ی این زبان ما میتونیم از سیستم عامل پرس و جو بکنیم
    مثلا میتونیم مشخصات یک سخت افزار خاصی رو درخواست کنیم و جواب اون رو مشاهده کنیم.
    نحوه ی نوشتن کوئری با این زبان شباهت خیلی زیادی با زبان SQL دارد.
    مثلا دستور
    SELECT * FROM Win32_DisplayConfiguration

    یک پرس و جو از Win32_DisplayConfiguration انجام میده که مربوط به سخت افزار کارت گرافیکه.
    (اینکه Win32_DisplayConfiguration چی هست رو خود من هم نمیدونم اگه کسی اطلاعات بیشتری داره خوشحال میشیم که در اختیار بقیه دوستان هم قرار بده)
    ما میتونیم به وسیله ی این دستور نام کارت گرافیک یا مشخصات مربوط به اون رو مشاهده کنیم.

  3. #3
    کاربر دائمی آواتار sepehr.net
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران
    پست
    386

    نقل قول: WQL

    برای اینکه بتونیم از این زبان در ویژوال بیسیک استفاده کنیم احتیاج به رفرنس System.Management داریم
    در ابتد این رفرنس رو به برنامه اضافه میکنیم و سپس همین رفرنس رو Import میکنیم
    Imports System.Management

    پس از این کار باید یک متغیری از ManagementObject تعریف کنیم
     Dim ObjMng As New Management.ManagementObject

    دقیقا نمیدونم اگه اشتباه میگم دوستان اصلاح کنند
    فکر کنم این ManagementObject شامل تمامی اطلاعاتی هست که ما میخواهیم از اونها پرس و جو کنیم چون ما در یک حلقه ی For Each از اون استفاده میکنیم و پرس جو رو در اون انجام میدیم.
    پس از این کار حالا نوبت به این میرسه که یک شیئ از ManagementObjectSearcher بسازیم و در اون دستورات WQL رو قرار بدیم و پرس جو رو شروع کنیم
    Dim MngObjSrch As New Management.ManagementObjectSearcher("SELECT * FROM Win32_DisplayConfiguration")

    نتیجه ی این پرس جو در یک حلقه ی ForEach مشخص میشه
            Dim DisplayName As String
    For Each ObjMng In MngObjSrch.Get
    DisplayName = ObjMng("DeviceName").ToString
    Next
    MsgBox(DisplayName)

    این روش استفاده از دستورات WQL در زبان VB.NET بود.
    این کلاس و این زبان کارایی بسیار بهتر و بیشتری از آن چه که گفته شد دارند. امیدوارم در این تاپیک به بسیاری از آنها اشاره بشه

  4. #4
    کاربر دائمی آواتار sepehr.net
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران
    پست
    386

    نقل قول: WQL

    این هم یک سایت خوب که لیست تمامی متد ها و پارامتر های WQL رو گذاشته
    http://www.yogageneration.com/~mvkaz...tml/index.html

  5. #5
    کاربر دائمی آواتار rooshan2008
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    گیلان- لشت نشا
    سن
    38
    پست
    179

    نقل قول: بحث در مورد (WQL(WMI Query Language

    با سلام
    من چند وقت پیش با این امکان پی بردم و تا اینجا دست گیرم شد که با Wql بصورت دستورات Sql می تونیت از سیستم عامل پرسجوکنید( البته درباره منابع سیستم خودتون)
    همین کاری که خود سیستم عامل انجام میده. این امکانات بسیار کاربردی و خیلی جالبه بطوری که با داشتن کلاس و دستور مورد نظر می تونید تمام امکانات سیستمتون رو بصورت خیلی راحت بدون استفاده از Api و کارهای دیگه به این امکانات دسترسی داشته باشد.

    مثلاً این دستور زیر:

    Dim Obj AsNew System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")


    این دستور مشخصات سیستم عاملتون رو با جزئیات بر می گردونه..

    ForEach Wql In Obj.Get

    Msgbox (Wql.GetText(TextFormat.Mof)

    Next

    درواقعه دستور( Wql.GetText(TextFormat.Mof دستور متن زیر رو به ما بر می گردونه:

    instance of Win32_OperatingSystem
    {
    BootDevice = "\\Device\\HarddiskVolume1";
    BuildNumber = "2600";
    BuildType = "Uniprocessor Free";
    Caption = "Microsoft Windows XP Professional";
    CodeSet = "1256";
    CountryCode = "981";
    CreationClassName = "Win32_OperatingSystem";
    CSCreationClassName = "Win32_ComputerSystem";
    CSDVersion = "Service Pack 2";
    CSName = "ROSHANFEKR";
    CurrentTimeZone = 210;
    DataExecutionPrevention_32BitApplications = TRUE;
    DataExecutionPrevention_Available = TRUE;
    DataExecutionPrevention_Drivers = TRUE;
    DataExecutionPrevention_SupportPolicy = 2;
    Debug = FALSE;
    Description = "";
    Distributed = FALSE;
    EncryptionLevel = 168;
    ForegroundApplicationBoost = 2;
    FreePhysicalMemory = "339300";
    FreeSpaceInPagingFiles = "1833016";
    FreeVirtualMemory = "2054716";
    InstallDate = "20050507185405.000000+210";
    LargeSystemCache = 0;
    LastBootUpTime = "20081119204219.500000+210";
    LocalDateTime = "20081119220201.875000+210";
    Locale = "0429";
    Manufacturer = "Microsoft Corporation";
    MaxNumberOfProcesses = 4294967295;
    MaxProcessMemorySize = "2097024";
    Name = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Part ition1";
    NumberOfProcesses = 37;
    NumberOfUsers = 2;
    Organization = "";
    OSLanguage = 1033;
    OSType = 18;
    Primary = TRUE;
    ProductType = 1;
    QuantumLength = 0;
    QuantumType = 0;
    RegisteredUser = "Roshan.2008";
    SerialNumber = "55274-640-5150253-23868";
    ServicePackMajorVersion = 2;
    ServicePackMinorVersion = 0;
    SizeStoredInPagingFiles = "2369640";
    Status = "OK";
    SuiteMask = 272;
    SystemDevice = "\\Device\\HarddiskVolume1";
    SystemDirectory = "C:\\WINDOWS\\system32";
    SystemDrive = "C:";
    TotalVirtualMemorySize = "2097024";
    TotalVisibleMemorySize = "981424";
    Version = "5.1.2600";
    WindowsDirectory = "C:\\WINDOWS";
    };
    این متن همون مشخصات سیستم عامل هست که شما صادر کردید اگه بخواهید به مشخصات اون به صورت تک تک اجزا بپردازید باید در قسمت

    Wql("نام ").ToString
    مثلاً از نوشته بالا Caption رو به جای نام بزارید.
    یا WindowsDirectory رو به جای نام بزارید
    من قبلاً یک تابع نوشته بودم که تمام properties منربوط بر هر دستور اجراشده رو بر می گردوند به صورتی List of string :

    PrivateFunction Extra(ByVal obj AsString) AsString

    Dim pBegin AsInteger

    Try

    pBegin = InStr(pBegin + 1, obj,
    "=")
    Return Trim(Mid(obj, 2, pBegin - 2))
    Catch ex As Exception
    ReturnNothing

    EndTry

    EndFunction

    PrivateFunction GetProperties(ByVal obj AsString) As List(OfString)
    Dim List AsNew List(OfString)
    Dim s AsString

    Dim pBegin, pEnd, pTemp AsInteger

    obj = Replace(obj, vbTab,
    "", 1) 'Remove tab Key

    pBegin = InStr(obj,
    "{") 'search for Begin oF Text

    pEnd = InStr(obj,
    "}") 'End of Text

    If pBegin > 0 Then

    While pBegin < pEnd - 1 And pBegin <> 0
    pTemp = pBegin
    pBegin = InStr(pBegin + 1, obj,
    ";")
    s = Mid(obj, pTemp + 1, (pBegin - pTemp) - 1)
    s = LTrim(Extra(s))
    IfNot (s) = ""Then

    List.Add(Trim(s))
    End If

    End While

    EndIf

    Return List
    EndFunction



    حالا برای اینکه یک مثال بزنیم یه فرم باز کنید و توش یک TreeView و یک دکمه بزارید :
    این برنامه دستور رو اجرا و نتیجه رو داخل treeview نمایش میده...



    PrivateFunction Extra(ByVal obj AsString) AsString

    Dim pBegin AsInteger

    Try

    pBegin = InStr(pBegin + 1, obj,
    "=")
    Return Trim(Mid(obj, 2, pBegin - 2))
    Catch ex As Exception
    ReturnNothing

    EndTry

    EndFunction

    PrivateFunction GetProperties(ByVal obj AsString) As List(OfString)
    Dim List AsNew List(OfString)
    Dim s AsString

    Dim pBegin, pEnd, pTemp AsInteger

    obj = Replace(obj, vbTab,
    "", 1) 'Remove tab Key

    pBegin = InStr(obj,
    "{") 'search for Begin oF Text

    pEnd = InStr(obj,
    "}") 'End of Text

    If pBegin > 0 Then

    While pBegin < pEnd - 1 And pBegin <> 0
    pTemp = pBegin
    pBegin = InStr(pBegin + 1, obj,
    ";")
    s = Mid(obj, pTemp + 1, (pBegin - pTemp) - 1)
    s = Extra(s)
    IfNot (s) = ""Then

    List.Add((s))
    EndIf

    EndWhile

    EndIf

    Return List
    EndFunction

    PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim objTv As TreeNode
    Dim Result As List(OfString)
    Dim Obj AsNew System.Management.ManagementObjectSearcher("SELECT * FROM CIM_LogicalDisk ")
    ForEach Wql In Obj.Get
    Try

    If IsNothing(Result) Then

    Result = GetProperties(Wql.GetText(TextFormat.Mof))
    EndIf

    ForEach s In Result
    My.Application.DoEvents()
    objTv = Tv1.Nodes.Add(s)
    objTv.Nodes.Add(Wql(s).ToString)
    Next

    Catch ex As Exception
    EndTry

    Next

    EndSub


    به کدی که توش select هست توجه کنید درست مثل sql ولی بجای جدول نام دستور رو نوشتیم شما می تونید این دستور رو عوض کنید لیستی از این دستورات رو می تونید از سایتی که دوستمون در قسمت بالا لینکش رو گزاشتن پیدا کنید حتی شما می تونید از دستور where هم استفاده کنید.
    البته این چیزی بود که من بلد بودم و روش های زیادی وجود داره تا property ها رو بدست بیارید ولی همون طور گفتم من قبلاً با این کد با جزئیات دست پیدا کردم.

    یکی از کاربد های Wmi این که شما می تونید کلاسی بنویسید که درباره کارت گرافیک و یا هر اجزای سیستمتون تا مشخصات اون رو بدست بیاره .
    این لینک رو ببینید:
    http://www.freevbcode.com/ShowCode.asp?ID=4571
    البته اگه جایی رو اشتباه کردم به بزرگواریتون ببخشید

  6. #6

    نقل قول: بحث در مورد (WQL(WMI Query Language

    من چند وقت پیش با این امکان پی بردم و تا اینجا دست گیرم شد که با Wql بصورت دستورات Sql می تونیت از سیستم عامل پرسجوکنید( البته درباره منابع سیستم خودتون)
    نه، WMI یک ابزار مدیریتی ویندوز هست، شما با استفاده از WMI می تونید (در صورت داشتند مجوزهای لازم)، نه تنها اطلاعات مختلفی از پیکربندی سخت افزار و نرم افزار سیستم خودتان بدست بیارید، بلکه می توانید به کمک آن به اطلاعات سایر سیستم های موجود در شبکه خود هم دسترسی داشته باشید. علاوه بر آن،WMI صرفا یک ابزار اطلاع رسانی نیست، بلکه می توانید با آن اعمال مدیریت هم بکنید، فرضا برخی تنظیمات سیستم را تغییر بدهید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #7
    کاربر دائمی آواتار Sub Zero
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    اهواز
    پست
    443

    نقل قول: بحث در مورد (WQL(WMI Query Language

    در سایت ماکروسافت هم ابزاری با نام WMI Code Creator قرار داده شده که قابلیت ایجاد کوئری های مختلف برای دریافت اطلاعات از سیستم عامل رو داراست . این ابزار توانایی ایجاد کوئریها در قالب VB.Net,C#‎,VBScript رو داره .

  8. #8
    کاربر دائمی آواتار sepehr.net
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران
    پست
    386

    نقل قول: بحث در مورد (WQL(WMI Query Language

    سلام
    این هم یک نرم افزار خوب برای کار با WQL همراه با سورس
    فایل های ضمیمه فایل های ضمیمه

  9. #9
    کاربر دائمی آواتار sepehr.net
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران
    پست
    386

    نقل قول: بحث در مورد (WQL(WMI Query Language

    کتابی کامل و خوب در این زمینه
    http://www1.vista-server.com/uploadf...2362221748.zip

  10. #10
    کاربر دائمی آواتار sepehr.net
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران
    پست
    386

    نقل قول: بحث در مورد (WQL(WMI Query Language

    اگر دوستان لطف کنند کاربرد هایی که WMI میتونه برای ما و برنامه هایمان داشته باشه رو بگن ممنون میشیم

  11. #11
    کاربر دائمی آواتار sepehr.net
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران
    پست
    386

    نقل قول: بحث در مورد (WQL(WMI Query Language

    این هم یک نرم افزار کامل و خیلی خوب برای کار با WMI پیشنهاد میکنم حتما دانلود کنید
    فایل های ضمیمه فایل های ضمیمه

  12. #12

    نقل قول: بحث در مورد (WQL(WMI Query Language

    چجوری میشه تعداد bad sector های هارد رو بیرون اورد؟

  13. #13
    کاربر دائمی آواتار Alghoochi
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    C:\Windows
    پست
    390

    نقل قول: بحث در مورد (WQL(WMI Query Language

    این برنامه کدباز رو هم از من داشته باشید. تمامی ویژگی های سخت افزارها رو بیرون میاره.

    http://www.codeproject.com/KB/system...formation.aspx

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •