سلام
چجوری فرکانس مانیتور کاربر رو بدست بیارم و اونو تو یه لیبل نشون بدم؟
Printable View
سلام
چجوری فرکانس مانیتور کاربر رو بدست بیارم و اونو تو یه لیبل نشون بدم؟
سلام.
کد:Private Declare Function EnumDisplaySettingsA Lib "user32" (ByVal lpszDeviceName As String, ByVal iModeNum As Long, lpDevMode As DEVMODE) As Long
Private Const ENUM_CURRENT_SETTINGS = -1
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Long
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
سلام
ممنون Payman_62 عزیز از توجه شما ، ولی من از این کد قبلا تو پروژم استفاده کردم ( برای رزولیشن ) مشکلم اینه که میخوام قبل از تغییر رزولیشن فرکانس مانیتور کاربر رو یجا ذخیره کنم تا وقتی از برنامه من خارج شد به حالت اولش برگرده . اگه تجربشو داشته باشید میدونید که اگر این فرکانش خوب تنظیم نشه چه مشکلات بزرگی پیش میاره که متاسفانه در اکثر کدهای مربوط به رزولیشن نادیده گرفته شده ( تفاوت فرکانس در LCD و CRT ) . خواهش میکنم کمکم کنید من این سوالو تو چند فروم پرسیدم اما تا به امروز کسی جوابشو نداده :41:
بازم ممنونم
سلام با کد زیر میتونی ریزولیشن مانیتور رو بدست بیاری:
سوالی بود درخدمتیم.کد:Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
'Insert this code to your form:
Private Sub Form_Load()
Dim Tmp As String
Tmp = GetSystemMetrics(SM_CXSCREEN) & _
"x" & GetSystemMetrics(SM_CYSCREEN)
MsgBox (Tmp)
End Sub
موفق باشید و سربلند.
نقل قول:
ممنون ، ولی صحبت ما راجب رزولیشن نیست . در پست دومم توضیح دادم
سلام.
مگه نمیخوای ریزولیشن رو یه جا ذخیره کنی؟
اگه منظورت این نیست. یکم بیشتر توضیح بده چون من غیر این چیزه دیگه ای نفهمیدم.
راستی مهدی جان از اینکه جواب نگیری نا امید نباش اینجا با جاهای دیگه فرق میکنه.خیلی کم اتفاق میفته کسی بی جواب بره.
موفق باشید و سربلند.
ممنونم دوست عزیز ، حرف های شما امیدوارم کرد . ببینید من میدونم چجوری باید رزولیشن رو بدست بیارم ولی یه گذینه دیگه هم تو رزولیشن مهمه : فرکانس یا همون Screen refresh rate و مسیر دسترسی به اون هم اینه :نقل قول:
اکثر کدهای مربوط به رزولیشن اینو در نظر نگرفتن . من فقط این کد رو پیدا کردم :کد:Display Properties/Settings/Advanced/Monitor/Screen refresh rate
همونطور که میبینید در قسمت Form_Load عدد آخر برابر است با "85" که همون فرکانسه . این عدد در مانیتورهای مختلف و با رزولیشن های مختلف فرق میکنه ، پس ما با این کد میتونیم فرکانسو تغییر بدیم ، حالا اگر این عدد در مانیتور کاربر "70" باشه من چجوری میتونم اینو بفهمم تا موقع خروج از برنامه اون رو به عدد "70" برگردونم ؟کد:Private Declare Function EnumDisplaySettingsA Lib "user32.dll" (ByVal lpszDeviceName As String, ByVal iModeNum As Long, lpDevMode As DEVMODE) As Long
Private Declare Function ChangeDisplaySettingsA Lib "user32.dll" (lpDevMode As Any, ByVal dwFlags As Long) As Long
Private Const ENUM_CURRENT_SETTINGS = -1
Private Const CDS_UPDATEREGISTRY = &H1
Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Long
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Sub SetDisplaySetting(intWidth As Integer, intHeight As Integer, bytBitsPerPel As Byte, bytFrequency As Byte)
Dim dvmDisplay As DEVMODE
dvmDisplay.dmSize = Len(dvmDisplay)
EnumDisplaySettingsA vbNullString, ENUM_CURRENT_SETTINGS, dvmDisplay
dvmDisplay.dmPelsWidth = intWidth
dvmDisplay.dmPelsHeight = intHeight
dvmDisplay.dmBitsPerPel = bytBitsPerPel
dvmDisplay.dmDisplayFrequency = bytFrequency
ChangeDisplaySettingsA dvmDisplay, CDS_UPDATEREGISTRY
End Sub
Private Sub Form_Load()
SetDisplaySetting 1024, 768, 32, 85
End Sub
اگر این سوال جواب نداشته باشه تمام کدهای مربوط به رزولیشن بی مصرف هستن برای اینکه بهتر بفهمید چی میگم فرکانس مانیتور خودتونو ( اگر از نوع معمولی باشه ) بزارید رو 60 و ببینید بعد 10 دقیقه چه بلایی به سر چشماتون میاد . تازه اگر مانیتور LCD باشه و تو برنامه عدد 85 و بهش بدید ، هیچی نشون نمیده و کاربر باید سیستمو ریست کنه :41:
اگر بازم نیاز به توضیح داشت بگید . موفق باشید
سلام.نقل قول:
من متوجه نشدم. API که قرار دادم فرکانس و رزولیشن و کوآلیتی و همه چی رو با هم میده.
آخرین گزینه اون تایپ فرکانس هست. خوب فرکانس رو بگیر یه جا ذخیره کن. دیگه مشکلت کجاست؟
سلام مهدی جان خسته نباشید.
این Exe رو دانلود کن ببینم چیزی که میخوای دقیقاً شبیه اینه؟ این کارتو راه میندازه؟
دانلود:
موفق باشی دوست من.کد:http://parsaspace.com/download.aspx?file=Application/ScreenResolution.rar&username=hamishebahar
آهان مشکلم دقیقا همینه . همون جمله ای که گفتید : " خوب فرکانس رو بگیر یه جا ذخیره کن " . من فقط میخوام فرکانس کاربر رو بگیرم و رو یه لیبل نشون بدم (قبل از تغییر) . اگر لطف کنید و کد مربوط به همون API رو بهم بدید خیلی ممنون میشم . مثل اینکه خدارو شکر داریم به یه جایی میرسیم:10:نقل قول: