zoukankan      html  css  js  c++  java
  • FindWindow使用方法

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

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

        參数:

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

        IpWindowName:指向一个指定了窗体名(窗体标题)的空结束字符串。假设该參数为空,则为全部窗体全匹配。

        返回值:假设函数成功,返回值为具有指定类名和窗体名的窗体句柄;假设函数失败,返回值为NULL。
    C#中使用该函数首先导入命名空间:

    using System.Runtime.InteropServices;

    然后写API引用部分的代码,放入 class 内部

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

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

    IntPtr hwnd = FindWindow(null, "计算器");
    if (hwnd != IntPtr.Zero)
    {
    MessageBox.Show("找到计算器窗体");
    }
    else
    {
    MessageBox.Show("没有找到计算器窗体");
    }
    hwnd = FindWindow("Notepad", null);
    if (hwnd != IntPtr.Zero)
    {
    MessageBox.Show("找到记事本窗体");
    }
    else
    {
    MessageBox.Show("没有找到记事本窗体");
    }

    从上面的讨论中能够看出,假设要搜索的外部程序的窗体标题比較easy得到,问题是比較简单的。可假设窗体的标题不固定或者根本就没有标题,怎么得到窗体的类呢?这时我们可使用Microsoft Spy++,执行Spy++,按ALT+F3,在弹出的界面中拖动目标图标到程序上就可以。

    转自-https://www.cnblogs.com/mfrbuaa/p/3780313.html

  • 相关阅读:
    Java.io.outputstream.PrintStream:打印流
    Codeforces 732F. Tourist Reform (Tarjan缩点)
    退役了
    POJ 3281 Dining (最大流)
    Light oj 1233
    Light oj 1125
    HDU 5521 Meeting (最短路)
    Light oj 1095
    Light oj 1044
    HDU 3549 Flow Problem (dinic模版 && isap模版)
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9940558.html
Copyright © 2011-2022 走看看