Страницы: 1
RSS
WinAPI GetSystemMetrics for 64x bit Office
 
Всем привет,
Помогите, пожалуйста, допилить WinAPI функцию GetSystemMetrics для 64х битного офиса.
Думал, что код универсальный, но на 64х Win 7 и 64x Office 2010 - выбивает ошибку когда обращаюсь к Property Get.
Заранее благодарен!

Код
#If Win64 Then
    #If VBA7 Then
        Private Declare PtrSafe Function GetSystemMetrics Lib "user32" ( _
                ByVal nIndex As LongLong) As LongLong
    #Else
        Private Declare Function GetSystemMetrics Lib "user32" ( _
                                                  ByVal nIndex As LongLong) As LongLong
    #End If
#Else
    #If VBA7 Then
        Private Declare PtrSafe Function GetSystemMetrics Lib "user32" ( _
                ByVal nIndex As Long) As Long
    #Else
        Private Declare Function GetSystemMetrics Lib "user32" ( _
                                                  ByVal nIndex As Long) As Long
    #End If
#End If
Private Const SM_CYSCREEN As Long = 1
Private Const SM_CXSCREEN As Long = 0

Public Property Get ScreenHeight() As Long
    ScreenHeight = GetSystemMetrics(SM_CYSCREEN)
End Property

Public Property Get ScreenWidth() As Long
    ScreenWidth = GetSystemMetrics(SM_CXSCREEN)
End Property
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Скачайте Office 2010 Help Files: Win32API_PtrSafe with 64-bit Support, думаю поможет. Там, правда, не все.
Если не секрет, для чего? Успехов!
 
Спасибо за ссылку, но судя из файла UsingWin32API_PtrSafe - код написан правильно и должен работать в х64 Офисе, странно почему тогда не работает...
Цитата
Если не секрет, для чего?
Какой же тут может быть секрет :) Необходимая функция не работает на одном из ноутов
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
А не может быть из-за того, что надо передавать в функцию переменные того типа, который она принимает?
Код
Private Const SM_CYSCREEN As Long = 1
Private Const SM_CXSCREEN As Long = 0


Здесь Long, но для VBA7 нужна LongLong. В некоторых случаях критично. Не пробовали не через переменные передавать, а просто числа(хотя бы для теста):
Код
Public Property Get ScreenHeight() As Long
    ScreenHeight = GetSystemMetrics(1)
End Property

Public Property Get ScreenWidth() As Long
    ScreenWidth = GetSystemMetrics(0)
End Property

Будет ругаться.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, действительно, как то упустил этот момент
Всего лишь подправил типы переменных и заработало
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
Страницы: 1
Наверх