Вверх ↑
Этот топик читают: Гость
Ответов: 5227
Рейтинг: 586
#1: 2016-10-10 20:28:32 ЛС | профиль | цитата
Скорей не ошибка но недочёт.

Выяснилось что при классическом стиле (Aero отключена) если окно перекрыто другим окном или выходит за пределы экрана то компонент лагает. А функция PrintWindow работает нормально.

При выключенном Aero PrintWindow даже рабочий стол который перекрыт другими окнами, при включенном чёрный квадрат Малевича.

Короче есть над чем подумать, смотрите пример.
Add(MainForm,2953706,203,42)
{
Width=609
Height=430
}
Add(ChildForm,13789484,553,133)
{
}
BEGIN_SDK
Add(EditMulti,8916653,21,21)
{
WorkCount=1
link(doWork1,1836660:doEvent1,[(42,27)(42,76)])
}
Add(MainForm,7545100,203,133)
{
Left=35
Top=105
Width=547
Height=316
Color=0
Visible=1
Caption="Снимок окна"
Point(doVisible)
}
Add(Image,12620809,203,70)
{
Width=529
Height=271
Align=5
Color=0
}
Add(DoData,14735024,140,161)
{
Data=Integer(1)
link(onEventData,7545100:doVisible,[])
}
Add(Hub,1836660,63,70)
{
link(onEvent1,12620809:doLoad,[])
link(onEvent2,14735024:doData,[(115,83)(115,167)])
}
END_SDK
Add(Button,2137262,203,133)
{
Left=430
Top=275
Width=140
Height=35
Caption="Hi_Scr"
link(onClick,3742934:doCapture,[])
}
Add(ScreenShort,3742934,280,133)
{
link(onCapture,10881825:doWork2,[])
link(Handle,2110694:Var2,[])
}
Add(ChildPanel,10689147,280,42)
{
}
BEGIN_SDK
Add(EditMulti,7314386,21,21)
{
VarCount=1
link(Var1,14605760:Handle,[(27,158)(118,158)])
}
Add(Panel,14605760,112,63)
{
Left=35
Top=35
Width=470
Height=230
Color=6086626
Ctl3D=0
WinStyle=4
Point(Handle)
}
END_SDK
Add(InlineCode,8765314,371,252)
{
WorkPoints=#5:doScr|
EventPoints=#5:onScr|
DataPoints=#7:in_hwnd|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|4: |13: h: HWND; |9: public|24: in_hwnd: THI_Event;|22: onScr: THI_Event;|47: procedure doScr(var dt: TData; idx: word);|0:|5: end;|1: |95: function PrintWindow(HWND:HWND;hdcBlt:HDC;nFlags:DWORD):BOOL; stdcall; external 'user32.dll';|2: |14:implementation|0:|28:procedure THiAsmClass.doScr;|3:var|15: rcSrc: Trect;|16: hSrcWnd: HWND;|12: hDC1: HDC;|14: hSrcDC: HDC;|17: hBmp: HBITMAP ;|16: tBmp: PBitmap;|5:begin|2: |37: hSrcWnd := ToIntegerEvent(in_hwnd);|32: GetWindowRect(hSrcWnd, rcSrc);|65: tbmp:=NewBitmap(rcSrc.Right-rcSrc.Left,rcSrc.Bottom-rcSrc.Top);|2: |24: hDC1:= GetDC(hSrcWnd);|37: hSrcDC:=CreateCompatibleDC(hDC1); |91: hBmp := CreateCompatibleBitmap(hDC1, rcSrc.right - rcSrc.left, rcSrc.bottom - rcSrc.top);|2: |29: SelectObject(hSrcDC, hBmp);|37: PrintWindow(hSrcWnd, hSrcDC, 0); |12: BitBlt( |9: hDC1,|9: 0, |6: 0,|29: rcSrc.right - rcSrc.left,|32: rcSrc.bottom - rcSrc.top, |15: hSrcDC, |9: 0, |9: 0, |13: SRCCOPY);|5: |22: tbmp.Handle := hbmp;|2: |28: _hi_onEvent(onScr, tbmp); |4: |21: DeleteObject(hBmp);|19: DeleteDC(hSrcDC);|27: ReleaseDC(hSrcWnd, hDC1);|12: tbmp.Free;|2: |37: InvalidateRect(hSrcWnd,nil,true); |5: |4:end;|0:|4:end.|
link(onScr,10881825:doWork3,[(431,258)])
link(in_hwnd,2110694:Var3,[(377,103)])
}
Add(Button,15495593,203,252)
{
Left=430
Top=335
Width=140
Height=35
Caption="PrintWindow"
link(onClick,8765314:doScr,[])
}
Add(HubEx,10881825,427,133)
{
link(onEvent,13789484:doWork1,[])
}
Add(Edit,5578921,336,42)
{
Left=275
Top=280
Width=115
}
Add(InlineCode,11535099,427,42)
{
VarPoints=#8:LVHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Windows,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|51: procedure LVHandle(var dt: TData; idx: word); |5: end;|0:|14:implementation|0:|3:var|10: h: HWND;|0:|43:function GetDesktopListViewHandle: THandle;|3:var|12: S: string;|5:begin|39: Result := FindWindow('ProgMan', nil);|40: Result := GetWindow(Result, GW_CHILD);|40: Result := GetWindow(Result, GW_CHILD);|19: SetLength(S, 40);|37: GetClassName(Result, PChar(S), 39);|37: if PChar(S) <> 'SysListView32' then|16: Result := 0;|4:end;|0:|31:procedure THiAsmClass.LVHandle;|5:begin|19: dtInteger(dt, h);|4:end;|0:|15:initialization |32: h := GetDesktopListViewHandle;|37: //h := FindWindow('ProgMan', nil);;|0:|4:end.|
}
Add(GetDataEx,2110694,280,98)
{
link(Data,10689147:Var1,[])
}
Add(InfoTip,16479794,406,35)
{
Info=#25:Handle рабочего стола |
VAlign=1
HAlign=2
Width=190
Height=53
}
Add(InfoTip,13913073,343,210)
{
Info=#30:Использует функцию PrintWindow|39:Надеюсь Win98 не у кого уже не стоит :)|
HAlign=2
Width=316
Height=81
}


Редактировалось 3 раз(а), последний 2016-10-10 20:31:27
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 26061
Рейтинг: 2120
#2: 2016-10-10 22:24:32 ЛС | профиль | цитата
Посмотрел. Ужаснулся индусскому коду. Нашел его источник -- http://www.programmersforum.ru/showthread.php?t=14666
Млин, а почему нельзя сделать вот так (у меня работает):

IC


Add(InlineCode,8765314,301,371)
{
WorkPoints=#5:doScr|
EventPoints=#5:onScr|
DataPoints=#7:in_hwnd|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|32:uses Windows, kol, Share, Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|24: in_hwnd: THI_Event;|22: onScr: THI_Event;|47: procedure doScr(var dt: TData; idx: word);|5: end;|1: |95: function PrintWindow(HWND:HWND;hdcBlt:HDC;nFlags:DWORD):BOOL; stdcall; external 'user32.dll';|2: |14:implementation|0:|28:procedure THiAsmClass.doScr;|3:var|15: rcSrc: TRect;|16: hSrcWnd: HWND;|16: tBmp: PBitmap;|5:begin|37: hSrcWnd := ToIntegerEvent(in_hwnd);|32: GetWindowRect(hSrcWnd, rcSrc);|72: tbmp := NewBitmap(rcSrc.Right - rcSrc.Left, rcSrc.Bottom - rcSrc.Top);|49: PrintWindow(hSrcWnd, tbmp.Canvas.Handle, 0); |28: _hi_onEvent(onScr, tbmp); |12: tbmp.Free;|4:end;|0:|4:end.|
}

[/scroll]
карма: 22

1
Голосовали:andrestudio
Ответов: 5227
Рейтинг: 586
#3: 2016-10-11 07:12:43 ЛС | профиль | цитата
nesco, респект. Я тоже подозревал что что то не то намучено
Ну пока это моей проблемы не решило, мне нужно перехватывать оверлеи собственного процесса (окно с видео)
Попробовал через DirectX так-же (т.е копирует экран или область экрана перекрытую другими окнами но не окно) пока х.з чё делать
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
3
Сообщение
...
Прикрепленные файлы
(файлы не залиты)