Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
3-1179312724
MZ
2007-05-16 14:52
2007.09.16
Импорт из *.dbf в FireBird


3-1179292836
Цукор5
2007-05-16 09:20
2007.09.16
DBF потоках + "упаковка"


1-1183989165
Inna_Z
2007-07-09 17:52
2007.09.16
Пропадают точки в письмах :-)


15-1187378684
Kostafey
2007-08-17 23:24
2007.09.16
Про запуск cmd


15-1187347939
Vrangel
2007-08-17 14:52
2007.09.16
Решение простой задачи?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский