|

Переключающиеся экраны на службе у Х-парней
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 Содержание
|