精华内容
下载资源
问答
  • findwindow函数用法
    2021-03-08 08:20:58

    函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。

    函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);

    参数:

    IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。

    IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。

    返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL。

    例如:

    HWND hwnd;

    hwnd = FindWindow("类名",NULL);或者hwnd = FindWindow(NULL,“窗口标题”);

    注意:在使用类名获取时,目标窗口中必须注册了类,否则无法获取到句柄

    方法如下:http://blog.csdn.net/flyoxs/article/details/2812625

    更多相关内容
  • 1. 函数的声明:Declare FunctionFindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的...

    1.    函数的声明:

    Declare Function

    FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

    这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的标题。在搜索的时候不一定两者都知道,但至少要知道其中的一个。有的窗口的标题是比较容易得到的,如"计算器",所以搜索时应使用标题进行搜索。但有的软件的标题不是固定的,如"记事本",如果打开的文件不同,窗口标题也不同,这时使用窗口类搜索就比较方便。如果找到了满足条件的窗口,这个函数返回该窗口的句柄,否则返回0。

    前面提到的VB的FindWindow()函数的声明将两个参数都定义为String类型,而在实际使用过程中,如果我们忽略某个参数就将该参数的定义又As String改为As Any。这里的As Any相当于C语言中的强制类型转换。例如,如果我们忽略窗口的类,就将定义修改如下:

    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As String) As Long

    然后,在调用时使用如下语句:

    hwndCalc = FindWindow(0&, "计算器")

    这里的0&就表示忽略类名。需要注意的是FindWindow(0&, "计算器")和FindWindow("", "计算器")有两种完全不同的含义,前者表示忽略窗口的类,而后者表示窗口的类是个空串。类似的,我们也可以忽略标题而搜索指定的类。

    从上面的讨论中可以看出,如果要搜索的外部程序的窗口标题比较容易得到,问题是比较简单的。可如果窗口的标题不固定或者根本就没有标题,怎么得到窗口的类呢?如果你安装了Visual C++,你可以使用其中的Spy++(如果没有VC++,在VB的盘上也可以找到Spy),在Spy++中有一个FindWindow工具,它允许你使用鼠标选择窗口,然后Spy++会显示这个窗口的类。

    2.  The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. This function does not perform a case-sensitive search.

    FindWindow函数根据给定的窗体类名称、窗体名称的字符串搜索父窗体并返回其窗体句柄。这个函数并不搜索子窗体。这个函数并不完成一个事件感知的搜索。

    To search child windows, beginning with a specified child window, use the FindWindowEx function.

    要搜索给定窗体的子窗体,使用FindWindowEx函数。

    Syntax

    语法

    HWND FindWindow(

    LPCTSTR lpClassName,

    LPCTSTR lpWindowName

    );

    Parameters

    参数:

    lpClassName

    [in] Pointer to a null-terminated string that specifies the class name or a class atom created by a previous call to the RegisterClass or RegisterClassEx function. The atom must be in the low-order word of lpClassName; the high-order word must be zero.

    [输入]一个以零作为终结符的字符串指针,给定窗体的类名称或由先前执行RegisterClass或RegisterClassEx函数创建的类原子,类原子的低位两个字节必须是lpClassName参数,高位两个字节必须是零。

    If lpClassName points to a string, it specifies the window class name. The class name can be any name registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names.

    <12>

    【发表评论0条 】

    展开全文
  • 关于FindWindow函数

    千次阅读 2019-07-31 16:45:12
    在调用FindWindow函数的时候,应该第一个参数为空,第二个参数为窗口的标题名。classname是窗口在创建时的注册名称,不是源代码的类名,通常可以不指定,除非确切地知道。另外,vs自带一个spy++的工具,可以探查当前...

    在调用FindWindow函数的时候,应该第一个参数为空,第二个参数为窗口的标题名。classname是窗口在创建时的注册名称,不是源代码的类名,通常可以不指定,除非确切地知道。另外,vs自带一个spy++的工具,可以探查当前所有窗口的信息,包括注册类名。

    FindWindow这个函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串。这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的标题。在搜索的时候不一定两者都知道,但至少要知道其中的一个。

     

    拿窗口句柄  FindWindow是最简单的   但如果用类名找不到, 只能使用FindWindowEx  或者  直接EnumWindow来做,优先推荐是去枚举

            [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
            private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

            [DllImport("user32.dll", EntryPoint = "FindWindowEx", SetLastError = true)]
            private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

    SetLastError = true这句话主要是用来防止错误代码被覆盖,因为最后出来的错误代码会覆盖前面出来的错误代码

    展开全文
  • FindWindow函数返回与指定字符串相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。这个函数不会查找子窗口。2.函数原型: HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName ); 3.参数说明:...

    1.函数说明:

    FindWindow,Win32 API函数。
    FindWindow函数返回与指定字符串相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。这个函数不会查找子窗口。
    2.函数原型:
    HWND FindWindow(   

                  LPCTSTR lpClassName,
                     LPCTSTR lpWindowName        
                    );

    3.参数说明:
    lpClassName
    指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
    lpWindowName
    指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
    4返回值:
    如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
    如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。

    5.使用示例:

    HWND hWndRcv = ::FindWindow(NULL,"123");

    if(hWndRcv != NULL)

    {

       AfxMessageBox("找到123窗口");

    }

    /****************/

    FindWindow(
    lpClassName,        {窗口的类名}
    lpWindowName: PChar {窗口的标题}
    ): HWND;              {返回窗口的句柄; 失败返回 0}

    //FindWindowEx 比 FindWindow 多出两个句柄参数:
    FindWindowEx(
    Parent: HWND;     {要查找子窗口的父窗口句柄}
    Child: HWND;      {子窗口句柄}
    ClassName: PChar; {}
    WindowName: PChar {}
    ): HWND;
    {
    如果 Parent 是 0, 则函数以桌面窗口为父窗口, 查找桌面窗口的所有子窗口;
    如果 是 HWND_MESSAGE, 函数仅查找所有消息窗口;
    子窗口必须是 Parent 窗口的直接子窗口;
    如果 Child 是 0, 查找从 Parent 的第一个子窗口开始;
    如果 Parent 和 Child 同时是 0, 则函数查找所有的顶层窗口及消息窗口.
    }

    --------------------------------------------------------------------------------
    //测试1: 试着找找新建程序主窗口的句柄
    var
    h: HWND;
    begin
    {现在我们知道窗口的标题是: Form1、窗口的类名是: TForm1}
    h := FindWindow('TForm1', 'Form1');
    ShowMessage(IntToStr(h));      {656180; 这是随机, 每次启动窗口肯定不一样}

    {假如不知道类名}
    h := FindWindow(nil, 'Form1');
    ShowMessage(IntToStr(h));      {656180}

    {假如不知道标题名}
    h := FindWindow('TForm1', nil);
    ShowMessage(IntToStr(h));      {656180}

    {其实这个窗口的句柄不就是 Self.Handle 吗}
    ShowMessage(IntToStr(Handle)); {656180}
    end;

    --------------------------------------------------------------------------------
    //测试2: 找计算器窗口的句柄(先打开计算器)
    var
    h: HWND;
    begin
    {如果不是简体中文系统, 这样可能不灵}
    h := FindWindow(nil, '计算器');
    ShowMessage(IntToStr(h)); {1508334}

    {最好这样, 但你得提前知道计算器窗口的类名是: SciCalc}
    h := FindWindow('SciCalc', nil);
    ShowMessage(IntToStr(h)); {1508334}
    end;

    /******************************/

    1 FindWindow函数:
    函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。
    函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);
    参数:
    IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom函数产生的全局成员。该成员为16位,必须位于IpClassName的低 16位,高位必须为 0。
    IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。
    返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL
    2 FindWindowEx函数:
    函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。
    函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);
    参数:
    hwndParent:要查找子窗口的父窗口句柄。
    如果hwnjParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。
    Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。
    hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。
    lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。
    lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。
    3命名空间 :
    using System.Runtime.InteropServices;
    4编程实例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Diagnostics;
    using System.Threading;

    namespace ConsoleApplication1
    {
        class Program
        {
            [DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
            static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            [DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)]
            extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
            [DllImport("User32.dll", EntryPoint = "SendMessage")]
            private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);

            [STAThread]
            static void Main(string[] args)
            {
                const int BM_CLICK = 0xF5;
                IntPtr maindHwnd = FindWindow(null, "父窗体句柄"); //获得父窗体句柄  
                if (maindHwnd != IntPtr.Zero)
                {
                    IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, null, "登录按钮");   //获得按钮的句柄  
                    if (childHwnd != IntPtr.Zero)
                    {
                        Console.WriteLine("找到子窗口"+childHwnd);
                        SendMessage(childHwnd, BM_CLICK, IntPtr.Zero, null);     //发送点击按钮的消息  
                    }
                    else
                    {
                        Console.WriteLine("没有找到子窗口");
                    }
                }
                else
                {
                    Console.WriteLine("没有找到窗口");
                }
                Console.ReadKey();
            }

    经过调试可得上面的子窗口的句柄好像获取不到,不知道什么原因,但是呢,在自己创建的winfrom程序中是可以获取里面的按钮的句柄的。一定要记住我们可以通过任务管理器来获取我们打开的窗口名称,按钮就是名称,不是它的变量名称。
    /***********************/

    FindWindowEx

    函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。

        函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);

        参数:

        hwndParent:要查找子窗口的父窗口句柄。

        如果hwnjParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。

        Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。

        hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。

        lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。

        lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。
     

    展开全文
  • FindWindow用法

    千次阅读 2020-12-10 06:48:18
    转自:...一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的指针,程序不能利用句柄来...
  • Findwindow函数用法

    千次阅读 2012-10-10 09:40:51
    FindWindow函数返回与指定字符串相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。这个函数不会查找子窗口。 2.函数原型: HWND FindWindow(   LPCTSTR lpClassName,  LPCTSTR lpWindowName
  • FindWindow使用方法

    万次阅读 2019-02-24 17:20:25
    Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的...
  • C# FindWindow用法

    千次阅读 2020-11-12 13:05:42
    找了一大堆C#怎么用FindWindowAPI函数不多说,请看步骤. 创建好WinForm窗口,如果不会创建的话,在图下面有. 项目名字和位置这个自己设置,下面那个框架,目前现在出5.0了,为了演示实例,就4.6吧. 创建完成后,把...
  • win32 FindWindow 函数 用法演示

    万次阅读 2018-02-07 17:43:19
    测试环境 :win7 64 位,vs2013 建立一个win32 应用程序 ,空项目,工程名称为:HelloFindWindow 源文件 添加一个 HelloFindWindow.cpp...WinMain函数体中可以运行任何函数,不一定都是createWindow哪一些函数
  • FindWindow函数用法

    万次阅读 2008-06-28 00:47:00
    函数的声明: Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 这个函数有两个参数,第一个是要找的窗口的类,第二个是要找...
  • PYTHON:Win32函数大全

    千次阅读 2020-12-10 06:48:14
    主要负责模拟键盘和鼠标操作,对win32gui获取的标签进行点击/获取值/修改值等操作Win32con:全面的库函数,提供Win32gui和Win32api需要的操作参数Win32gui 函数FindWindowhld=win32gui.FindWin...
  • 1、使用FindWindow之前需先将操作窗口的类名或窗口名用RegisterClass函数进行注册 WNDCLASS m_WindClass1; m_WindClass1.lpszClassName = _T("Microsoft Windows"); ::RegisterClass(&m_WindClass1); 获取...
  • 使用Python时,有时也会要操作到系统窗口的一些东西,下面就介绍win32gui.Findwindow(param1,param2)方法查找窗口句柄参数及对应参数值如何获取win32gui.Findwindow(param1,param2):param1需要传入窗口的类名,...
  • C#-FindWindow用法

    千次阅读 2020-03-19 16:20:01
    c#里FindWindow用法 ...要在C#里使用该API,写出FindWindow()函数的声明: [DllImport("coredll.dll", EntryPoint = "FindWindow")] private extern static IntPtr FindWindow(string lpCla...
  • vb.net中FindWindow方法使用
  • C#中使用FindWindow函数详解

    万次阅读 2009-04-20 14:32:00
    FindWindow 用来根据类名和窗口名来得到窗口句柄的。但是这个函数不能查找子窗口,也不区分大小写...1.在C#中使用方法如下:[DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern IntPtr FindW
  • FindWindow 用来根据类名和窗口名来得到窗口句柄的。但是这个函数不能查找子窗口,也不区分大小写。 如果要从一个窗口的子窗口中查找需要使用FindWindowEX。 如果要搜索的外部程序的窗口标题比较容易得到,问题是...
  • 使用chdir()函数将当前的工作目录改变成参数path所指的目录,如果目录存在则返回0, 失败返回-1。这里我顺便对路径做了下判断,如果目录的最后一个字母不是'',则在最后加上''。 查询符合要求的文件 确定了该路径是个...
  • FindWindow函数造成的问题

    千次阅读 2009-10-29 20:49:00
    这几天在使用MFC写一个程序的界面,因为原本程序时多线程的,所以在上面写界面的时候牵涉到了...获取该句柄使用的方法就是FindWindow函数。该函数使用方法如下:HWND hwnd=::FindWindow(NULL,"vrtuDlg1");当然vrtuDlg1
  • FindWindow用法

    2011-10-25 21:05:41
    FindWindow用法,用HWND hWnd=::FindWindow("Tform1",0); 可以找到form1对它做动作 但若我要找如flashget 并把它用程序按钮缩小或关闭又要如何做? ■ 结束指定的程序 要结束指定的程序,得先要知道要结束的对象...
  • [vb]FindWindow使用方法

    千次阅读 2012-06-19 22:46:18
    FindWindow使用方法━━━━━━━━━━━━━━━━━━━━━━━━━━ Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal ...
  • FindWindow函数

    2012-07-04 11:45:00
    最近学习了一些API函数,印象最深的数FindWindow(); 感觉实用的有下面用法: void send() {  HWND noteWND;  if(noteWND==NULL)  {  noteWND =::FindWindow("Notepad",NULL);  noteWND =::...
  • FindWindow函数

    千次阅读 2011-02-17 11:05:00
    <br />如果你知道该窗口的类名或标题,可以直接将类名或标题代入下面的FindWindow函数中,下面的代码首先查找目标窗口的句柄,再枚举该窗口的子窗口,判断子窗口的类名是否为"Edit"或"TEdit",若是,则认为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,090
精华内容 2,836
关键字:

findwindow函数用法