在Delphi中使其他应用程序窗口变得透明

美好的一天

我search了networking的任何方向,如果这是可能的,但无济于事。 我需要编写一个应用程序,使我可以select另一个应用程序,并通过这样做使选定的应用程序半透明和顶部(如鬼影叠加)。

这是所有可能与delphi? 我正在使用Delphi XE和Lazarus。 如果任何人都可以请指出我从哪里开始的大方向,我将非常感激。

提前致谢,

    你可以做到这一点, 但不建议 ,因为这种行为必须由自己的应用程序来处理。 无论如何,如果你坚持,因为你有一个很好的理由这样做 ,在这里我留下的代码来设置窗口的透明度,并使窗口最顶端,只是为了显示如何做。

    透明度

    您必须使用具有WS_EX_LAYERED标志的SetWindowLong函数和具有LWA_ALPHASetLayeredWindowAttributes函数来设置透明度。

     Procedure SethWndTrasparent(hWnd: HWND;Transparent:boolean); var l : Longint; lpRect : TRect; begin if Transparent then begin l := GetWindowLong(hWnd, GWL_EXSTYLE); l := l or WS_EX_LAYERED; SetWindowLong(hWnd, GWL_EXSTYLE, l); SetLayeredWindowAttributes(hWnd, 0, 180, LWA_ALPHA); end else begin l := GetWindowLong(hWnd, GWL_EXSTYLE); l := l xor WS_EX_LAYERED; SetWindowLong(hWnd, GWL_EXSTYLE, l); GetWindowRect(hWnd, lpRect); InvalidateRect(hWnd, lpRect, true); end; end; 

    做一个窗口最重要的

    您必须使用传递HWND_TOPMOST值的SetWindowPos函数,该值将窗口放置在所有非最上层的窗口之上。 窗口保持最高位置,即使停用。

     Procedure SethWndOnTop(hWnd: HWND); var lpRect : TRect; begin if GetWindowRect(hWnd,lpRect) then SetWindowPos(hWnd , HWND_TOPMOST, lpRect.left, lpRect.top, lpRect.Right-lpRect.left, lpRect.Bottom-lpRect.Top, SWP_SHOWWINDOW); end; 

    Windows可以做到这一点,但一个应用程序已经没有希望这样做强大。