精华内容
下载资源
问答
  • c#已知窗口句柄获取窗口标题的方法,让你通过已知的窗口句柄获取窗口标题
  • 170已知窗口句柄获得其EXE应用程序路径
  • FindWindowEx只能根据类名和caption名查找 但是可能很多控件都是一样的 所以类名也一样, GetWindow可以查找上一个下一个 ...SPY++捕获的数据中可以清晰的看到我想要的是第几个子窗口 总不能一个一个去遍历吧
  • 窗口句柄:3F08DE 窗口类名:WindowsForms10.SysTreeView32.app.0.378734a 有一个外部程序使用C#开发的,已通过工具获取上述信息,请问如何通过上述资料获取该控件里面的资料 请给出代码,谢谢帮忙
  • 已经获得了这个窗口句柄,这个窗口有两个输入框,如何向这两个输入框自动输入字符? 输入完后,发送提交按钮。
  • 查找标题已知窗口句柄,遍历窗口控件   有了回调函数的概念及上面的例子,我们可以继续了。其实想要找到一个标题已知窗口句柄,用一个API函数就可以了:FindWindow. 其函数原形是: function FindWindow...

    查找标题已知的窗口句柄,遍历窗口控件

     

    有了回调函数的概念及上面的例子,我们可以继续了。其实想要找到一个标题已知的窗口句柄,用一个API函数就可以了:FindWindow.

    其函数原形是:

    function FindWindow(lpClassName, lpWindowName: PChar): HWND;stdcall;

    lpClassName:窗口类名.如果只知道标题,可以为空.窗口类名可以用很多工具获得.如winsignt32.
    lpWindowName:窗口标题.

    调用方式举例:

    var wndhwnd:HWND;
    wndhwnd:=FindWindow(nil,'某窗口标题');
    if wndhwnd<>0 thenfile://找到此窗口句柄.
    begin
    xxxxx
    end
    else begin
    MessageBox(self.handle,'没找到该窗口句柄','提示',0);
    end;

    有了这个窗口句柄,就离我们的初始目的不远了:控制其他窗体上的窗口控件.

    同样,首先要得到其他窗体上窗口控件的句柄.我们用这个API函数:EnumChildWindows.

    其函数原形是:
    function EnumChildWindows(hWndParent: HWND; lpEnumFunc:TFNWndEnumProc;
    lParam: LPARAM): BOOL; stdcall;

    这个函数和EnumWindow函数很有些想象.其作用也很相似.它的功能就是列举窗口句柄为hWndParent的窗体上所有的窗口控件的句柄.同样也是以回调函数参数的形式给出的.

    我们再举一个实际的例子,来说明这个函数的用法.程序的功能是让用户输入一个窗口标题,然后调用FindWindow函数找到此窗口句柄.通过这个句柄,我们在一个Memo里显示该窗口上所有的窗口控件.

    同样先编写回调函数.

    function EnumChildWndProc(AhWnd:LongInt;
    AlParam:lParam):boolean;stdcall;
    var
    WndClassName: array[0..254] of Char;
    WndCaption: array[0..254] of Char;
    begin
    GetClassName(AhWnd,wndClassName,254);
    GetWindowText(aHwnd,WndCaption,254);
    with form1.memo1 do
    begin
        lines.add(string(wndClassName));
        lines.add(string(wndCaption));
       lines.add('-------');
    end;
    result:=true;
    end;

    然后在一事件里调用EnumChildWindows函数.
    procedure TForm1.Button1Click(Sender: TObject);
    var
    hWnd:LongInt;
    begin
    memo1.Lines.Clear;
    Memo1.Lines.Add(Edit1.Text+' 有如下控件类名称');
    hWnd:=FindWindow(nil,pchar(Edit1.Text));
    if hWnd<>0 then
    begin
       EnumChildWindows(hWnd,@EnumChildWndProc,0);
    end
    else MessageBox(self.handle,'没找到该窗口句柄','提示',0);
    end;


    程序清单如下:

    unit Unit1;
    
    interface
    
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms,
    Dialogs, StdCtrls;
    
    type
    TForm1 = class(TForm)
        Memo1:TMemo; file://用来显示找到的控件
        Label1:TLabel; 
        Edit1:TEdit;  file://输入标题.
        Button1:TButton;
        procedureButton1Click(Sender: TObject);
    private
        { Privatedeclarations }
    public
        { Publicdeclarations }
    end;
    
    var
    Form1: TForm1;
    
    function EnumChildWndProc(AhWnd:LongInt;
       AlParam:lParam):boolean;stdcall;
    
    implementation
    
    
    {$R *.dfm}
    function EnumChildWndProc(AhWnd:LongInt;
    AlParam:lParam):boolean;stdcall;
    var
    WndClassName: array[0..254] of Char;
    WndCaption: array[0..254] of Char;
    begin
    GetClassName(AhWnd,wndClassName,254);
    GetWindowText(aHwnd,WndCaption,254);
    with form1.memo1 do
    begin
        lines.add(string(wndClassName));
        lines.add(string(wndCaption));
       lines.add('-------');
    end;
    result:=true;
    end;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
    hWnd:LongInt;
    begin
    memo1.Lines.Clear;
    Memo1.Lines.Add(Edit1.Text+' 有如下控件类名称');
    hWnd:=FindWindow(nil,pchar(Edit1.Text));
    if hWnd<>0 then
    begin
       EnumChildWindows(hWnd,@EnumChildWndProc,0);
    end
    else MessageBox(self.handle,'没找到该窗口句柄','提示',0);
    end;
    
    end.



    有了控件句柄,我们当然就可以随心所欲了.比如:

    SendMessage(hWnd,WM_SETTEXT,0,LongInt(Pchar('sdafdsf')));就可以给控件发送文本.其他还可以发送不同的消息可以做很多事情.

    展开全文
  • 其实想要找到一个标题已知窗口句柄,用一个API函数就可以了:FindWindow. 其函数原形是: function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall; lpClassName:窗口类名.如果只知道标题,可以为空...

    有了回调函数的概念及上面的例子,我们可以继续了。其实想要找到一个标题已知的窗口句柄,用一个API函数就可以了:FindWindow.

    其函数原形是:

    function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;

    lpClassName:窗口类名.如果只知道标题,可以为空.窗口类名可以用很多工具获得.如winsignt32. lpWindowName:窗口标题.

    调用方式举例:

    var wndhwnd:HWND; wndhwnd:=FindWindow(nil,'某窗口标题'); if wndhwnd<>0 then  file://找到此窗口句柄. begin   xxxxx end else begin   MessageBox(self.handle,'没找到该窗口句柄','提示',0); end;

    有了这个窗口句柄,就离我们的初始目的不远了:控制其他窗体上的窗口控件.

    同样,首先要得到其他窗体上窗口控件的句柄.我们用这个API函数:EnumChildWindows.

    其函数原形是: function EnumChildWindows(hWndParent: HWND; lpEnumFunc: TFNWndEnumProc;   lParam: LPARAM): BOOL; stdcall;

    这个函数和EnumWindow函数很有些想象.其作用也很相似.它的功能就是列举窗口句柄为hWndParent的窗体上所有的窗口控件的句柄.同样也是以回调函数参数的形式给出的.

    我们再举一个实际的例子,来说明这个函数的用法.程序的功能是让用户输入一个窗口标题,然后调用FindWindow函数找到此窗口句柄.通过这个句柄,我们在一个Memo里显示该窗口上所有的窗口控件.

    同样先编写回调函数. function  EnumChildWndProc(AhWnd:LongInt;   AlParam:lParam):boolean;stdcall; var   WndClassName: array[0..254] of Char;   WndCaption: array[0..254] of Char; begin   GetClassName(AhWnd,wndClassName,254);   GetWindowText(aHwnd,WndCaption,254);   with form1.memo1 do   begin     lines.add( string(wndClassName));     lines.add( string(wndCaption));     lines.add('-------');   end;   result:=true; end;

    然后在一事件里调用EnumChildWindows函数. procedure TForm1.Button1Click(Sender: TObject); var   hWnd:LongInt; begin   memo1.Lines.Clear;   Memo1.Lines.Add(Edit1.Text+' 有如下控件类名称');   hWnd:=FindWindow(nil,pchar(Edit1.Text));   if hWnd<>0 then   begin     EnumChildWindows(hWnd,@EnumChildWndProc,0);   end   else  MessageBox(self.handle,'没找到该窗口句柄','提示',0); end;

    程序清单如下: unit Unit1;

    interface

    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls;

    type   TForm1 = class(TForm)     Memo1: TMemo;  file://用来显示找到的控件     Label1: TLabel;      Edit1: TEdit;  file://输入标题.     Button1: TButton;      procedure Button1Click(Sender: TObject);   private     { Private declarations }   public     { Public declarations }   end;

    var   Form1: TForm1;

      function  EnumChildWndProc(AhWnd:LongInt;     AlParam:lParam):boolean;stdcall;

    implementation

    {$R *.dfm} function  EnumChildWndProc(AhWnd:LongInt;   AlParam:lParam):boolean;stdcall; var   WndClassName: array[0..254] of Char;   WndCaption: array[0..254] of Char; begin   GetClassName(AhWnd,wndClassName,254);   GetWindowText(aHwnd,WndCaption,254);   with form1.memo1 do   begin     lines.add( string(wndClassName));     lines.add( string(wndCaption));     lines.add('-------');   end;   result:=true; end;

    procedure TForm1.Button1Click(Sender: TObject); var   hWnd:LongInt; begin   memo1.Lines.Clear;   Memo1.Lines.Add(Edit1.Text+' 有如下控件类名称');   hWnd:=FindWindow(nil,pchar(Edit1.Text));   if hWnd<>0 then   begin     EnumChildWindows(hWnd,@EnumChildWndProc,0);   end   else  MessageBox(self.handle,'没找到该窗口句柄','提示',0); end;

    end.

    有了控件句柄,我们当然就可以随心所欲了.比如:

    SendMessage(hWnd,WM_SETTEXT,0,LongInt(Pchar('sdafdsf')));就可以给控件发送文本.其他还可以发送不同的消息可以做很多事情.

                

     
    阅读全文        
     

    转载于:https://www.cnblogs.com/gaobo543013306/p/7819312.html

    展开全文
  • 已知进程句柄,如何知道此进程的主窗口句柄,在此说明两种方法:1. 调用FindWindow(),前提是必须知道该进程中窗口类名和窗口名,返回后的句柄可以通过IsWindow()函数来验证是否是有效的窗口句柄.HWND hWnd = ::...

    已知进程句柄,如何知道此进程的主窗口句柄,在此说明两种方法:
    1. 调用FindWindow(),前提是必须知道该进程中窗口类名和窗口名,返回后的句柄可以通过IsWindow()函数来验证是否是有效的窗口句柄.

    HWND hWnd = ::FindWindow(szClassName, szWndName);
    if(::IsWindow(hWnd))
    {
          //  处理该窗口
    }

    2.先枚举全部窗口,再枚举回调函数中调用GetWindowThreadProcessID()得到窗口得进程ID,再与以前得到得ID比较.如果不一致,不处理,若一致,循环调用GetParent()一直到返回NULL, 最后得hwnd即为顶层窗口句柄

     BOOL   CALLBACK   EnumWindowsProc(HWND   hwnd,       LPARAM   lParam   )   
      {   
          unsigned   long   id;   
           HWND   thwnd;   
        
           id=GetWindowThreadProcessId(hwnd,NULL);   
           if   (id==lParam)   
          {   
                 while((thwnd=GetParent(hwnd))!=NULL)   
                       hwnd=thwnd;   
                 CString   x;   
                 x.Format("HWND   =   %x",hwnd);   
                 MessageBox(NULL,x,NULL,MB_OK);   
                 return   false;     
           }   
           return   true;   
      }   
          
        
      void   CMt2Dlg::OnButton1()     
      {   
      //   TODO:   Add   your   control   notification   handler   code   here   
        STARTUPINFO   StartInfo;   
        PROCESS_INFORMATION     ProceInfo;   
        ZeroMemory(&StartInfo,sizeof(StartInfo));   
        StartInfo.cb=sizeof(StartInfo);   
        
        CreateProcess(NULL,   //lpApplicationName:   PChar   
              "calc.exe",   //lpCommandLine:   PChar   
              NULL,   //lpProcessAttributes:   PSecurityAttributes   
              NULL,   //lpThreadAttributes:   PSecurityAttributes   
              true,   //bInheritHandles:   BOOL   
              CREATE_NEW_CONSOLE,   
              NULL,   
             NULL,   
              &StartInfo,   
              &ProceInfo);   
        
        Sleep(100);     //这是必须的,因为   CreateProcess   不能马上Active   windows   
        EnumWindows(EnumWindowsProc,ProceInfo.dwThreadId);   
    }

    以上内容参考:http://topic.csdn.net/t/20050612/13/4076646.html

    展开全文
  • 已知窗口句柄,如果该子窗口是隐藏的,python如何编写显示该窗口? 我以下编写的:(handle是子窗口句柄) win32gui.SetForegroundWindow(handle) win32gui.ShowWindow(handle, win32con.SW_SHOWMAXIMIZED) 只能...
  • 已知窗口句柄,获取标题.不知道有没有人需要
  • 如题 [DllImport("User32.dll ", EntryPoint = "FindWindow")] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("User32.dll ", EntryPoint = "FindWindow")]...
  • 已知窗口类名 找出窗口及控件句柄 并发送按键消息 需要实例
  • Delphi 查找标题已知窗口句柄,遍历窗口控件句柄(转)     用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是 回调函数 。我的理解是这样的: 回 调函数写出来不是自己的程序去调用的,...
  • 查找已知标题窗口句柄

    千次阅读 2005-11-29 14:55:00
    用你已知窗口标题替换这里   begin   a:=ahwnd;   with Form1.Memo1.Lines do   begin   Add(StrPas(WndCaption));   Add(StrPas(WndClassName));   add('HWND:'+inttostr(ahwnd)); // 获得句柄   Add('...
  • 初入门,碍于使用句柄时遇到问题,便写的遍历句柄只法
  • CString str1;  HWND hBtnClose;  HWND hWnd = ::FindWindow(NULL, _T("窗口名称"));  str1.Format(_T("%d"), hWnd);  MessageBox(str1);
  • 已知CFileDialog窗口句柄,如何获取当前选择的路劲?
  • 加上最大化语句后,这个窗口还是不能显示,但是点击任务栏上的图标后,窗口显示出来了,并且确实已经最大化了。 我就想问一下: 问什么窗口老是不显示出来呢?先不管它的最大化的问题。 能不能先把它显示在最...
  • 使用CreateWindow来建立按钮,也可以建立其它消息。可以使用SetWindowLong函数通过子类技术截获控件消息。下面是一个简单的例子:  var  Form1: TForm1;  h:HWND;  proc : longin
  • 根据网上提供代码,可以用鼠标获取指定窗体句柄, 现在想遍历指定窗体上所有控件的句柄,希望提供代码, 找了一天的帖子了,请勿发参考链接,直接上代码。小白。。。
  • HWND mIDHWnd,mChildHWnd; //mIDHWnd返回的控件句柄,mChildHWnd是主窗口的子窗口句柄 HWND GetChildHWnd(HWND mHwnd, int ID)//mHwnd是主窗口句柄,ID是控件的ID { while (mHwnd) { i...
  • 通过Windows进程ID获取窗口句柄

    千次阅读 2018-07-09 14:25:53
    通过Windows进程ID获取窗口句柄方法一:使用EnumWindows的方式///&lt; 枚举窗口参数typedef struct{ HWND hwndWindow; // 窗口句柄 DWORD dwProcessID; // 进程ID}EnumWindowsArg;///&lt; 枚举窗口回调函数...
  • 如何得到句柄、窗口句柄

    千次阅读 2012-08-22 18:07:48
    句柄 这一概念是MFC里的一个类,MFC有专门的函数来获取窗口句柄。 HWND hwnd; hwnd=CreateWindow("my own windowshandle","jaycnvip",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL); 这是用一个句柄...
  • 但实际跑起来有很多例外,比如打开了多窗口,比如word弹出了个对话框什么的,既然连doc的引用都有了,理应有更直接的方式得到窗体句柄,请各位帮忙。。。 var wd = new ApplicationClass(); wd.Visible = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,843
精华内容 2,337
关键字:

已知窗口句柄