Переключающиеся экраны на службе у Х-парней

Xakep, номер #039, стр. 039-071-3


Напоследок хочу предупредить, что прога невидима в Win9x. В Win2000/ХР ее можно увидеть диспетчере задач только на закладке "Процессы".

Вот таким способом реализовано большинство прог, переключающих экраны. Дополнительную инфу, как всегда, можно найти на моем сайте www.cydsoft.com/vr-online. Там же после выхода этого номера журнала будут лежать исходники моего брутфорса. Так что если возникнут проблемы, то качай их.

P.S. У меня к тебе просьба на сто баксов :). Не пиши мне большие письма. После появления рубрики кодинг меня каждый день валят вопросами. Я не в состоянии всем рассказывать то, о чем пишут книги. Я могу что-то подсказать, где-то помочь, но не больше. А просьбы типа помоги написать прогу вообще нереальны. Я отвечаю только на те вопросы, где ответ займет несколько строчек. Целые лекции по мылу я разводить не могу. Я бы с удовольствием помог всем, но это НЕВОЗМОЖНО. Вас слишком много, а я один :(((. Поэтому лучше разбей свой вопрос на несколько маленьких и спрашивай постепенно, а не все сразу.

ЛИСТИНГ

var

i, j:Integer;

h:THandle;

WindowsList : TList; //Здесь будет храниться список видимых окон

WRct: TRect;

MWStruct: HDWP;

W :THandle;

begin

WindowsList:=TList.Create; //Создаю список видимых окон

while (true) do

begin

//Запускаю цикл сдвига окон

for i:=0 downto -Screen.Width do

begin

WindowsList.Clear; // Очищаю список

W:=GetWindow(GetDesktopWindow,GW_CHILD);

while W<>0 Do //Запускаю поиск всех видимых окно

begin

//Если окно видимо, то добавить его в список

if IsWindowVisible(W) then WindowsList.Add(Pointer(W));

W:=GetWindow(W,GW_HWNDNEXT);//Искать следующее окно

end;

MWStruct:=BeginDeferWindowPos(WindowsList.Count-1);//Начинаю сдвиг

if Pointer(MWStruct)<>nil then

begin

for j:=0 to WindowsList.Count-1 do//запускаю цикл по всем окнам

begin

GetWindowRect(THandle(WindowsList[j]),WRct);

MWStruct:=DeferWindowPos(MWStruct, THandle(WindowsList[j]), HWND_BOTTOM,

WRct.Left+i, WRct.Top, WRct.Right-WRct.Left,

WRct.Bottom-WRct.Top, SWP_NOACTIVATE or SWP_NOZORDER);

end;

EndDeferWindowPos(MWStruct);//Конец сдвига

end;

end;

//Делаю задержку в 10 с.

h:=CreateEvent(nil, true, false, '');

WaitForSingleObject(h, 10000);

CloseHandle(h);

end;

end.

Назад на стр. 039-071-2  Содержание