Автор: Robby
Дата сообщения: 16.05.2012 09:37
KerberX возможно так
Код: local time=os.clock ();
local tDisplay=WinApi.EnumDisplaySettings(); -- получаем все возможные установки монитора
Table.Sort(tDisplay, nil); -- сортируем массив
sWidthHeight=string.gsub (Table.Remove(tDisplay, 1), "(%d+|%d+)(.*)", "%1"); -- получаем из первого элемента массива значения Width и Height
tWidthHeight={}; -- создаем новый массив который будет содержать разрешение экрана
tWidthHeight[1]={Width = String.Mid(sWidthHeight, 1, String.Find(sWidthHeight, "|", 1)-1) , Height = String.Mid(sWidthHeight, String.Find(sWidthHeight, "|", 1)+1, -1)}; -- заносим в него первое значение
local ind=1; -- счетчик элементов массива
Debug.ShowWindow(true); -- включаем окно отладки
for i, value in pairs(tDisplay) do -- перебираем элементы всех возможных установок монитора
sWidthHeight=string.gsub (value, "(%d+|%d+)(.*)", "%1"); -- получаем только значения Width и Height
-- заносим каждое значение в свою переменную
local sWidth=String.Mid(sWidthHeight, 1, String.Find(sWidthHeight, "|", 1)-1); -- Width
local sHeight=String.Mid(sWidthHeight, String.Find(sWidthHeight, "|", 1)+1, -1); -- Height
-- сравниваем значение массива разрешений монитора с значениями Width и Height
if tWidthHeight[ind].Width~=sWidth and tWidthHeight[ind].Height~=sHeight then -- если не совпадают
ind=ind+1; -- увеличиваем счетчик элемнтов массива
tWidthHeight[ind]={Width=sWidth, Height=sHeight}; -- записываем новое значение
end
end
-- проверка результата
for i, value in pairs(tWidthHeight) do
Debug.Print("Width="..value.Width.."\tHeight= "..value.Height.."\r\n");
end
Debug.Print("------------\r\nВыполнено за: "..os.clock ()-time.." секунд\r\n");