![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите дописать
Вот значит так: Если кликнули мышью по определенному приложению (например в аське, имя окна у нее ICQ) то выполняем етот код Код:
x:=Mouse.CursorPos.X;
y:=Mouse.CursorPos.Y;
ScreenShot(x-100,y-100,201,201, Image1.Picture.Bitmap);
image1.Picture.SaveToFile('C:\Sc\s'+inttostr(r));
r:=r+1; |
|
#2
|
||||
|
||||
|
Два способа. Либо развернуть форму на весь экран и сделать прозрачного цвета, и отловить нажатие (грубо и некрасиво), либо написать хук, и ловить сообщение WM_LBUTTONDOWN
|
|
#3
|
|||
|
|||
|
помогите этот хук написать , ваще непонимаю в хуках
|
|
#4
|
||||
|
||||
|
По-моему код хука уже 3й раз на этом форуме выкладываю.
Код:
library MouseHook;
uses Windows, Messages;
type msgStruct=record
pt:TPOINT;
mouseData:DWORD;
flags:DWORD;
time:DWORD;
dwExtraInfo:ULONG_PTR;
end;
Pstruct=^msgStruct;
var
HookHandle: hHook = 0;
wnd:Hwnd = 0;
Check:boolean = false;
hMWindow:hwnd = 0;
function MouseProc(Code: integer; wParam: longint; lParam: Pstruct): longint; stdcall;
var point:TPoint;
fl:boolean;
begin
fl:=false;
if Check then begin
if code=HC_ACTION then
if wparam=WM_LBUTTONDOWN then
begin
check:=false;
fl:=true;
point:=lparam^.pt;
wnd:=WindowFromPoint(point);
end;
end;
if fl then result:=1
else result:=CallNextHookEx(0, Code, wParam, longword(lParam));
end;
// установка, отключение ловушки
procedure RunStopHook(lRun:byte; hMainWindow:hwnd); export; stdcall;
begin
if lRun=0 then begin
hMWindow:=hMainWindow;
HookHandle:=SetWindowsHookEx(WH_MOUSE_LL, @MouseProc, hInstance, 0);
end
else if lrun=1 then
begin
UnhookWindowsHookEx(HookHandle);
HookHandle:=0;
end
else if lrun=2 then
check:=boolean(1-byte(check));
end;
function Return(State:boolean):hWnd; export; stdcall;
begin
if state then begin //что делаем, поиск окна или инициализацию
if not check then begin //если уже был клик
if wnd<>0 then
result:=wnd
else result:=$FFFFFFFF; //ошибка
end
else result:=$0; //не было клика
end
else //инициализация
wnd:=0;
end;
exports RunStopHook index 1;
exports Return Index 2;
begin
end.Код:
//при создании формы
RunStopHook(0, handle);
...
//при закрытии формы
RunStopHook(1, handle);
...
// когда надо найти окно, на которое кликнет юзер
Return(false); // обнулим переменную окна
RunStopHook(2, handle); // сигнал, что надо поймать следующий клик
H := 0;
while H = 0 do
begin
application.ProcessMessages;
H := Return(true);
end;
...З.Ы. если ткнули на кнопку - соответсвенно хэндл кнопки. Последний раз редактировалось Bargest, 18.01.2011 в 13:28. |
|
#5
|
|||
|
|||
|
щас попробую
|
|
#6
|
|||
|
|||
|
кто может вот етот хук со скриншотом сделать
вот по клику на мышку в определенном окне (ICQ) делается скриншот вот функция Код:
var
r: integer; //это у нас будет счетчик имени файла
//даллее идет процедурка для создания скрин шотов, нашел где в инете
procedure ScreenShot(x: Integer;
y: Integer;
Width: Integer;
Height: Integer;
bm: TBitMap);
var
dc: HDC;
lpPal: PLOGPALETTE;
begin
if ((Width = 0) or
(Height = 0)) then
Exit;
bm.Width := Width;
bm.Height := Height;
{get the screen dc}
dc := GetDc(0);
if (dc = 0) then
Exit;
{do we have a palette device?}
if (GetDeviceCaps(dc, RASTERCAPS) and
RC_PALETTE = RC_PALETTE) then
begin
{allocate memory for a logical palette}
GetMem(lpPal,
SizeOf(TLOGPALETTE) +
(255 * SizeOf(TPALETTEENTRY)));
{zero it out to be neat}
FillChar(lpPal^,
SizeOf(TLOGPALETTE) +
(255 * SizeOf(TPALETTEENTRY)),
#0);
{fill in the palette version}
lpPal^.palVersion := $300;
{grab the system palette entries}
lpPal^.palNumEntries :=
GetSystemPaletteEntries(dc,
0,
256,
lpPal^.palPalEntry);
if (lpPal^.PalNumEntries <> 0) then
{create the palette}
bm.Palette := CreatePalette(lpPal^);
FreeMem(lpPal, SizeOf(TLOGPALETTE) +
(255 * SizeOf(TPALETTEENTRY)));
end;
{copy from the screen to the bitmap}
BitBlt(bm.Canvas.Handle,
0,
0,
Width,
Height,
Dc,
x,
y,
SRCCOPY);
{release the screen dc}
ReleaseDc(0, dc);
end;Код:
procedure TForm1.Button1Click(Sender: TObject); //клик по кнопке var x,y: integer; //координаты курсора begin x:=Mouse.CursorPos.X; //соотвествено х y:=Mouse.CursorPos.Y; //и собственно игрек //GetCursorPos(pt); ScreenShot(x-50,y-50,100,100, Image1.Picture.Bitmap); //делаем скрин шот нужного размера в нужном месте image1.Picture.SaveToFile(inttostr(r)+'.bmp'); //сохраняем в файл скрин r:=r+1; //добавляем единичку чтобы следующий скрин сохранился под другим именем end; |
|
#7
|
|||
|
|||
|
Кто сможет за ето взяться?? сколько будет стоить?
|
|
#8
|
||||
|
||||
|
Ну если ты твёрдо решил встать на путь мецената, то тебе в раздел "работа"
![]() |
|
#9
|
|||
|
|||
|
Цитата:
мне это просто надо успеть до 24 |