سلام
چجوری فرکانس مانیتور کاربر رو بدست بیارم و اونو تو یه لیبل نشون بدم؟
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:نقل قول:
ممنون ولی کار نکرد (ارور میده).نقل قول:
سلام.نقل قول:
قرار نشد تنبلی کنی.
API رو که گذاشتم. دیگه کدش کاری داشت؟
کد: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 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 Function GetDisplaySetting() As DEVMODE
Dim dvmDisplay As DEVMODE
dvmDisplay.dmSize = Len(dvmDisplay)
EnumDisplaySettingsA vbNullString, ENUM_CURRENT_SETTINGS, dvmDisplay
GetDisplaySetting = dvmDisplay
End Function
Private Sub Command1_Click()
Label1.Caption = GetDisplaySetting.dmDisplayFrequency
End Sub
سلام.نقل قول:
فکر کنم با جوابی آقا پیمان دادن مشکلت حل شده باشه.
برای اجرای اون فایل باید رو سیستمت دات نت نصب باشه.
موفق باشید.
سلام آقا پیمان واقعاً سپاسگذارم . باورکنید تنبل نیستم ، موضوع اینکه من زیاد با VB کار نکردم ، مخصوصاً با API ها مشکل دارم ولی تازگی ها درگیرش شدم وامیدوارم با کمک دوستان خوبی مثل شما پیشرفت کنم . البته با تمام این حرفها تونستم این دمو رو که یه بازی هست رو بسازمنقل قول:
این تصویرش + لینک دانلود
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کد:http://www.box.net/shared/l2utf5r64l
سلام.نقل قول:
نه نیازی به نصب دات نت نیست.
سلام فایلتونو دانلود کردم:46:.نقل قول:
خودتون ساختین؟:18:
ماشاالله.... مااشالله...
آفرین.
چندتا سوال:
با چه زبانی نوشتین؟
چقدر وقتتونو گرفت؟
عمراً صدسال دیگه بتونم همچین چیزی بسازم.
راستی آهنگش خیلی قشنگ بود.
موفق باشی دوست عزیز.
سلام دوست من ، خوب معلومه دیگه با VB نوشتم . بخاطر همین گذاشتمش تو این پست . ولی چه فایده بازم مشکلم با رزولیشن حل نشده . با کمک دوستان و پیمان عزیز الان میتونم بخوبی رزولیشن و فرکانس رو تغییر بدم ولی این کدها آیکون های دسک تاپ رو بعد از تغییر بهم میریزن . یه کد پیدا کردم که این مشکلو نداره ولی کد مربوط به فرکانس توش نیست . کسی میتونه کد فرکانس رو بهش اضافه کنه ؟
کد:Option Explicit
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const CCFORMNAME = 32
Const CCDEVICENAME = 32
Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
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 * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Declare Function EnumDisplaySettings Lib _
"user32" Alias "EnumDisplaySettingsA" _
(ByVal lpszDeviceName As Long, _
ByVal iModeNum As Long, _
lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib _
"user32" Alias "ChangeDisplaySettingsA" ( _
lpDevMode As Any, ByVal dwFlags As Long) As Long
Public Sub ChangeResolution( _
iWidth As Single, _
iHeight As Single)
Dim DevM As DEVMODE
Dim A As Boolean
Dim i As Long
Dim b As Long
'Enumerate settings
Do
A = EnumDisplaySettings(0&, i&, DevM)
i = i + 1
Loop Until (A = False)
'Change settings
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
DevM.dmPelsWidth = iWidth
DevM.dmPelsHeight = iHeight
b = ChangeDisplaySettings(DevM, 0)
End Sub
Private Sub Command1_Click()
ChangeResolution Trim$(Text1.Text), Trim$(Text2.Text)
End Sub
سلام.
یعنی میخوای بگی این بازی رو ساختی و یه تغییر کوچولو تو کدا نمیتونی بدی؟
موفق و سربلند باشید.کد:Option Explicit
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 Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const CCFORMNAME = 32
Const CCDEVICENAME = 32
Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
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 * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Declare Function EnumDisplaySettings Lib _
"user32" Alias "EnumDisplaySettingsA" _
(ByVal lpszDeviceName As Long, _
ByVal iModeNum As Long, _
lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib _
"user32" Alias "ChangeDisplaySettingsA" ( _
lpDevMode As Any, ByVal dwFlags As Long) As Long
Public Sub ChangeResolution( _
iWidth As Single, _
iHeight As Single)
Dim DevM As DEVMODE
Dim A As Boolean
Dim i As Long
Dim b As Long
'Enumerate settings
Do
A = EnumDisplaySettings(0&, i&, DevM)
i = i + 1
Loop Until (A = False)
'Change settings
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
DevM.dmPelsWidth = iWidth
DevM.dmPelsHeight = iHeight
b = ChangeDisplaySettings(DevM, 0)
End Sub
Private Sub Command1_Click()
Label1.Caption = GetDisplaySetting.dmDisplayFrequency
ChangeResolution Trim$(Text1.Text), Trim$(Text2.Text)
End Sub
Private Function GetDisplaySetting() As DEVMODE
Dim dvmDisplay As DEVMODE
dvmDisplay.dmSize = Len(dvmDisplay)
EnumDisplaySettingsA vbNullString, ENUM_CURRENT_SETTINGS, dvmDisplay
GetDisplaySetting = dvmDisplay
End Function
تو پست 14 به آقا پیمان هم توضیح دادم که تو VB تقریباً مبتدی هستم و چیزی که تو این بازی باعث تعجب شما شده بیشتر گرافیکشه . درسته که کدهای زیادی داره ولی اکثرشون از دستورات IF تشکیل شدن که یه چیز ساده و برای همه قابل فهمه . واما کدی که گذاشتید : تغییری که شما دادید همونیه که پیمان گفت یعنی فقط فرکانس رو توی لیبل نشون میده (دیگه تا اون حد هم مبتدی نیستم که نتونم این کپی/ پیست رو انجام بدم) . منظورم این بود که فرکانس ورودی اعمال بشه یعنی یه Text3 به برنامه اضافه بشه که فرکانس درخواستی رو بگیره و اونو اعمال کنهنقل قول:
باز هم ممنونم و براتون آرزوی موفقیت میکنم .
سلام.
این API یه پارامتر از همون تایپ میگیره. میتونی ابتدا با EnumDisplaySettingsA تنظیمات رو بگیری. تغییرات رو بدی و با ChangeDisplaySettingsA اعمال کنی.کد:Private Declare Function ChangeDisplaySettingsA Lib "user32" (lpDevMode As Any, ByVal dwFlags As Long) As Long
Private Const CDS_UPDATEREGISTRY = &H1
آقا پیمان عصبانی نشی ها ، وقتی از CDS_UPDATEREGISTRY استفاده میکنم ، همون مشکلی که گفتم پیش میاد یعنی آیکون های دسکتاپ بهم میریزه . امیدوارم منظورمو از بهم ریختگی آیکونها فهمیده باشی ولی یه بار دیگه میگم : وقتی شما تعداد زیادی آیکون در صفحه دسکتاپ داشته باشید و اونارو به سلیقه ی خودتون مرتب کرده باشید و رزولیشنتون 768*1024 باشه ، با تغییر اون به 600*800 تمام این آیکونها بهم میریزن (جمع میشن) و وقتی به 768*1024 برمیگردید باید دوباره اونارو مرتب کنید . فقط این کد آخری که گذاشتم این خرابکاری رو نکرد ولی مشکلش اینه که فرکانس رو تغییر نمیده .نقل قول:
ببخشید سرتونو درد آوردم ، ولی فکر میکنم اگر این مشکل هم حل بشه ، این تاپیک یه تاپیک مرجع برای رزولیشن بشه :11:
سلام.
خود منم همین مشکل رو همیشه داشتم. با تغییر رزولیشن حتی از دیسپلی خود ویندوز و برگردوندن به حالت قبل آیکون هام به هم میریزن.
من کارت گرافیکم مشکل داره. فعلا یه کارت گرافیکی قدیمی 1 مگ انداختم رو سیستم ( یادش به خیر مال دوران بچگیمه ). این کارت گرافیک فقط 800*600 نمایش میده. 1024*768 هم به سختی گاهی اوقات میشه ولی کم میاره و رنگ ها به هم میریزن. اینه که نمیتونم کد رو تست کنم.
شما با اون کد که خودت گفتی رزولیشن رو تغییر بده بعد با کد من تنظیمات رو بگیر فرکانس رو عوض کن و تنظیمات جدید رو اعمال کن ببین باز به هم میریزه یا نه.
سلام.
این تغییرات رو در کدت اعمال کن و تست کن.
گفتم من خودم نمیتونم تست کنم.
کد:Const DM_DISPLAYFREQUENCY = &H400000
dvmDisplay.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_DISPLAYFREQUENCY
DevM.dmDisplayFrequency = 85
سلام دوستان.خسته نباشید.
احتماً باید مشکل از کارت گرافیک باشید.
برای من هیچ مشکلی برای آیکن درست نمیکنه.
موفق باشید.
وااااااااااااای . . . باورم نمیشه . . . درست شد . خیلی ممنونم پیمان جان انشاالله رزولیشن زندگیت همیشه رو 1440*1920 باشه :31: . اجازه میخوام اگر بازم تو این مبحث به سوالی برخوردم همینجا بپرسم .نقل قول:
ممنونم و براتون آرزوی موفقیت دارم .