我不太会api,所以找到这个过程,要修改为最下面的过程以便完成工作
procedure TForm1.Button1Click(Sender: TObject);
var
    hCurWindow:HWnd;//窗口句柄
    WinText:array[0..255] of char;
begin
    hCurWindow:=GetWindow(Handle,GW_HWNDFIRST);
    //获取第一个窗口的句柄
    while hCurWindow<>0 do
    begin
        if GetWindowText(hCurWindow,@WinText,255)>0then
        //获取窗口的名称
        Memo1.Lines.Add(StrPas(@WinText));
        hCurWindow:=GetWindow(hCurWindow,GW_HWNDNEXT);
        //获取下一个窗口的句柄
    end;
end;
这里我是要替换执行的过程的,因为我不会api语法,只能用以上这个过程来推测自己要完成的的过程,我的过程工作是
需要把在活动的其他任何程序的Window捕获其句柄,设置其属性为半透明的过程,使用到这些函数,在那里声明我也不清楚
function GetActiveWindow:HWND;
function SetLayeredWindowAttributes(hwnd:HWND;crKey:integer;bAlpha:byte;dwFlags:integer):integer;stdcall;external user32;
我认为过程是这样的,因为和delphi语法有差别所以朋友可以帮忙翻译吗?
procedure TForm1.Button1Click(Sender: TObject);
begin
    hCurWindow:=GetActiveWindow(Handle,GW_HWNDFIRST);这里应该修改成为这个while 每当找到有焦点的hCurWindow<>0 do执行以下过程
    begin
        if GetWindowText(hCurWindow,@WinText,255)>0 then 
(应该使用成为这个GetActiveWindow:HWND;还是SetWindowLong(handle, GWL_EXSTYLE,)//)
总之把窗体设为半透明应该使用这些语句GetActiveWindows(0)
SetWindowLong(handle, GWL_EXSTYLE,)//
GetWindowLong(handle, GWL_EXSTYLE); 把新的样式赋给窗体
SetLayeredWindowAttributes(handle, 0, 192, LWA_ALPHA);

解决方案 »

  1.   

    在98里面用不了。SetLayeredWindowAttributes
      

  2.   

    9x操作系统下面无效。只能在2000/XP中有效,没有意思
      

  3.   

    9x操作系统下面无效。只能在2000/XP中有效,没有意思
    winme呢,毕竟是几年前的操作系统了,
      

  4.   

    9x操作系统下面无效。只能在2000/XP中有效,没有意思
      

  5.   

    delphi最大的毛病就是对系统底层支持不好,是不是
      

  6.   

    SetLayeredWindowAttributes关键是这个API只支持2000/XP以上的系统,不支持9x系列的操作系统,你的程序难道只能运行在2000/XP下?还有就是楼上和楼下的不要再把我的回复复制粘贴了,这样很无耻耶
      

  7.   

    楼主想干嘛?SetLayeredWindowAttributes这个API Delphi6以后Delphi有封装
    在Win9x和WinME都不支持吧
      

  8.   

    我不太明的你想做什么呀 透明么WIN98不行的呀!
    我是阿水我用AK-47
      

  9.   

    我只是设计来练习api知识的,我也知道用处不是太大的,设计来看看嘛?难道api真的这么难
      

  10.   

    可是在 XP 下使用这样的语句:  SetWindowLong(handle,0,GWL_EXSTYLE);
      SetLayeredWindowAttributes(Form1.Handle, 0, 192, LWA_ALPHA);还是无法实现半透明化啊?请指教!
      

  11.   

    SetWindowLong(handle, GWL_EXSTYLE,)//
    GetWindowLong(handle, GWL_EXSTYLE); 你没有捕获句柄吗?
    是在delphi里的设置
    Form1.AlphaBlend:=True;
    Form1.AlphaBlendValue:=100;
    这里是我找到的现成货,我也不大会看
    这里是调用的例子
    var
      FeatureEnabled: Boolean;
      Initialized: Boolean;function InitLayeredWindows: Boolean;
    var Module: THandle;
    begin
      Result:=True;
      Module:=LoadLibrary('user32.dll');
      if (Module=0) then
      begin
        Result:=False;
        Exit;
      end;
      SetLayeredWindowAttributes:=GetProcAddress(Module, 'SetLayeredWindowAttributes');
      if (Assigned(SetLayeredWindowAttributes)) then FeatureEnabled:=True;
      Initialized:=True;
    end;
    这里是最有用的我还是不会看
    begin
      Result:=True;
      if (not Initialized) then Result:=InitLayeredWindows;
      if ((Result) and (FeatureEnabled)) then
      begin
        if (Percent<>0) then
        begin
          SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
          SetLayeredWindowAttributes(Handle, 0, (255 * Percent) div 100, LWA_ALPHA);
        end else
         begin
           SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) xor WS_EX_LAYERED);
         end;
      end;
    end;
      

  12.   

    这里是另外的朋友写的
    编程实现窗体的半透明效果
        如果你不是使用Windows2000+Delphi编程的话,我不想浪费你的时间。如果是,请继续。
      大家都知道Windows 2000支持淡入淡出的窗体显示效果。如何让自己的应用程序也具备这种效果呢?前两天研究FormContainer的Form显示效果时(注:FormContainer是一个强大的Delphi特效处理控件,有兴趣的朋友可以访问http://www.billeniumsoft.com/),得高人告知,核心API函数就是SetLayeredWindowAttributes。
      要实现淡入淡出效果,就需要实现窗口的可调整的透明效果。传统的Windows应用程序想实现透明效果,一般来说需要处理自己的窗口的WM_Paint消息,程序员需要GetDC获取屏幕的HDC,调用BitBlt函数将屏幕将要被覆盖的区域拷贝到内存的TBitmap对象中,然后对该Tbitmap的ScanLine二维数组逐象素的修改rgbtRed、rgbtGreen和rgbtBlue值。天哪,实在是太麻烦了。
      Windows2000的API库中终于提供了半透明的窗体显示效果支持(虽然不是很完善)。要实现半透明的窗口效果,首先需要给创建的窗口添加WS_EX_LAYERED 扩展属性,这是一个新的窗口扩展属性,Delphi5并没有定义相应的常量和SetLayeredWindowAttributes函数,我们需要手工声明。function SetLayeredWindowAttributes(Handle: HWND; 
      COLORKEY: COLORREF; Alpha: BYTE; Flags: DWORD): Boolean; stdcall; external 'USER32.DLL';Const
      WS_EX_LAYERED = $80000;
      LWA_ALPHA = 2;   我们调用GetWindowLong函数获取当前窗口的扩展属性,并调用SetWindowLong函数将新的WS_EX_LAYERED窗口扩展属性添加进去。procedure TForm1.FormCreate(Sender: TObject);
    begin
      SetWindowLong(Handle,GWL_EXSTYLE,GetWindowLong(Handle,GWL_EXSTYLE) or WS_EX_LAYERED);
    end;  现在我们的窗口已经可以调用SetLayeredWindowAttributes函数,通过设置该函数的Alpha参数,我们就可以看到窗口的效果的变化。procedure TForm1.Button1Click(Sender: TObject);
    begin
      SetLayeredWindowAttributes(Form1.Handle, 0, 180, LWA_ALPHA);
    end;  以下的VCL控件代码封装了SetLayeredWindowAttributes函数,编程时动态改变AlphaValue值,您就可以看到窗口的透明效果了。控件屏蔽了设计期的显示效果,如果读者愿意可以改为设计期效果可见,不过那样的话,一不小心,您可能就会找不着你要设计的窗体了 8-) unit TranForm; {DragonPC 2001.2.21 }interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms ;type
      TTranForm = class(TComponent)
      private
       FAlphaValue : integer ;
       FParentFormHandle : HWND ;
      procedure SetFAlphaValue(Alpha:integer) ;
       protected
       procedure UpdateDisplay ;
    public
      constructor Create(AOwner: TComponent); override;
    published
      property AlphaValue : integer read FAlphaValue write SetFAlphaValue ;
    end;procedure Register;function SetLayeredWindowAttributes(Handle: HWND; COLORKEY: COLORREF;
      Alpha: BYTE; Flags: DWORD): Boolean; stdcall; external 'USER32.DLL';implementationprocedure Register;
    begin
      RegisterComponents('Standard', [TTranForm]);
    end;procedure TTranForm.SetFAlphaValue(Alpha: integer);
      begin
       if (Alpha >= 0) and (Alpha < 256) then begin
       FAlphaValue := Alpha ;
       UpdateDisplay() ;
      end;
    end;procedure TTranForm.UpdateDisplay;
    begin
     if (csDesigning in ComponentState) then Exit ;
     SetLayeredWindowAttributes(FParentFormHandle, 0, FAlphaValue, 2);
    end;constructor TTranForm.Create(AOwner: TComponent);
    begin
      inherited;
      if (csDesigning in ComponentState) then Exit;
      FAlphaValue := 255 ;
      FParentFormHandle := TForm(AOwner).Handle ;
      SetWindowLong(FParentFormHandle,
             GWL_EXSTYLE, 
             GetWindowLong(FParentFormHandle, GWL_EXSTYLE) or WS_EX_LAYERED);
    end;end.  谢谢您的莫大耐心得以看完此文,此文纯粹本着赚取china-pub"假币"目的所写,万一各位看官有任何的疑问,欢迎信至[email protected],谢谢。
      

  13.   

    这似乎是win2000下只作用于自己程序的方法,我需要的是对其他任何程序起作用,这就是最困难的部分阿