КАПУСТА: почитай,обсуди,отдохни!

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » КАПУСТА: почитай,обсуди,отдохни! » WinApi » Программы-приколы.


Программы-приколы.

Сообщений 1 страница 4 из 4

1

Я расскажу как подшутить над своим боссом, как заставить мышь летать по экрану и тыкать куда попало, научу как устроить полный кавардак на рабочем столе.
Читайте, если не хотите пропустить веселье!
Самый простой прико! Комп не выключается.

Код:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);  
begin  
    CanClose:=false;  // окно не закрывается  
end;  

procedure TForm1.FormActivate(Sender: TObject);  
begin  
    // прячем от глаз пользователя  
    ShowWindow(Handle, SW_HIDE);    
    ShowWindow(Application.Handle, SW_HIDE);  
end;

Поясняю: при выключении крмпа, винда шлет всем окнам сообщение, что пора закрываться, а наша программа не хочет этого делать и игнорирунт сообщения винды и комп не выключается.
Винда внутри окна!
Просто до нельзя!

Код:
function EnumWindowsProc(h: hwnd; lparam: Integer): BOOL; stdcall;  
begin  
    if IsWindowVisible(h) then  
      SetParent(h, Form1.Handle);  
    Result := true;  
end;  
procedure TForm1.Button1Click(Sender: TObject);  
begin  
    EnumWindows(@EnumWindowsProc, 0);  
end;

Поясняю: функция EnumWindowsProc перебирает все активные и устанавливает для них родительским окном наше окно.
Примечание: Рабочий стол, кнопка пуск, мышь... - это тоже окна!

Кавардак на Рабочем столе!
Окна, то будут сворачиваться, то разворачиваться, все будет мельтешить...

Код:
function EnumWindowsProc(h: hwnd; lparam: Integer): BOOL; stdcall;  
begin  
    if IsWindowVisible(h) then  
      if random(10) = 4 then  
        SetForegroundWindow(h)  
      else  
        if random(10) = 4 then  
          ShowWindow(h, SW_MINIMIZE)  
        else  
          if random(10) = 4 then  
            ShowWindow(h, SW_MAXIMIZE);  
    Result := true;  
end;  

procedure TForm1.Button1Click(Sender: TObject);  
begin  
    repeat  
      EnumWindows(@EnumWindowsProc, 0);  
    until 2=3;  
end;

Поясняю: функция EnumWindowsProc перебирает все активные и посылает случайным образом сообщения окнам.
Тыкнуть мышью, куда захочу!

Код:
var  
    pPoint: TPoint;  
    hPointWnd: HWnd;  
begin  
    pPoint.X := 15;  
    pPoint.Y := Screen.Height-20;  
    SetCursorPos(pPoint.X, pPoint.Y);  
    hPointWnd := WindowFromPoint(pPoint);  
    SendMessage(hPointWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(1, 1));  
    SendMessage(hPointWnd, WM_LBUTTONUP, 0, MAKELONG(0, 0));  
end;

Совет: вставьте этот код в таймер с интервалом 1! Прикольно получится.
Блокируем запуск наскольких копий вашей программы!

Код:
procedure TForm1.FormCreate(Sender: TObject);  
var  
    wnd : hwnd;  
    buff : array[0.. 127] of char;  
begin  
    wnd := getwindow(handle, gw_hwndfirst);  
    while wnd <> 0 do  
    begin  
      if (wnd <> application.handle) and (getwindow(wnd, gw_owner) = 0)then  
      begin  
        getwindowtext (wnd, buff, sizeof (buff ));  
        if strpas (buff) = application.title then  
        begin  
          messagedlg('Приложение уже запущено!', mtwarning, [mbok], 0);  
          halt;  
        end;  
       end;  
      wnd := getwindow (wnd, gw_hwndnext);  
    end;  
end;

+1

2

На счёт первого, это легко отключить, "Диспетчер задач", гораздо прикольней когда процесс скрыт. Я сам делал прогу-"приколюшку", ну как сказать приколюшки, с элементами вируса: заражение, пропись в реестр, фиг удалишь... дак там интересней приколы: "бешенная мышь", "потухший экран", "уставшая мышь", "активный пуск"...

На счёт последнего: там нужно чтобы заголовок был всегда один и тот же, а это не для всех, у меня к примеру программа меняет заголовок окна, и титл приложения, соответственно это не подойдёт.
Я вышел из этой ситуации так: При отключении программы записывал в ini файл то что приложение не запущено, а при запуске проги считывал значение из того же ini файла, если приложение не запущено, то прописывать в ini файл, что приложение запущено, записывать его handle, если же приложение запущено, то посылать его handl'у (SendMessage) что нужно и вырубать эту версию программы.
Способ плох тем что если приложение выключится экстренно (убьют процесс, или выключат электричество), то программа будет считать что она была запущена, а на самом деле нет, приходится вручную записывать в ini файл, что прога не запущена.

0

3

Монитор засыпанный надписями

Код:
program Project1;
uses
  Windows;
var
  ds: HDC;
  i: integer=0;
begin
  ds:=GetDC(0);
  repeat
    inc(i);
    TextOut(ds,random(GetSystemMetrics(0)),random(GetSystemMetrics(1)),'Привет!',7);
  until i=1000;
  ds:=0;
end.

+1

4

Хорошо бы тот код поставить на нажатие кнопки, пусть будет первой, а вот этот:

Код:
InvalidateRect(0,nil,true);

... на нажатие второй, а то потом рабочий стол диспетчером задач не очень удобно чистить.
Да, и неплохо бы ещё задержку поставить.

0


Вы здесь » КАПУСТА: почитай,обсуди,отдохни! » WinApi » Программы-приколы.