Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Сколько мониторов? Добавлено: 16.03.09 17:54  

Автор вопроса:  KreAtoR
Как узнать через API сколько в данный момент работает мониторов?

если через АПИ нельзя то подскажите как!!!

желательно конечно с примером.

Ответить

  Ответы Всего ответов: 29  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 16.03.09 18:08
.NET

public static System.Windows.Forms.Screen[] AllScreens { get; }
    Member of System.Windows.Forms.Screen

Summary:
Gets an array of all displays on the system.

Returns:
An array of type System.Windows.Forms.Screen, containing all displays on the system.

Ответить

Номер ответа: 2
Автор ответа:
 KreAtoR



Вопросов: 120
Ответов: 438
 Профиль | | #2 Добавлено: 16.03.09 18:17
а для vb6 есть примерчик.

Ответить

Номер ответа: 3
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #3 Добавлено: 16.03.09 19:07
Зря ты заикнулся о вб )
Знаю, что из реестра можно получить все моники которые были подключены к компу за все время жизни твоей винды.
А если винда их еще и распознала, то и фирмы с моделями получить можно.

Ответить

Номер ответа: 4
Автор ответа:
 KreAtoR



Вопросов: 120
Ответов: 438
 Профиль | | #4 Добавлено: 17.03.09 10:45
@Smith
мне лишь интересно, сколько мониторов работают в данный момент. А также мне очень интересно их разрешение. Пока что смог сделать вот такую вот штуку

у меня это называется monitor.bas
  1. Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
  2.  
  3. Const SM_ARRANGE = 56
  4. Const ARW_BOTTOMLEFT = 0
  5. Const ARW_BOTTOMRIGHT = 1
  6. Const ARW_DOWN = 4
  7. Const ARW_HIDE = 8
  8. Const ARW_LEFT = 0
  9. Const ARW_RIGHT = 4
  10. Const ARW_STARTRIGHT = 1
  11. Const ARW_STARTTOP = 2
  12. Const ARW_TOPLEFT = 2
  13. Const ARW_TOPRIGHT = 3
  14. Const ARW_UP = 0
  15. Const SM_CLEANBOOT = 67
  16. Const SM_CMETRICS = 44
  17. Const SM_CMOUSEBUTTONS = 43
  18. Const SM_CXBORDER = 5
  19. Const SM_CXCURSOR = 13
  20. Const SM_CXDLGFRAME = 7
  21. Const SM_CXDOUBLECLK = 36
  22. Const SM_CXDRAG = 68
  23. Const SM_CXEDGE = 45
  24. Const SM_CXFRAME = 32
  25. Const SM_CXFULLSCREEN = 16
  26. Const SM_CXHSCROLL = 21
  27. Const SM_CXHTHUMB = 10
  28. Const SM_CXICON = 11
  29. Const SM_CXICONSPACING = 38
  30. Const SM_CXMAXIMIZED = 61
  31. Const SM_CXMAXTRACK = 59
  32. Const SM_CXMENUCHECK = 71
  33. Const SM_CXMENUSIZE = 54
  34. Const SM_CXMIN = 28
  35. Const SM_CXMINIMIZED = 57
  36. Const SM_CXMINSPACING = 47
  37. Const SM_CXMINTRACK = 34
  38. Const SM_CXSCREEN = 0
  39. Const SM_CXSIZE = 30
  40. Const SM_CXSIZEFRAME = 32
  41. Const SM_CXSMICON = 49
  42. Const SM_CXSMSIZE = 52
  43. Const SM_CXVIRTUALSCREEN = 78
  44. Const SM_CXVSCROLL = 2
  45. Const SM_CYBORDER = 6
  46. Const SM_CYCAPTION = 4
  47. Const SM_CYCURSOR = 14
  48. Const SM_CYDLGFRAME = 8
  49. Const SM_CYDOUBLECLK = 37
  50. Const SM_CYDRAG = 69
  51. Const SM_CYEDGE = 46
  52. Const SM_CYFRAME = 33
  53. Const SM_CYFULLSCREEN = 17
  54. Const SM_CYHSCROLL = 3
  55. Const SM_CYICON = 12
  56. Const SM_CYICONSPACING = 39
  57. Const SM_CYKANJIWINDOW = 18
  58. Const SM_CYMAXIMIZED = 62
  59. Const SM_CYMAXTRACK = 60
  60. Const SM_CYMENU = 15
  61. Const SM_CYMENUCHECK = 72
  62. Const SM_CYMENUSIZE = 55
  63. Const SM_CYMIN = 29
  64. Const SM_CYMINIMIZED = 58
  65. Const SM_CYMINSPACING = 48
  66. Const SM_CYMINTRACK = 35
  67. Const SM_CYSCREEN = 1
  68. Const SM_CYSIZE = 31
  69. Const SM_CYSIZEFRAME = 33
  70. Const SM_CYSMCAPTION = 51
  71. Const SM_CYSMICON = 50
  72. Const SM_CYSMSIZE = 53
  73. Const SM_CYVIRTUALSCREEN = 79
  74. Const SM_CYVSCROLL = 20
  75. Const SM_CYVTHUMB = 9
  76. Const SM_DBCSENABLED = 42
  77. Const SM_DEBUG = 22
  78. Const SM_MENUDROPALIGNMENT = 40
  79. Const SM_MIDEASTENABLED = 74
  80. Const SM_NETWORK = 63
  81. Const SM_PENWINDOWS = 41
  82. Const SM_MOUSEPRESENT = 19
  83. Const SM_SECURE = 44
  84. Const SM_SHOWSOUNDS = 70
  85. Const SM_SLOWMACHINE = 73
  86. Const SM_SWAPBUTTON = 23
  87. Const SM_XVIRTUALSCREEN = 76
  88. Const SM_YVIRTUALSCREEN = 77
  89.  
  90. Public Function GetMonitorCount() As Integer
  91.     Dim alle As Integer
  92.     Dim einz As Integer
  93.     Dim result As Integer
  94.     Dim width1 As Integer
  95.     Dim width2 As Integer
  96.      alle = GetSystemMetrics(SM_CMONITORS)
  97.      einz = GetSystemMetrics(SM_CXSCREEN)
  98.      
  99.      width1 = einz
  100.      width2 = alle - einz
  101.      
  102.      If (alle - einz) > 0 Then
  103.         result = 1
  104.     Else
  105.         result = 0
  106.     End If
  107.     GetMonitorCount = result
  108. End Function

Ответить

Номер ответа: 5
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #5 Добавлено: 17.03.09 18:43
Развернулся неподецки )
В инэте нашел? Или все сам?

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 17.03.09 19:05
GetMonitorCount = result

забавно однако получается.. судя по коду.. у тебя можеть быть либо 1 монитор, либо 0 .. других вариантов не предусматривается..
т.е. чтобы это узнать надо было писать такую партянку кода и вызывать api? Чем писать такую эээ... ммм... "функцию" сделай просто заглушку которая всегда будет возвращать 1 монитор, и в 99,9% случаев она будет давать верный результат, а остальное спишешь на несовместимость оборудования или отсутствие у юзера админских прав.
Так же очень интересует для какой цели задействованы width1,width2 еслил они, опять таки судя по коду, там вообще нигде не используются.. в чем их магическое предназначение? просто что бы было? так сказать для солидности?

Ответить

Номер ответа: 7
Автор ответа:
 KreAtoR



Вопросов: 120
Ответов: 438
 Профиль | | #7 Добавлено: 17.03.09 19:10
@EROS

1 возращается если мониторов больше чем один. мне собственно не важно сколько их, поэтому и поставил 0 и 1.

с width1 width2 я смотрел работает ли эта система вообще, как оказалось НЕТ.

даже ели стоят два монитора то функция все равно ничего толкового сделать не может.

короче сижу вот гадаю, пытаюсь в небо пальцем ткнуть

Ответить

Номер ответа: 8
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #8
Добавлено: 17.03.09 19:48
KreAtoR, странно, неужели ты логику не просек. Для получения количества мониторов тебе видимо надо только SM_CMONITORS. В одну строчку (+объявление), вместо имени константы - значение:
  1. Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
  2. MsgBox "Число мониторов в системе " & GetSystemMetrics(80)

Ответить

Номер ответа: 9
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #9
Добавлено: 17.03.09 19:51
P.S., кстати, у меня дома всегда показывает 2. :P

Ответить

Номер ответа: 10
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #10 Добавлено: 17.03.09 19:54
Два по сколько? )

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 17.03.09 20:01
KreAtoR пишет:
1 возращается если мониторов больше чем один. мне собственно не важно сколько их, поэтому и поставил 0 и 1.

ну тогда,наверное, было бы назвать функцию несколько иначе.. ты не находишь? Ну чтобы не вводить людей в заблуждение..

Ответить

Номер ответа: 12
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #12 Добавлено: 17.03.09 20:22
mc-black пишет:
P.S., кстати, у меня дома всегда показывает 2. :P

Тут фишка в том, что есть такое понятие как virtual screen, который прдставляет собой,сумму прямоугольников всех представленных в системе включая primary monitor. В твоем случае основной монитор будет занимать всю площать виртуального.
В случае если в системе 2 и более физических монитора, то их надо будет получать через EnumDisplayMonitors, а через GetMonitorInfo уже вытаскивать инфу о каждом из них.. разрешение глубина цвета и самое главное структуру RECT, которая показывает реальные координаты мониторов, чтобы ты мог отправить свое окно на тот или иной монитор.

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 17.03.09 20:29
К слову сказать в системе могут присутствовать так называемы псевдо-мониторы, яркий пример тому NetMeeting .. он как раз и создает такой монитор.

Ответить

Номер ответа: 14
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #14
Добавлено: 17.03.09 22:41
KreAtoR пишет:
1 возращается если мониторов больше чем один. мне собственно не важно сколько их, поэтому и поставил 0 и 1.


Муть там, а не функция. Посмотрите внимательней, что от чего вычитается (количество мониторов в системе минус разрешение активного монитора по горизонтали). Чужие исходники не всегда надо брать и втыкать буквально так же.

EROS, у меня два физических монитора. Т.е. конечно второй не монитор, а телевизор, но все же два физических устройства ;) Я так понимаю, ты хоте сказать, что GetSystemMetrics возвращает число Display Objects?

P.S. EROS, так значит ты тоже из Нижнего Новгорода?

Ответить

Номер ответа: 15
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 17.03.09 22:48
mc-black пишет:
EROS, так значит ты тоже из Нижнего Новгорода?

O_O Что значит тоже?????????? Насколько я знаю тут из Нижнего больше никого нету!

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам