Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.16;
Скачать: CL | DM;

Вниз

Как можно поместить свою надпись поверх чужого окна ?   Найти похожие ветки 

 
dreamse   (2006-11-26 19:04) [0]

Например игры. Но так чтобы на каждую секунду её отрисовывать, так как фон игры перерисовываеться и надпись стираеться. Думаю копать нужно в сторону DirectX

Кто сталокивался с подобным вопросом ?


 
Eraser ©   (2006-11-26 19:06) [1]

> [0] dreamse   (26.11.06 19:04)

чтобы не перерисовывать - никак.


 
Ma[X]iM ©   (2007-03-24 17:44) [2]

Переместить контрол со своего окна на чужое :)
Следующий код создаёт в "Пауке" небольшую панельку

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, Buttons,ShellAPI, ExtCtrls;

type
 TFHack = class(TForm)
   Panel1: TPanel;
   HelpBull: TSpeedButton;
   NewRowButt: TSpeedButton;
   UndoButt: TSpeedButton;
   xcheck: TTimer;
   procedure FormCreate(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure UndoButtClick(Sender: TObject);
   procedure HelpBullClick(Sender: TObject);
   procedure NewRowButtClick(Sender: TObject);
   procedure xcheckTimer(Sender: TObject);
 private
   { Private declarations }
   Spider:HWND;
   smGame:HMENU;
   function ItemEnabled(id:WPARAM):boolean;
 public
   { Public declarations }
   procedure OnNCHitTest(var msg:TMessage);
               message WM_NCHITTEST;
   procedure OnNCLButtonUp(var msg:TMessage);
               message WM_NCLBUTTONUP;
 end;

var
 FHack: TFHack;
const
 rc :TRect=(left:4;top:4;right:24;bottom:24);
 rc2:TRect=(left:30;top:4;right:50;bottom:24);
implementation

{$R *.dfm}

procedure TFHack.FormCreate(Sender: TObject);
begin
 Spider:=FindWindow("Пасьянс "Паук"",nil);
 if(not IsWindow(Spider)) then begin
   if(WinExec("spider",SW_SHOW)<=31) then exit;
   repeat
     Spider:=FindWindow("Пасьянс "Паук"",nil);
   until(IsWindow(Spider));
 end;
 xcheck.Enabled:=true;
 Caption:="Windows Hacked!";
 SetWindowLong(Handle,GWL_EXSTYLE,
               GetWindowLong(Handle,GWL_EXSTYLE) or WS_EX_TOPMOST);
 Windows.SetParent(Handle,Spider);
 SetWindowLong(Handle,GWL_STYLE,
               (GetWindowLong(Handle,GWL_STYLE) and
               (not WS_POPUP) and (not WS_OVERLAPPED)
               )or WS_CHILD);
 ShowWindowAsync(Application.Handle,SW_HIDE);
 smGame:=GetSubMenu(GetMenu(Spider),0);
end;

procedure TFHack.OnNCHitTest(var msg: TMessage);
 var pt:TPoint;
begin
 pt.X:=msg.LParamLo;
 pt.Y:=msg.LParamHi;
 windows.ScreenToClient(handle,pt);
 if(PtInRect(rc,pt))then begin
   msg.Result:=HTCAPTION;
 end else if(PtInRect(rc2,pt))then begin
   msg.Result:=HTCLOSE;
 end else begin
   msg.Result:=HTCLIENT;
 end;
end;

procedure TFHack.FormPaint(Sender: TObject);
begin
 with Canvas do begin
   pen.Color:=clWhite;
   pen.Width:=3;
   Brush.Style:=bsSolid;
   Brush.Color:=RGB(55,85,117);
   RoundRect(rc.Left ,rc.Top ,rc.Right ,rc.Bottom ,5,5);
   pen.Color  :=RGB(55,85,117);
   Brush.Color:=clWhite;
   RoundRect(rc2.Left,rc2.Top,rc2.Right,rc2.Bottom,5,5);
   Brush.Style:=bsClear;
   Rectangle(ClientRect);
 end;
end;

const
 smUndo  =$00009C4A;
 smHelp  =$00009C4D;
 smNewRow=$00009C47;
 smExit  =SC_CLOSE;//$00009C44;

procedure TFHack.OnNCLButtonUp(var msg: TMessage);
begin
 case msg.WParam of
   HTCLOSE: begin
     SetForegroundWindow(Spider);
     SendMessage(Spider,WM_SYSCOMMAND,smExit,0);
     if(not IsWindow(Spider)) then close;
   end;
 end;
end;

procedure TFHack.UndoButtClick(Sender: TObject);
begin
 SetForegroundWindow(Spider);
 if(ItemEnabled(smUndo)) then
   PostMessage(Spider,WM_COMMAND,smUndo,$00);
end;

procedure TFHack.HelpBullClick(Sender: TObject);
begin
 SetForegroundWindow(Spider);
 if(ItemEnabled(smHelp)) then
   PostMessage(Spider,WM_COMMAND,smHelp,$00);
end;

procedure TFHack.NewRowButtClick(Sender: TObject);
begin
 SetForegroundWindow(Spider);
 if(ItemEnabled(smNewRow)) then
   PostMessage(Spider,WM_COMMAND,smNewRow,$00);
end;

function TFHack.ItemEnabled(id: WPARAM): boolean;
 var
   mii:TMenuItemInfo;
begin
 result:=false;
 ZeroMemory(@mii,sizeof(TMenuItemInfo));
 mii.cbSize:= sizeof(TMenuItemInfo);
 mii.fMask:=MIIM_STATE;
 if(GetMenuItemInfo(smGame,id,false,mii))then begin
   result:=(mii.fState and MFS_DISABLED)=0;
 end;
end;

procedure TFHack.xcheckTimer(Sender: TObject);
begin
 if(not IsWindow(Spider))then begin
   xcheck.Enabled:=false;
   Self.Close;
 end;
end;

end.



 
homm ©   (2007-03-24 22:14) [3]

> Как можно поместить свою надпись поверх чужого окна ?


способ 1
> Например игры.
Через DirectX (искать как fraps работает)

способ 2
Сделать окно поверх. Если надо с прозрачным фоном см. SetLayeredWindowAttributes

способ 3
Нарисовать фломастером на мониторе.


 
Eraser ©   (2007-03-25 12:16) [4]

> [3] homm ©   (24.03.07 22:14)

первые 2 варианта не всегда будут работать, 3 не всем подойдет )


 
patrushevd ©   (2007-03-25 13:12) [5]

uses
 graphics, windows;
...
var
 c: tcanvas;
...
c:=           tcanvas.create;
c.handle:= getdc(Хендл_Вражеского_Окна)
while 1 = 1 do
 begin
   c.textout(x, y, "TEXXXXT");
   sleep(100)
 end;



Страницы: 1 вся ветка

Текущий архив: 2007.09.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
15-1187600182
@!!ex
2007-08-20 12:56
2007.09.16
ИНтересно, мне будет втык...


2-1187604813
Bast
2007-08-20 14:13
2007.09.16
Окно


2-1187987876
TPel
2007-08-25 00:37
2007.09.16
Антивирусник учебный


15-1187333215
самовар
2007-08-17 10:46
2007.09.16
Посоветуйте файловый хостинг


15-1187596793
Sergey Masloff
2007-08-20 11:59
2007.09.16
Задачка. Контекстно-свободная грамматика для римских чисел.