如何得到目前在最上面的form无论是什么程序不一定是自己的程序的再开始一个过程

解决方案 »

  1.   

    GetTopWindow(0);只需要这么多代码就可以了
    我以前是用GetActiveWindows(0)他们有什么区别呢?
      

  2.   

    我的程序有不少form但是有一个最重要,要来执行一个过程的对其他form起作用,无论什么form都不可以妨碍这个过程,包括自己程序的其他formGetTopWindow(0);会不会把我最重要那个form也捉到
    我以前是用GetActiveWindows(0)和应用程序事件组件的不激活事件结合
    他们有什么区别呢?
      

  3.   

    GetTopWindow VB声明 
    Declare Function GetTopWindow Lib "user32" Alias "GetTopWindow" (ByVal hwnd As Long) As Long 
    说明 
    搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄 
    返回值 
    Long,位于指定窗口内部的顶级子窗口的句柄 
    参数表 
    参数 类型及说明 
    ByVal Long,想在其中搜寻顶级子的窗口。零表示寻找位于桌面的顶级窗口 
    注解 
    Z序列中的顶级窗口也是内部窗口列表的第一个窗口
     GetActiveWindow VB声明 
    Declare Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long 
    说明 
    获得活动窗口的句柄 
    返回值 
    Long,活动窗口的句柄,如没有窗口处于活动状态,则返回零值 没有delphi的可惜,谁可以翻译
      

  4.   

    function GetTopWindow(hwnd:HWND):HWND;
    function GetActiveWindow:HWND;假设你开了ACDSee,并且选择了窗体永远处于最前面,然后你打开了IE浏览器,正在浏览CSDN。那么你用GetTopWindow(0)得到的是ACDSee的主窗口,而GetActiveWindow是IE的窗口。你的焦点在哪个窗口上,那么GetActiveWindow得到的就是那个窗口的顶级Pareng窗口句柄
      

  5.   

    function GetTopWindow(hwnd:HWND):HWND;
    function GetActiveWindow:HWND;
    可以把他们这两句直接加入begin 和end语句里了吗?在这后面直接加入任意我要执行的代码就可以了吧
      

  6.   

    你绝对不应该把“function GetTopWindow(hwnd:HWND):HWND;
    function GetActiveWindow:HWND;

    添加到你的begin...end里面
      

  7.   

    function GetActiveWindow:HWND;
    是在var里吗,那type还要吗,语法有区别,所以不容易分清
      

  8.   

    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;
    如果用这个例子替换比较合适,只是没有function的使用例子 begin
        hCurWindow:=GetWindow(Handle,GW_HWNDFIRST);(这里应该修改成为这个function GetActiveWindow:HWND;)
    while hCurWindow<>0 do
        begin
            if GetWindowText(hCurWindow,@WinText,255)>0 then 
    (应该修改成为这个GetActiveWindow:HWND;还是SetWindowLong(handle, GWL_EXSTYLE,)//)
    function SetLayeredWindowAttributes(hwnd:HWND;crKey:integer;bAlpha:byte;dwFlags:integer):integer;stdcall;external user32;
    GetActiveWindows(0)
    SetWindowLong(handle, GWL_EXSTYLE,)//加入其他事件就可以把当前的其他窗体捕获吗,如果不可以上面的语句就有必要加入吗
    GetWindowLong(handle, GWL_EXSTYLE); 把新的样式赋给窗体
    SetLayeredWindowAttributes(handle, 0, 192, LWA_ALPHA);