PDA

View Full Version : مقاله: بدست آوردن اطلاعات سخت افزار با C#‎‎



r00tkit
یک شنبه 25 بهمن 1388, 22:45 عصر
The Windows Management Instrumentation یه پیاده سازی از Web-Based Enterprise Managementتوسط Microsoft است که یه استاندارد برای دسترسی به اطلاعات در محیط شبکه است.مدیران از wmi استفاده می کنند برای بررسی وکنترل کامپیوتر سخت افزاز شبکه و برنامه هایی که متعلق اند به شبکه بر روی اینترنت با Web browser های استاندارد مثل Microsoft Internet Explorer و.......

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

Wmi شامل چندین جدول است که اطلاعات سیستم رو نگه می دارند و این اطلاعات به صورت dynamic آپدیت می شن . هر جدول اطلاعات خاصی رو نگه می دارد

در C#‎‎ namespaceSystem.Management به ما این اجازه رو می ده که به پرس و جوی این جداول بپردازیم.
با این روش می تونید حتی طول وعرض مانیتور و حتی مقدار باتری لپ تاپ ومدل کارت شبکه و مقدار رم و 10000000 ها چیز دیگه رو بدست بیارید




ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
foreach (ManagementObject service in s.Get())
{

Console.WriteLine((string)service["Version"]);
}

این کد ورژن بایوس من رو نشون می ده(چقدر خوب:قهقهه:)

چند مثال:

Win32_OperatingSystem اطلاعات سیستم عامل

Win32_Battery

Win32_CacheMemory

Win32_BootConfiguration

Win32_PhysicalMemory

Win32_Printer

Win32_Desktop

Win32_NTEventlogFile 
و .....


برای detail به MSDN یه سر بزنید

اگه وقت کردم بازم چند تا مثال می زنم .

ali_autumnal
جمعه 07 اسفند 1388, 00:05 صبح
کسی نمیخواد این بحث رو ادامه بده؟

از سخت افزارهای دیگه اطلاعاتی بگیریم. مثل:
CPU
VGA
H.D.D
MB
and other...

jalalx
جمعه 07 اسفند 1388, 00:22 صبح
توی .NET Framework Tools یه ابزار به اسم mgmtclassgen وجود داره که یه اسم کلاس مربوط به WMI میگیره و کد مدیریت شده ی اون رو تولید می کنه!:کف:

jalalx
جمعه 07 اسفند 1388, 00:28 صبح
این کلاس جهت کار با پورت USB یه...

Netsky
جمعه 07 اسفند 1388, 00:46 صبح
سلام عرض میکنم خدمت همه دوستان عزیز .
گفتم یه لیست کامل از کلاس های این مجموعه واسه دوستان بگذاریم . شاید بدردشون بخوره .



Win32_1394Controller
Win32_1394ControllerDevice
Win32_AccountSID
Win32_ActionCheck
Win32_ActiveRoute
Win32_AllocatedResource
Win32_ApplicationCommandLine
Win32_ApplicationService
Win32_AssociatedBattery
Win32_AssociatedProcessorMemory
Win32_AutochkSetting
Win32_BaseBoard
Win32_Battery
Win32_Binary
Win32_BindImageAction
Win32_BIOS
Win32_BootConfiguration
Win32_Bus Win32_CacheMemory
Win32_CDROMDrive
Win32_CheckCheck
Win32_CIMLogicalDeviceCIMDataFile
Win32_ClassicCOMApplicationClasses
Win32_ClassicCOMClass
Win32_ClassicCOMClassSetting
Win32_ClassicCOMClassSettings
Win32_ClassInforAction
Win32_ClientApplicationSetting
Win32_CodecFile
Win32_COMApplicationSettings
Win32_COMClassAutoEmulator
Win32_ComClassEmulator
Win32_CommandLineAccess
Win32_ComponentCategory
Win32_ComputerSystem
Win32_ComputerSystemProcessor
Win32_ComputerSystemProduct
Win32_ComputerSystemWindowsProductActivationSettin g
Win32_Condition
Win32_ConnectionShare
Win32_ControllerHastHub
Win32_CreateFolderAction
Win32_CurrentProbe
Win32_DCOMApplication
Win32_DCOMApplicationAccessAllowedSetting
Win32_DCOMApplicationLaunchAllowedSetting
Win32_DCOMApplicationSetting
Win32_DependentService
Win32_Desktop
Win32_DesktopMonitor
Win32_DeviceBus
Win32_DeviceMemoryAddress
Win32_Directory
Win32_DirectorySpecification
Win32_DiskDrive
Win32_DiskDrivePhysicalMedia
Win32_DiskDriveToDiskPartition
Win32_DiskPartition
Win32_DiskQuota
Win32_DisplayConfiguration
Win32_DisplayControllerConfiguration
Win32_DMAChanner
Win32_DriverForDevice
Win32_DriverVXD
Win32_DuplicateFileAction
Win32_Environment
Win32_EnvironmentSpecification
Win32_ExtensionInfoAction
Win32_Fan
Win32_FileSpecification
Win32_FloppyController
Win32_FloppyDrive
Win32_FontInfoAction
Win32_Group
Win32_GroupDomain
Win32_GroupUser
Win32_HeatPipe
Win32_IDEController
Win32_IDEControllerDevice
Win32_ImplementedCategory
Win32_InfraredDevice
Win32_IniFileSpecification
Win32_InstalledSoftwareElement
Win32_IP4PersistedRouteTable
Win32_IP4RouteTable
Win32_IRQResource
Win32_Keyboard
Win32_LaunchCondition
Win32_LoadOrderGroup
Win32_LoadOrderGroupServiceDependencies
Win32_LoadOrderGroupServiceMembers
Win32_LocalTime
Win32_LoggedOnUser
Win32_LogicalDisk
Win32_LogicalDiskRootDirectory
Win32_LogicalDiskToPartition
Win32_LogicalFileAccess
Win32_LogicalFileAuditing
Win32_LogicalFileGroup
Win32_LogicalFileOwner
Win32_LogicalFileSecuritySetting
Win32_LogicalMemoryConfiguration
Win32_LogicalProgramGroup
Win32_LogicalProgramGroupDirectory
Win32_LogicalProgramGroupItem
Win32_LogicalProgramGroupItemDataFile
Win32_LogicalShareAccess
Win32_LogicalShareAuditing
Win32_LogicalShareSecuritySetting
Win32_LogonSession
Win32_LogonSessionMappedDisk
Win32_MappedLogicalDisk
Win32_MemoryArray
Win32_MemoryArrayLocation
Win32_MemoryDevice
Win32_MemoryDeviceArray
Win32_MemoryDeviceLocation
Win32_MIMEInfoAction
Win32_MotherboardDevice
Win32_MoveFileAction
Win32_NamedJobObject
Win32_NamedJobObjectActgInfo
Win32_NamedJobObjectLimit
Win32_NamedJobObjectLimitSetting
Win32_NamedJobObjectProcess
Win32_NamedJobObjectSecLimit
Win32_NamedJobObjectSecLimitSetting
Win32_NamedJobObjectStatistics
Win32_NetworkAdapter
Win32_NetworkAdapterConfiguration
Win32_NetworkAdapterSetting
Win32_NetworkClient
Win32_NetworkConnection
Win32_NetworkLoginProfile
Win32_NetworkProtocol
Win32_NTDomain
Win32_NTEventlogFile
Win32_NTLogEvent
Win32_NTLogEventComputer
Win32_NTLogEvnetLog
Win32_NTLogEventUser
Win32_ODBCAttribute
Win32_ODBCDataSourceAttribute
Win32_ODBCDataSourceSpecification
Win32_ODBCDriverAttribute
Win32_ODBCDriverSoftwareElement
Win32_ODBCDriverSpecification
Win32_ODBCSourceAttribute
Win32_ODBCTranslatorSpecification
Win32_OnBoardDevice
Win32_OperatingSystem
Win32_OperatingSystemAutochkSetting
Win32_OperatingSystemQFE
Win32_OSRecoveryConfiguración
Win32_PageFile
Win32_PageFileElementSetting
Win32_PageFileSetting
Win32_PageFileUsage
Win32_ParallelPort
Win32_Patch
Win32_PatchFile
Win32_PatchPackage
Win32_PCMCIAControler
Win32_PerfFormattedData_ASP_ActiveServerPages
Win32_PerfFormattedData_ASPNET_114322_ASPNETAppsv1 14322
Win32_PerfFormattedData_ASPNET_114322_ASPNETv11432 2
Win32_PerfFormattedData_ASPNET_2040607_ASPNETAppsv 2040607
Win32_PerfFormattedData_ASPNET_2040607_ASPNETv2040 607
Win32_PerfFormattedData_ASPNET_ASPNET
Win32_PerfFormattedData_ASPNET_ASPNETApplications
Win32_PerfFormattedData_aspnet_state_ASPNETStateSe rvice
Win32_PerfFormattedData_ContentFilter_IndexingServ iceFilter
Win32_PerfFormattedData_ContentIndex_IndexingServi ce
Win32_PerfFormattedData_DTSPipeline_SQLServerDTSPi peline
Win32_PerfFormattedData_Fax_FaxServices
Win32_PerfFormattedData_InetInfo_InternetInformati onServicesGlobal
Win32_PerfFormattedData_ISAPISearch_HttpIndexingSe rvice
Win32_PerfFormattedData_MSDTC_DistributedTransacti onCoordinator
Win32_PerfFormattedData_NETCLRData_NETCLRData
Win32_PerfFormattedData_NETCLRNetworking_NETCLRNet working
Win32_PerfFormattedData_NETDataProviderforOracle_N ETCLRData
Win32_PerfFormattedData_NETDataProviderforSqlServe r_NETDataProviderforSqlServer
Win32_PerfFormattedData_NETFramework_NETCLRExcepti ons
Win32_PerfFormattedData_NETFramework_NETCLRInterop
Win32_PerfFormattedData_NETFramework_NETCLRJit
Win32_PerfFormattedData_NETFramework_NETCLRLoading
Win32_PerfFormattedData_NETFramework_NETCLRLocksAn dThreads
Win32_PerfFormattedData_NETFramework_NETCLRMemory
Win32_PerfFormattedData_NETFramework_NETCLRRemotin g
Win32_PerfFormattedData_NETFramework_NETCLRSecurit y
Win32_PerfFormattedData_NTFSDRV_Controladordealmac enamientoNTFSdeSMTP
Win32_PerfFormattedData_Outlook_Outlook
Win32_PerfFormattedData_PerfDisk_LogicalDisk
Win32_PerfFormattedData_PerfDisk_PhysicalDisk
Win32_PerfFormattedData_PerfNet_Browser
Win32_PerfFormattedData_PerfNet_Redirector
Win32_PerfFormattedData_PerfNet_Server
Win32_PerfFormattedData_PerfNet_ServerWorkQueues
Win32_PerfFormattedData_PerfOS_Cache
Win32_PerfFormattedData_PerfOS_Memory
Win32_PerfFormattedData_PerfOS_Objects
Win32_PerfFormattedData_PerfOS_PagingFile
Win32_PerfFormattedData_PerfOS_Processor
Win32_PerfFormattedData_PerfOS_System
Win32_PerfFormattedData_PerfProc_FullImage_Costly
Win32_PerfFormattedData_PerfProc_Image_Costly
Win32_PerfFormattedData_PerfProc_JobObject
Win32_PerfFormattedData_PerfProc_JobObjectDetails
Win32_PerfFormattedData_PerfProc_Process
Win32_PerfFormattedData_PerfProc_ProcessAddressSpa ce_Costly
Win32_PerfFormattedData_PerfProc_Thread
Win32_PerfFormattedData_PerfProc_ThreadDetails_Cos tly
Win32_PerfFormattedData_RemoteAccess_RASPort
Win32_PerfFormattedData_RemoteAccess_RASTotal
Win32_PerfFormattedData_RSVP_RSVPInterfaces
Win32_PerfFormattedData_RSVP_RSVPService
Win32_PerfFormattedData_Spooler_PrintQueue
Win32_PerfFormattedData_TapiSrv_Telephony
Win32_PerfFormattedData_Tcpip_ICMP
Win32_PerfFormattedData_Tcpip_IP
Win32_PerfFormattedData_Tcpip_NBTConnection
Win32_PerfFormattedData_Tcpip_NetworkInterface
Win32_PerfFormattedData_Tcpip_TCP
Win32_PerfFormattedData_Tcpip_UDP
Win32_PerfFormattedData_TermService_TerminalServic es
Win32_PerfFormattedData_TermService_TerminalServic esSession
Win32_PerfFormattedData_W3SVC_WebService
Win32_PerfRawData_ASP_ActiveServerPages
Win32_PerfRawData_ASPNET_114322_ASPNETAppsv114322
Win32_PerfRawData_ASPNET_114322_ASPNETv114322
Win32_PerfRawData_ASPNET_2040607_ASPNETAppsv204060 7
Win32_PerfRawData_ASPNET_2040607_ASPNETv2040607
Win32_PerfRawData_ASPNET_ASPNET
Win32_PerfRawData_ASPNET_ASPNETApplications
Win32_PerfRawData_aspnet_state_ASPNETStateService
Win32_PerfRawData_ContentFilter_IndexingServiceFil ter
Win32_PerfRawData_ContentIndex_IndexingService
Win32_PerfRawData_DTSPipeline_SQLServerDTSPipeline
Win32_PerfRawData_Fax_FaxServices
Win32_PerfRawData_InetInfo_InternetInformationServ icesGlobal
Win32_PerfRawData_ISAPISearch_HttpIndexingService
Win32_PerfRawData_MSDTC_DistributedTransactionCoor dinator
Win32_PerfRawData_NETCLRData_NETCLRData
Win32_PerfRawData_NETCLRNetworking_NETCLRNetworkin g
Win32_PerfRawData_NETDataProviderforOracle_NETCLRD ata
Win32_PerfRawData_NETDataProviderforSqlServer_NETD ataProviderforSqlServer
Win32_PerfRawData_NETFramework_NETCLRExceptions
Win32_PerfRawData_NETFramework_NETCLRInterop
Win32_PerfRawData_NETFramework_NETCLRJit
Win32_PerfRawData_NETFramework_NETCLRLoading
Win32_PerfRawData_NETFramework_NETCLRLocksAndThrea ds
Win32_PerfRawData_NETFramework_NETCLRMemory
Win32_PerfRawData_NETFramework_NETCLRRemoting
Win32_PerfRawData_NETFramework_NETCLRSecurity
Win32_PerfRawData_NTFSDRV_Controladordealmacenamie ntoNTFSdeSMTP
Win32_PerfRawData_Outlook_Outlook
Win32_PerfRawData_PerfDisk_LogicalDisk
Win32_PerfRawData_PerfDisk_PhysicalDisk
Win32_PerfRawData_PerfNet_Browser
Win32_PerfRawData_PerfNet_Redirector
Win32_PerfRawData_PerfNet_Server
Win32_PerfRawData_PerfNet_ServerWorkQueues
Win32_PerfRawData_PerfOS_Cache
Win32_PerfRawData_PerfOS_Memory
Win32_PerfRawData_PerfOS_Objects
Win32_PerfRawData_PerfOS_PagingFile
Win32_PerfRawData_PerfOS_Processor
Win32_PerfRawData_PerfOS_System
Win32_PerfRawData_PerfProc_FullImage_Costly
Win32_PerfRawData_PerfProc_Image_Costly
Win32_PerfRawData_PerfProc_JobObject
Win32_PerfRawData_PerfProc_JobObjectDetails
Win32_PerfRawData_PerfProc_Process
Win32_PerfRawData_PerfProc_ProcessAddressSpace_Cos tly
Win32_PerfRawData_PerfProc_Thread
Win32_PerfRawData_PerfProc_ThreadDetails_Costly
Win32_PerfRawData_RemoteAccess_RASPort
Win32_PerfRawData_RemoteAccess_RASTotal
Win32_PerfRawData_RSVP_RSVPInterfaces
Win32_PerfRawData_RSVP_RSVPService
Win32_PerfRawData_Spooler_PrintQueue
Win32_PerfRawData_TapiSrv_Telephony
Win32_PerfRawData_Tcpip_ICMP
Win32_PerfRawData_Tcpip_IP
Win32_PerfRawData_Tcpip_NBTConnection
Win32_PerfRawData_Tcpip_NetworkInterface
Win32_PerfRawData_Tcpip_TCP
Win32_PerfRawData_Tcpip_UDP
Win32_PerfRawData_TermService_TerminalServices
Win32_PerfRawData_TermService_TerminalServicesSess ion
Win32_PerfRawData_W3SVC_WebService
Win32_PhysicalMedia
Win32_PhysicalMemory
Win32_PhysicalMemoryArray
Win32_PhysicalMemoryLocation
Win32_PingStatus
Win32_PNPAllocatedResource
Win32_PnPDevice
Win32_PnPEntity
Win32_PnPSignedDriver
Win32_PnPSignedDriverCIMDataFile
Win32_PointingDevice
Win32_PortableBattery
Win32_PortConnector
Win32_PortResource
Win32_POTSModem
Win32_POTSModemToSerialPort
Win32_Printer
Win32_PrinterConfiguration
Win32_PrinterController
Win32_PrinterDriver
Win32_PrinterDriverDll
Win32_PrinterSetting
Win32_PrinterShare
Win32_PrintJob
Win32_Process
Win32_Processor
Win32_Product
Win32_ProductCheck
Win32_ProductResource
Win32_ProductSoftwareFeatures
Win32_ProgIDSpecification
Win32_ProgramGroup
Win32_ProgramGroupContents
Win32_Property
Win32_ProtocolBinding
Win32_Proxy
Win32_PublishComponentAction
Win32_QuickFixEngineering
Win32_QuotaSetting
Win32_Refrigeration
Win32_Registry
Win32_RegistryAction
Win32_RemoveFileAction
Win32_RemoveIniAction
Win32_ReserveCost
Win32_ScheduledJob
Win32_SCSIController
Win32_SCSIControllerDevice
Win32_SecuritySettingOfLogicalFile
Win32_SecuritySettingOfLogicalShare
Win32_SelfRegModuleAction
Win32_SerialPort
Win32_SerialPortConfiguration
Win32_SerialPortSetting
Win32_ServerConnection
Win32_ServerSession
Win32_Service
Win32_ServiceControl
Win32_ServiceSpecification
Win32_ServiceSpecificationService
Win32_SessionConnection
Win32_SessionProcess
Win32_Share
Win32_ShareToDirectory
Win32_ShortcutAction
Win32_ShortcutFile
Win32_ShortcutSAP
Win32_SID
Win32_SoftwareElement
Win32_SoftwareElementAction
Win32_SoftwareElementCheck
Win32_SoftwareElementCondition
Win32_SoftwareElementResource
Win32_SoftwareFeature
Win32_SoftwareFeatureAction
Win32_SoftwareFeatureCheck
Win32_SoftwareFeatureParent
Win32_SoftwareFeatureSoftwareElements
Win32_SoundDevice
Win32_StartupCommand
Win32_SubDirectory
Win32_SystemAccount
Win32_SystemBIOS
Win32_SystemBootConfiguration
Win32_SystemDesktop
Win32_SystemDevices
Win32_SystemDriver
Win32_SystemDriverPNPEntity
Win32_SystemEnclosure
Win32_SystemLoadOrderGroups
Win32_SystemLogicalMemoryConfiguration
Win32_SystemNetworkConnections
Win32_SystemOperatingSystem
Win32_SystemPartitions
Win32_SystemProcesses
Win32_SystemProgramGroups
Win32_SystemResources
Win32_SystemServices
Win32_SystemSlot
Win32_SystemSystemDriver
Win32_SystemTimeZone
Win32_SystemUsers
Win32_TapeDrive
Win32_TCPIPPrinterPort
Win32_TemperatureProbe
Win32_Terminal
Win32_TerminalService
Win32_TerminalServiceSetting
Win32_TerminalServiceToSetting
Win32_TerminalTerminalSetting
Win32_Thread
Win32_TimeZone
Win32_TSAccount
Win32_TSClientSetting
Win32_TSEnvironmentSetting
Win32_TSGeneralSetting
Win32_TSLogonSetting
Win32_TSNetworkAdapterListSetting
Win32_TSNetworkAdapterSetting
Win32_TSPermissionsSetting
Win32_TSRemoteControlSetting
Win32_TSSessionDirectory
Win32_TSSessionDirectorySetting
Win32_TSSessionSetting
Win32_TypeLibraryAction
Win32_UninterruptiblePowerSupply
Win32_USBController
Win32_USBControllerDevice
Win32_USBHub
Win32_UserAccount
Win32_UserDesktop
Win32_UserInDomain
Win32_UTCTime
Win32_VideoController
Win32_VideoSettings
Win32_VoltageProbe
Win32_VolumeQuotaSetting
Win32_WindowsProductActivation
Win32_WMIElementSetting
Win32_WMISetting

r00tkit
جمعه 07 اسفند 1388, 01:01 صبح
کسی نمیخواد این بحث رو ادامه بده؟

از سخت افزارهای دیگه اطلاعاتی بگیریم. مثل:
CPU
VGA
H.D.D
MB
and other...

سلام اقای هم شهری

نوع vga و gpu



static void Main()
{
ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
foreach (ManagementObject service in s.Get())
{

Console.WriteLine((string)service["VideoProcessor"]);
}
}

r00tkit
جمعه 07 اسفند 1388, 01:08 صبح
این کلاس جهت کار با پورت USB یه...


چه ربطی به اینجا داره

r00tkit
جمعه 07 اسفند 1388, 01:13 صبح
Benefits of WMI in .NET Framework


Writing a client application or provider using WMI in .NET Framework provides several advantages over original WMI, especially for developers who use C# rather than C++. Writing a provider, in this case, means adding instrumentation to an application written in managed code.

WMI in .NET Framework offers the following advantages for writing client applications and providers:

Leverage of common language runtime features, such as garbage collection, custom indexer, and dictionaries.

It also offers other common language runtime features such as automatic memory management, efficient deployment, an object-oriented framework, evidence-based security, and exception handling.

Definition of classes and publication of instances entirely with .NET Framework classes to instrument applications so the applications can provide data to WMI.

The classes in System.Management.Instrumentation allow you to register a new provider, create new classes, and publish instances without using Managed Object Format (MOF) code.

Simplicity of use.

C++ applications for original WMI are sometimes difficult or lengthy to develop. The class structure of System.Management brings more script-like simplicity to applications developed in .NET Framework. The development of both applications and providers can be done more quickly with easier debugging.

Access to all WMI data.

Client applications have the same access to, and can do all the same operations with WMI data as in the original WMI. Provider-instrumented applications are somewhat more restricted. For more information, see Limitations of WMI in .NET Framework.



Limitations of WMI in .NET Framework




While the development of management applications and providers is faster using WMI for the .NET Framework, some limitations exist. A client application can still do most of the original WMI operations that a native code application can perform.

Although WMI supports embedded objects as well as references to other objects using WMI for the .NET Framework, you can only use embedded objects when defining new classes.

You cannot create an event consumer provider in managed code.

For more information, see "Writing an Event Consumer Provider" in the Windows Management Instrumentation documentation in the MSDN Library at http://msdn.microsoft.com/library. Managed client applications, however, can still access existing unmanaged code and WMI consumer providers, such as the Standard Consumers. For more information, see "Monitoring and Responding to Events with Standard Consumers" in the Windows Management Instrumentation documentation in the MSDN Library at http://msdn.microsoft.com/library.

WMI for the .NET Framework does not support Refreshers.

If you want to retrieve data from Win32_FormattedData_* classes, then you can use the System.Diagnostics.PerformanceCounter class instead of using refreshers with the Win32_FormattedData_* classes, or you can get the raw counter samples from the Win32_PerfRawData_* classes at the desired interval and calculate the result yourself using the last two samples. For more information on these Win32 classes, see "Win32_Classes" in the Windows Management Instrumentation documentation in the MSDN Library at http://msdn.microsoft.com/library.

The System.Management.Instrumentation namespace does not support the inheritance of classes if the derived class is in a different namespace than the parent class.

The WMI infrastructure and providers on native and managed (.NET) stack have not been verified for use in a cluster environment and hence are not supported in a cluster environment.

r00tkit
جمعه 07 اسفند 1388, 01:15 صبح
Classes in the System.Management namespace interact with the WMI object manager to send and receive data to the WMI repository and dynamic objects supplied by providers. The methods, properties, constructors, and other members of the System.Management namespace are used by Web forms and other management applications.


Architecture Elements
The following illustration identifies the three WMI tiers and identifies how the System.Management namespace is layered on WMI. It also shows how WMI providers are related to the applications that monitor the provided data

http://barnamenevis.org/forum/Classes%20in%20the%20System.Management%20namespace %20interact%20with%20the%20WMI%20object%20manager% 20to%20send%20and%20receive%20data%20to%20the%20WM I%20repository%20and%20dynamic%20objects%20supplie d%20by%20providers.%20The%20methods,%20properties, %20constructors,%20and%20other%20members%20of%20th e%20System.Management%20namespace%20are%20used%20b y%20Web%20forms%20and%20other%20management%20appli cations.%20%20%20Architecture%20Elements%20The%20f ollowing%20illustration%20identifies%20the%20three %20WMI%20tiers%20and%20identifies%20how%20the%20Sy stem.Management%20namespace%20is%20layered%20on%20 WMI.%20It%20also%20shows%20how%20WMI%20providers%2 0are%20related%20to%20the%20applications%20that%20 monitor%20the%20provided%20data.http://i.msdn.microsoft.com/ms257361.Local_-1815356961_wmi%28en-US,VS.80%29.gif


Clients that access data through WMI can be:

*

Windows Forms
*

Web Forms/ASP.NET
*

Management applications, such as Management Operations Manager (MOM), Systems Management Server (SMS), or HP OpenView.

Providers of management data can be:

*

Original WMI providers that expose system or application data, such as the Win32_Provider or the System Registry Provider. For more information, see "Win32_Provider" and "System Registry Provider" in the Windows Management Instrumentation documentation in the MSDN Library at http://msdn.microsoft.com/library.
*

Windows Forms and Web Forms/ASP.NET Page Framework applications that expose management instrumentation about themselves to other clients, such as SMS.
.

Netsky
جمعه 07 اسفند 1388, 14:31 عصر
سلامی دوباره .
خب امروز یه کلاس نوشتم که اطلاعات مفیدی رو در مورد هارددیسک استخراج میکنه .
البته قبلش باید رفرنس System.Managment رو اضافه کنید .

این اطلاعات شامل موارد زیر میشن :



1 - Bytes Per Sector
2 - Name And Model
3 - Connection Type
4 - Manufacturer
5 - Number OF Partitions
6 - Sectors Per Track
7 - Serial Number
8 - Total Size OF Hard Disk at Byte
9 - Total Cylinders
10 - Total Heads
11 – Total Sectors
12 – Total Tracks
13 – Tracks Per Cylinders

امیدوارم برای دوستان مفید واقع بشه . اگه کسی هم سوالی داشت با پیام خصوصی در خدمتم .

MehdiLiver
جمعه 07 اسفند 1388, 19:20 عصر
کسی نمیخواد این بحث رو ادامه بده؟

از سخت افزارهای دیگه اطلاعاتی بگیریم. مثل:
CPU
VGA
H.D.D
MB
and other...
من میخوام اما تو محیط Application نه Consol

r00tkit
جمعه 07 اسفند 1388, 19:28 عصر
سلام به همه من(ما) تا اینجا فقط از Properties های کلاس های WMI استفاده کردیم

ما می تونیم از Method های این کلاس ها هم استفاده کنیم (برای خیلی کارها)

مثال:



using System;
using System.Management;

// This sample demonstrates invoking
// a WMI method using an array of arguments.
public class InvokeMethod
{
public static void Main()
{

// Get the object on which the
// method will be invoked
ManagementClass processClass =
new ManagementClass("Win32_Process");

// Create an array containing all
// arguments for the method
object[] methodArgs =
{"notepad.exe", null, null, 0};

//Execute the method
object result =
processClass.InvokeMethod(
"Create", methodArgs);

//Display results
Console.WriteLine(
"Creation of process returned: " + result);
Console.WriteLine("Process id: " + methodArgs[3]);
}

}

r00tkit
جمعه 07 اسفند 1388, 19:31 عصر
بدست اوردن ادرس عکس desktop

اطلاعات دیگه تو MSDN


ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM Win32_Desktop");
foreach (ManagementObject service in s.Get())
{

Console.WriteLine((string)service["Wallpaper"]);
}

r00tkit
جمعه 07 اسفند 1388, 19:33 عصر
من میخوام اما تو محیط Application نه Consol

عزیز جان یکمی خودت کار کن .......
یعنی چی Consol نه Application :عصبانی++:
مگه این کد ها توی این محیط ها فرق می کنه!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟:عصبانی:

MehdiLiver
جمعه 07 اسفند 1388, 19:43 عصر
عزیز جان یکمی خودت کار کن .......
یعنی چی ....:عصبانی++:
خب بلد نیستم از محیط Console برای Application هام استفاده کنم :ناراحت:

r00tkit
جمعه 07 اسفند 1388, 19:46 عصر
چشب از این به بعد windows application مثال می زنم

r00tkit
جمعه 07 اسفند 1388, 19:57 عصر
جیگرتو :بوس:
عوض تشکر کردنه دیگه؟؟؟


لیست برنامه های runs automatically در شروع ویندوز با argumant انها



ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM Win32_StartupCommand");
foreach (ManagementObject service in s.Get())
{

MessageBox.Show (((string)service["Command"]));
}
}

MehdiLiver
جمعه 07 اسفند 1388, 20:10 عصر
مهندس این آخرش
{
{
داره
میگه یه مشکلی تو } داری :لبخند:
من این فرمانو تویه Button گذاشتم
به اینصورت


privatevoid button1_Click(object sender, EventArgs e)
{
{
///////////////
ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM Win32_StartupCommand");
foreach (ManagementObject service in s.Get())
{
MessageBox.Show (((string)service["Command"]));
}
}


////////////////
}
}


قربون دستت این مشکلو حل کن خودم به شخصه 20 بار تشکر رو واست میزنم ، قول :لبخند:
همینی که نوشتیو RAR کن ما تازه کارام بفهمیم چه میکنید شما بزرگان C#

debugger
جمعه 07 اسفند 1388, 20:51 عصر
ممنون میشم یه کدی بنویسی دمای CPU و هارد و ماردبورد و کارت گرافیک را نشون بده

cpu من اینتل هست و مثل اینکه نمیشه دمای اینتل را به دست اورد (دمای AMD به دست میاد )

Netsky
جمعه 07 اسفند 1388, 23:03 عصر
مهندس این آخرش
{
{
داره
میگه یه مشکلی تو } داری :لبخند:
من این فرمانو تویه Button گذاشتم
به اینصورت


privatevoid button1_Click(object sender, EventArgs e)
{
{
///////////////
ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM Win32_StartupCommand");
foreach (ManagementObject service in s.Get())
{
MessageBox.Show (((string)service["Command"]));
}
}


////////////////
}
}


قربون دستت این مشکلو حل کن خودم به شخصه 20 بار تشکر رو واست میزنم ، قول :لبخند:
همینی که نوشتیو RAR کن ما تازه کارام بفهمیم چه میکنید شما بزرگان C#‎
سلام .
دوست عزیز احتمال وجود دوتا مشکل هست .
1 - ممکنه شما این نیم اسپیس یعنی System.Management رو در برنامتون تعریف نکردید . که با نوشتن کد زیر در قسمت General محیط کد نویسی مشکل شما حل میشه :



using System.Management;

2- یا اینکه رفرنس مربوطه رو اضافه نکردید . که باید از منوی Project و گزینه Add Reference این کار رو انجام بدید . روی گزینه System.Management دوبار کلیک کنید تا این رفرنس اضافه بشه .
موفق باشید .............

r00tkit
جمعه 07 اسفند 1388, 23:15 عصر
ok:wink اینم مثال

ali_autumnal
جمعه 07 اسفند 1388, 23:42 عصر
سلام به همه من(ما) تا اینجا فقط از Properties های کلاس های WMI استفاده کردیم

ما می تونیم از Method های این کلاس ها هم استفاده کنیم (برای خیلی کارها)

مثال:



using System;
using System.Management;

// This sample demonstrates invoking
// a WMI method using an array of arguments.
public class InvokeMethod
{
public static void Main()
{

// Get the object on which the
// method will be invoked
ManagementClass processClass =
new ManagementClass("Win32_Process");

// Create an array containing all
// arguments for the method
object[] methodArgs =
{"notepad.exe", null, null, 0};

//Execute the method
object result =
processClass.InvokeMethod(
"Create", methodArgs);

//Display results
Console.WriteLine(
"Creation of process returned: " + result);
Console.WriteLine("Process id: " + methodArgs[3]);
}

}



با سلام و عرض خسته نباشید به همه دوستان.
همشهری جان سلام . دست درد نکنه عالیه. ای شالا موفق و موئید باشی.

اگه امکانش هست در مورد برای خیلی کارها کمی بیشتر توضیح بده.
متشکرم:تشویق::تشویق::تشویق:: لب:

r00tkit
جمعه 07 اسفند 1388, 23:43 عصر
ممنون میشم یه کدی بنویسی دمای CPU و هارد و ماردبورد و کارت گرافیک را نشون بده

cpu من اینتل هست و مثل اینکه نمیشه دمای اینتل را به دست اورد (دمای AMD به دست میاد )

دمای CPU



try
{
ManagementObjectSearcher f = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature");
foreach (ManagementObject i in f.Get())
{

double te = double.Parse(i["CurrentTemperature"].ToString());
te -= 2732;
te /= 10.0;
MessageBox.Show(te.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

ali_autumnal
جمعه 07 اسفند 1388, 23:56 عصر
دمای CPU



try
{
ManagementObjectSearcher f = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature");
foreach (ManagementObject i in f.Get())
{

double te = double.Parse(i["CurrentTemperature"].ToString());
te -= 2732;
te /= 10.0;
MessageBox.Show(te.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}



این هنگام اجرا چرا مینویسه:
Not Supported

debugger
شنبه 08 اسفند 1388, 00:00 صبح
همونطوری که گفتم دمای Cpu اینتل را نشون نمیده این کد

ولی ممنون

r00tkit
شنبه 08 اسفند 1388, 00:00 صبح
سلام



اگه امکانش هست در مورد برای خیلی کارها کمی بیشتر توضیح بده.


کاربرد زیاد داره به پست شماره ی 5 مراجعه کن برای تعداد کلاس ها حالا هر کدوم چند تا method دارن ببین چقد کار می شه انجام داد

r00tkit
شنبه 08 اسفند 1388, 00:04 صبح
عزیزان من این ها رو چک می کنم بعد می نویسم
اگه تو pcشما اجرا نمی کنه شرمنده :خجالت:

دمای hard

منبع:http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/d4f7c173-c605-4eeb-95ff-6d3eb1c7869b




try
{
ManagementObjectSearcher f = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData");
foreach (ManagementObject i in f.Get())
{
byte[] d=(byte[])i["VendorSpecific"];
MessageBox.Show(d[115].ToString());

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

MehdiLiver
شنبه 08 اسفند 1388, 00:33 صبح
عزیزان من این ها رو چک می کنم بعد می نویسم
اگه تو pcشما اجرا نمی کنه شرمنده :خجالت:

دمای hard

منبع:http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/d4f7c173-c605-4eeb-95ff-6d3eb1c7869b




try
{
ManagementObjectSearcher f = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData");
foreach (ManagementObject i in f.Get())
{
byte[] d=(byte[])i["VendorSpecific"];
MessageBox.Show(d[115].ToString());

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}


ای بابا عشق من این کد تو Vista پیغام Access Denid میده :قهقهه: ای نامرد :لبخند:

Netsky
شنبه 08 اسفند 1388, 07:31 صبح
سلام ! امیدوارم حال همگی دوستان خوب باشه .
یه آموزش کوچولو واستون آماده کردم . بوسیله ی این آموزش میتونید خیلی راحت با استفاده از برنامه MgmtClassGen یه کلاس واسه استفاده هرکدوم از سخت افزارهاتون آماده کنید .
واسه اینکار ما به برنامه MgmtClassGen نیاز داریم ! نترسید بابا ، نیازی به دانلود کردن این برنامه ندارید . میتونید به آدرس زیر مراجعه کنید . برنامه همین جاست .



C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin

(البته این آدرس در کامپیوتر من هست ، ممکنه آدرس شما فرق کنه . اگه برنامه رو با این روش پیدا نکردید کلمه mgmtclassgen رو در سرچ ویندوز جستجو کنید . اون موقع آدرس رو میتونید ببینید . خلاصه یه جوری برنامه رو پیدا کنید . )
البته این برنامه حالت Console داره و با کلیک کردن رو برنامه نمیتونید اون رو باز و ازش استفاده کنید .
بنابراین باید از روش زیر از برنامه استفاده کنید .
1- وارد Commnad Prompt بشید . دستورات زیر رو به ترتیب وارد کنید :



cd\
cd C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin
MgmtClassGen.exe

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



MgmtClassGen Win32_BaseBoard

به آدرسی که برنامه در اونجا بود برید . مشاهده میکنید که فایل کلاس اونجا ایجاد شده .
ساختار اصلی دستور واسه ساخت کلاس مورد نظر شما به اینصورته :



MgmtClassGen <WMIClass> [options]

شما باید ابتدا کلمه MgmtClassGen رو تایپ کنید و سپس نام کلاسی که مربوط به قطعه مورد نظرتون میشه رو وارد کنید . مثل مثال بالا که ما در اونجا کلاسی رو واسه استخراج اطلاعات مربوط به MotherBoard ساختیم ( Win32_BaseBoard ) .
در حالت عادی اگه دستور بالا رو اجرا کنید کلاس مورد نظرتون با زبان سی شارپ ایجاد میشه . ولی این برنامه قابلیت ساخت کلاس با زبان های دیگه رو هم داره .
این زبان ها شامل مجموعه زیر میشن :


VB.Net
JScript
J#
VC++‎

اگه خواستید کلاسی رو هم مثلا با زبان VB.Net ایجاد کنید کافیه از Option های این برنامه استفاده کنید . به عنوان مثال :



MgmtClassGen Win32_BaseBoard /L VB

این کد همون کلاس Win32_BaseBoard رو که با زبان C#‎ در دفعه قبل ایجاد کردیم حالا با زبان VB.Net ایجاد میکنه .
به همین ترتیب میتونید کلاس های دیگه رو با زبان های مختلف ایجاد کنید .
البته این برنامه تنها همین آپشن رو نداره و آپشن های دیگه ای هم در برنامه وجود دارند. مثلا واسه اینکه بتونید یه کلاس رو در آدرس دلخواه خودتون ایجاد کنید میتونید از دستور زیر استفاده کنید :



MgmtClassGen Win32_BaseBoard /P C:\1.vb

این دستور باعث میشه که کلاس مربوطه در این آدرس ( C:\ ) و با نام ( 1.vb) ذخیره بشه . البته اگه کلاسی رو که میخاید ذخیره کنید با استفاده از زبان سی شارپ بود ، باید پسوند رو به جای cs ، vb انتخاب کنید . در کل وظیفه انجام این عملیات بر عهده عملگر /P هستش .
خب این هم دوتا از آپشن های این برنامه بود .
در کل برنامه بسیار خوبیه . خیلی راحت میتونید باهاش کلاس بسازید و ازش در برنامه هاتون استفاده کنید .
امیدوارم مورد استفاده شما عزیزان واقع بشه .

Netsky
سه شنبه 10 فروردین 1389, 15:16 عصر
سلام . سال نو رو به فعال این تاپیک تبریک عرض میکنم .
بابا حیفه این تاپیک رو همین جوری رهاش کنیم . واقعا میتونه به یه تاپیک پرمحتوا تبدیل بشه . گرچه تا همین جاش هم پر از مطالب خوب و مفید بوده . بازم یه کلاس دیگه واستون نوشتم . با این یکی میتونید اطلاعات مربوط به CPU رو دریافت کنید .
این اطلاعات عبارتند از :
مدل
وضعیت
معماری
نام و قدرت
Clock Speed
کمپانی سازنده
شماره شناسه
پهنای آدرس ( چند بیتی بودن )
سوکت مورد استفاده روی مادربرد

امیدوارم استفاده کنید .
موفق و سربلند باشید ...............

Amir Oveisi
سه شنبه 10 فروردین 1389, 15:53 عصر
WMI Code Creator

با این برنامه مایکروسافت میتونین کد هر کاری رو که با WMI امکان پذیر هست رو به سه زبان از جمله C#‎ تنها با چند کلیک بدست بیارید.


http://amiroveisi.persiangig.com/image/wmi.JPG

دانلود (http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en)

موفق باشید

Salar Ashgi
سه شنبه 10 فروردین 1389, 18:05 عصر
گفتم در این تاپیک دو لینک زیر میتونه مفید واقع بشه :

http://barnamenevis.org/forum/showpost.php?p=937091&postcount=458

=================
http://barnamenevis.org/forum/showthread.php?t=211589

hojjatshariffam
سه شنبه 07 اردیبهشت 1389, 00:49 صبح
ببخشید دوستان
اولا تشکر می کنم از مطالب عالی و فوق العاده مفیدی که همتون زحمتشو کشیدین

بعدش یه سئوال برام پیش اومده

من با استفاده این این روش شماره سریال سخت افزارا رو تونستم بدست بیارم (مثلا هارد برای ققل گذاری نرم افزار)
آیا میشه این مشخصات رو تقییر داد، مثلا شماره سریال هارد رو هر چیزی که بخوایم بزارم ، اینطوری اگه بشه (یعنی تغییر داد) که برنامه اگه رو یه سیستم رجیستر بشه و کسی بتونه سریال هارد رو برداره و در یک سیستم دیگه جایگذاری کنه رو اون سیستم هم رجیست میشه

آیا مشخصات قابل تغییر و یا لااقل میشه بهش کلک زد که یه چیز دیگه ای رو نشون بده؟
امید وارم که منظورمو درست رسونده باشم

ahmad_Z
یک شنبه 07 شهریور 1389, 16:23 عصر
با سلام ... این کد ها همگی درستن
اما من نیاز دارم که سریال هارد کلاینت یا کاربر رو پیدا کنم ؟؟
لطفا راهنماییم کنید

cheshm
جمعه 19 شهریور 1389, 22:39 عصر
عذر میخوام این ManagementObjectSearcherپ چیه ؟توی برنامه من شناخته شده نیست باید چکار کنم؟همچنین system.machine

stahad1
شنبه 20 شهریور 1389, 01:38 صبح
اگه انگلیسی خوب بلد بودیم می رفتیم همون فروم انگلیسی پس خواهشآ کپی نکنید بیاید بزارید اینجا

Arash_janusV3
دوشنبه 01 فروردین 1390, 15:17 عصر
دیدم اطلاعات این تاپیک واقعا حیفه اینجوری رها بمونه این پست رو زدم که مورد توجه مدیر بخش قرار بگیره
از دوستان خواهشمندم از این پست حمایت کنند
ممنون

OldFoX
چهارشنبه 25 بهمن 1391, 23:06 عصر
سلام دوستان ببخشید من تازه کارم به یه مشکل ساده برخوردم و ازتون یه سوال داشتم
من system.Managment رو مینویسم ولی بازم ارور میده

100038

ممنون میشم کمکم کنید

daneshjo90
چهارشنبه 25 بهمن 1391, 23:29 عصر
دوست عزیز
روی فولدر References راست کلیک کن و AddReferences رو بزن

در کادر باز شده به تب .Net برو و System.Management رو انتخاب کن بعدش OK رو بزن

حالا فک کنم ارور نده

اگه درست بود یه تشکر بزن


موفق باشی

8722203713
جمعه 10 خرداد 1392, 09:30 صبح
با سلام
لطفا كد بدست آوردن ip و آدرس مك و وصل بودن موس و اسكنر و مانيتور رو هم اگه كسي ميدونه بگه.
باتشكر:لبخندساده:

intel_amd
جمعه 10 خرداد 1392, 14:11 عصر
منظور از این دستور select ای که گذاشته شده چیه؟ مثل sql هست !
SELECT * FROM Win32_StartupCommand

تازه_کار
یک شنبه 27 مرداد 1392, 11:43 صبح
سلام
ممنون از تمام زحماتی که کشیده شده است.
دو تا نکته:
1- چطور می شه شرکت سازنده RAM رو تشخیص داد، من گزینه های موجود در کلاس PhysicalMemory رو تست کردم اما جواب نگرفتم
2- چطور می شه از طریق شبکه، با همین ابزار، اطلاعات سخت افزاری کلاینت رو بدست آورد؟

بسیار سپاس گزارم
منتظر پاسخ شما هستم دوستان پر تلاش و سخاوتمند من

تازه_کار
یک شنبه 27 مرداد 1392, 11:48 صبح
دوست عزیز
روی فولدر References راست کلیک کن و AddReferences رو بزن

در کادر باز شده به تب .Net برو و System.Management رو انتخاب کن بعدش OK رو بزن

حالا فک کنم ارور نده

اگه درست بود یه تشکر بزن


موفق باشی

سلام
ممنون از تمام زحماتی که کشیده شده است.
دو تا نکته:
1- چطور می شه شرکت سازنده RAM رو تشخیص داد، من گزینه های موجود در کلاس PhysicalMemory رو تست کردم اما جواب نگرفتم
2- چطور می شه از طریق شبکه، با همین ابزار، اطلاعات سخت افزاری کلاینت رو بدست آورد؟

بسیار سپاس گزارم
منتظر پاسخ شما هستم دوستان پر تلاش و سخاوتمند من

majid_labbeiky
پنج شنبه 07 شهریور 1392, 12:00 عصر
با سلام دمت دوستان
چطور می شه از طریق شبکه، با همین ابزار، اطلاعات سخت افزاری کلاینت رو بدست آورد؟

kienshien
سه شنبه 28 مهر 1394, 11:47 صبح
با سلام ، اول امیدوارم منو ببخشید از اینکه این تاپیک قدیمی رو میارم بالا ، یکم گشتم اما جوابم رو نتونستم پیدا کنم ... یه سوال داشتم که حسابی درگیرشم ، چرا برنامه ای که برای بدست آوردن مشخصات سخت افزاری توسط wmi نوشتم توی ویندوز xp جواب نمیده ، برای اینکه جواب بده چیکار باید بکنم؟




مشکل رو پیدا کردم ، مثل اینکه در ویندوز XP کد زیر با object نال برگردانده میشه و نمیشه توسط wmi مدل رم رو بدست آورد:

_error = "RamModel";
ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PhysicalMemory");
List<string> rammodels = new List<string>();








foreach (ManagementObject mo in mos.Get())
{
rammodels.Add(mo["Manufacturer"].ToString());
}








return rammodels;





اما چرا ؟ ، چرا نمیشه توسط کد بالا در سیستم عاملهای ویندوز XP مدل رم رو بدست آورد !!!؟ ممنون میشم راهنماییم بکنید.

kienshien
سه شنبه 28 مهر 1394, 13:49 عصر
از قرار معلوم wmi با رم های DDR2 مشکل داره ، یا بهتره اینجوری بگم که با رمهای قبل از DDR3 مشکل داره ، شاید بشه بجای استفاده از Win32_PhysicalMemory از جدول دیگه ای استفاده کرد ، ولی هنوز جدول متناظرش رو پیدا نکردم ، همین جدول برای میزان حافظه مشکلی نداره و بهتون حجم رم رو میده ، هنوز درگیرم ، اگر کسی راه حلی داره لطفا بهم بگه ، ممنون میشم ، منم اگه راه حلشو پیدا کردم حتما اینجا قرار خواهم داد.