精华内容
下载资源
问答
  • findwindow
    2021-03-04 06:21:14

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

    函数型: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,在弹出的界面中拖动目标图标到程序上就可以。

    更多相关内容
  • FindWindow

    2018-09-22 18:14:26
    寻找其他窗体控件,用于向本身程序以外的窗体执行操作
  • FindWindow_visualbasic_

    2021-10-03 03:03:59
    NET FindWindow获取窗体句柄并编辑文本和触发事件
  • FindWindow_窗体_

    2021-09-30 18:04:46
    C# 查找活动窗体 示例源代码 (句柄)。
  • VB6.0 FINDWINDOW检测窗体反调试,软件防破解技术中的一个子程序例子,检测窗体反调试的代码,仅供参考。
  • findwindow_src.zip

    2020-05-11 18:08:41
    类似于spy++,,对于句柄的捕获。c#源代码调用user32.dll实现。 动态获取捕获句柄等信息。如有疑问可以留言,可能不能及时答复,但是看到,有问必答
  • FindWindow用法

    千次阅读 2020-12-10 06:48:18
    转自:http://blog.csdn.net/coolszy/article/details/5523486[DllImport("User32.dll", EntryPoint = "FindWindow")]句柄,是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序...

    转自:http://blog.csdn.net/coolszy/article/details/5523486

    [DllImport("User32.dll", EntryPoint = "FindWindow")]

    句柄,是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows大量使用了句柄来标识对象。

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

    函数型: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);

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

    }

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

    展开全文
  • FindWindow.rar

    2021-05-24 14:58:08
    c#利用findwindow点击网页的消息
  • FindWindow,Win32 API函数。 FindWindow函数返回与指定字符串相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。这个函数不会查找子窗口。2.函数原型: HWND FindWindow( LPCTSTR lpClassName, LPCTSTR ...

    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 函数功能: 函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串,这个函数不搜索子窗口。 第一个是要找的窗口的类,第二个是要找的窗口的标题 函数声明: WINUSERAPI HWND WINAPI FindWindowW( _In_...

    FindWindow

    函数功能:

    函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串,这个函数不搜索子窗口。
    第一个是要找的窗口的类,第二个是要找的窗口的标题

    函数声明:

    WINUSERAPI
    HWND
    WINAPI
    FindWindowW(
        _In_opt_ LPCWSTR lpClassName,
        _In_opt_ LPCWSTR lpWindowName);
    

    在搜索的时候不一定两者都知道,但至少要知道其中的一个。

    第一个参数

    lpClassName,输入参数,指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。

    如果该参数为null时,将会寻找任何与lpWindowName参数匹配的窗口。

    第二个参数

    指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名

    返回值

    如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄

    如果函数执行失败,则返回值为NULL。可以通过调用GetLastError函数获得更加详细的错误信息

    注意:

    如果要搜索的外部程序的窗口标题比较容易得到,问题是比较简单的。可如果窗口的标题不固定或者根本就没有标题,怎么得到窗口的类呢?这时我们可使用Microsoft Spy++,运行Spy++,按ALT+F3,在弹出的界面中拖动目标图标到程序上即可。
    举例:
    在调用时使用如下语句:
    hwndCalc = FindWindow(0&, “计算器”)
    这里的0&就表示忽略类名。需要注意的是FindWindow(0&, “计算器”)和FindWindow("", “计算器”)有两种完全不同的含义,前者表示忽略窗口的类,而后者表示窗口的类是个空串

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

    	HWND hwnd = FindWindow(NULL, "计算器");
    	if (hwnd != NULL)
    	{
    		MessageBox(NULL,"来吧","找到计算器窗口",MB_OK);
    	}
    	else
    	{
    		MessageBox(NULL, "来吧", "未找到计算器窗口", MB_OK);
    	}
    	hwnd = FindWindow("Notepad", NULL);
    	if (hwnd != NULL)
    	{
    		MessageBox(NULL, "来吧", "找到记事本窗口", MB_OK);
    	}
    	else
    	{
    		MessageBox(NULL, "来吧", "没有找到记事本窗口", MB_OK);
    	}
    

    注意,此时我打开记事本文件名字叫做01.txt - 记事本,即第二个参数

    HWND hwnd = FindWindow(NULL, "计算器");
    	if (hwnd != NULL)
    	{
    		MessageBox(NULL,"来吧","找到计算器窗口",MB_OK);
    	}
    	else
    	{
    		MessageBox(NULL, "来吧", "未找到计算器窗口", MB_OK);
    	}
    	hwnd = FindWindow(NULL, "01.txt - 记事本");
    	if (hwnd != NULL)
    	{
    		MessageBox(NULL, "来吧", "找到记事本窗口", MB_OK);
    	}
    	else
    	{
    		MessageBox(NULL, "来吧", "没有找到记事本窗口", MB_OK);
    	}
    
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    GetWindowThreadProcessId

    函数功能

    该函数返回创建指定窗口线程的标识和创建窗口的进程的标识符,后一项是可选的。得到窗口句柄后我们可以通过GetWindowThreadProcessId来获得窗口所属进程ID线程ID从而判断创建窗口的进程和线程。

    函数声明

    WINUSERAPI
    DWORD
    WINAPI
    GetWindowThreadProcessId(
        _In_ HWND hWnd,
        _Out_opt_ LPDWORD lpdwProcessId);
    

    第一个参数:

    输入参数,hWnd,窗口句柄。

    第二个参数:

    输出参数,lpdwProcessld,接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝,输出参数是进程ID地址

    返回值

    返回值为创建窗口的线程标识,返回的是窗口所属线程ID

    代码实现

      HWND hWnd; DWORD ProcessID, ThreadID;
        hWnd=FindWindow(NULL, L"计算器");
        if (hWnd == NULL)
            return 0;
        ThreadID = GetWindowThreadProcessId(hWnd, &ProcessID);
        printf("%d\n%d", ProcessID, ThreadID);
    

    在这里插入图片描述

    OpenProcess

    函数功能:

    开一个已存在的进程对象,并返回进程的句柄。

    函数声明:

    WINBASEAPI
    HANDLE
    WINAPI
    OpenProcess(
        _In_ DWORD dwDesiredAccess,
        _In_ BOOL bInheritHandle,
        _In_ DWORD dwProcessId
        );
    

    第一个参数:

    输入参数,dwDesiredAccess: 想拥有的该进程访问权限。

    • PROCESS_ALL_ACCESS //所有能获得的权限
    • PROCESS_CREATE_PROCESS //需要创建一个进程
    • PROCESS_CREATE_THREAD //需要创建一个线程
    • PROCESS_DUP_HANDLE //重复使用DuplicateHandle句柄
    • PROCESS_QUERY_INFORMATION //获得进程信息的权限,如它的退出代码、优先级
    • PROCESS_QUERY_LIMITED_INFORMATION /*获得某些信息的权限,如果获得
    • PROCESS_QUERY_INFORMATION,也拥有PROCESS_QUERY_LIMITED_INFORMATION权限*/
    • PROCESS_SET_INFORMATION //设置某些信息的权限,如进程优先级
    • PROCESS_SET_QUOTA //设置内存限制的权限,使用SetProcessWorkingSetSize
    • PROCESS_SUSPEND_RESUME //暂停或恢复进程的权限
    • PROCESS_TERMINATE //终止一个进程的权限,使用TerminateProcess
    • PROCESS_VM_OPERATION //操作进程内存空间的权限(可用VirtualProtectEx和WriteProcessMemory)
    • PROCESS_VM_READ //读取进程内存空间的权限,可使用ReadProcessMemory
    • PROCESS_VM_WRITE //读取进程内存空间的权限,可使用WriteProcessMemory
    • SYNCHRONIZE //等待进程终止

    第二个参数:

    输入参数,bInheritHandle: 表示所得到的进程句柄是否可以被继承

    第三个参数:

    输入参数,dwProcessId:被打开进程的PID

    返回值:

    如果函数调用成功将返回一个进程句柄值,否则将返回NULL
    注意:在使用完所获得的进程句柄后一定要调用CloseHandle(handle)来关闭进程的句柄。

    代码实现:

      HWND hWnd; DWORD ProcessID, ThreadID;
        hWnd=FindWindow(NULL, L"计算器");
        if (hWnd == NULL)
            return 0;
        ThreadID = GetWindowThreadProcessId(hWnd, &ProcessID);
        HANDLE handle=OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessID);
        printf("%d", handle);
        CloseHandle(handle);
    

    在这里插入图片描述

    ReadProcessMemory

    函数功能:

    函数声明:

    WINBASEAPI
    _Success_(return != FALSE)
    BOOL
    WINAPI
    ReadProcessMemory(
        _In_ HANDLE hProcess, // 被读取进程的句柄;
        _In_ LPCVOID lpBaseAddress,, // 读的起始地址;
        _Out_writes_bytes_to_(nSize,*lpNumberOfBytesRead) LPVOID lpBuffer,// 存放读取数据缓冲区;
        _In_ SIZE_T nSize, // 一次读取的字节数;
        _Out_opt_ SIZE_T* lpNumberOfBytesRead// 实际读取的字节数;
        );
    

    第一个参数:

    [in] Handle to the process whose memory is being read.

    In Windows CE, any call to OpenProcess returns a process handle with the proper access rights.
    输入参数,远程进程句柄。被读取者

    第二个参数:

    [in] Pointer to the base address in the specified process to be read.

    Before data transfer occurs, the system verifies that all data in the base address and memory of the specified size is accessible for read access. If so, the function proceeds; otherwise, the function fails.
    输入参数,远程进程中内存地址。从具体何处读取(关键,因为不是随便取一个就能读出来的)

    第三个参数:

    [out] Pointer to a buffer that receives the contents from the address space of the specified process.
    输出参数,本地进程中内存地址.函数将读取的内容写入此处

    第四个参数:

    [in] Specifies the requested number of bytes to read from the specified process.
    输入参数,要传送的字节数。要写入多少

    第五个参数:

    [out] Pointer to the number of bytes transferred into the specified buffer.

    If lpNumberOfBytesRead is NULL, the parameter is ignored.
    输出参数,实际传送的字节数. 函数返回时报告实际写入多少

    返回值:

    If the function succeeds, the return value is nonzero.
    如果成功,返回非0。

    If the function fails, the return value is 0 (zero). To get extended error information, call GetLastError.
    如果失败,返回0,错误可通过GetLastError获得

    The function fails if the requested read operation crosses into an area of the process that is inaccessible.
    重点:当操作进入了进程不可读取的部分时会失败,大多数人犯的错误。

    代码实现:

    大家需要用CE进行一系列操作,然后找到一个可以有读写权限的地址,别猜,

    
        HWND hWnd; DWORD ProcessID, ThreadID;
        DWORD nSize;
        unsigned char gamedata[24] = { 0 };
        hWnd=FindWindow(NULL, L"计算器");
        if (hWnd == NULL)
            return 0;
        ThreadID = GetWindowThreadProcessId(hWnd, &ProcessID);
        HANDLE handle=OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessID);
        printf("%d", handle);
    
        int a=ReadProcessMemory(handle, (LPCVOID)0x14D56107798, &gamedata, MAX_PATH, &nSize);
        if (a == 0)
            return 0;
        printf("%d", gamedata);
        CloseHandle(handle);
    

    在这里插入图片描述
    在这里插入图片描述

    练手题目

    看完之后就去练练手吧,前往这篇博客,这里能理解的话,那么接下来将会对你有更大的提升:
    https://blog.csdn.net/CSNN2019/article/details/112035707

    插入一个提示(vs如何打开MSDN帮助文档)

    比如要查看float的特征。
    在vs中输入float,然后按F1键,会在默认浏览器上打开帮助文档。

    展开全文
  • 为什么findwindw返回总是0为什么啊? 这个函数到底怎么用啊? 怎么修改内存?
  • python – FindWindow失败

    2020-12-10 06:48:12
    我使用pywin32扩展来解决FindWindow问题.简单的C代码:int main(){HWND h = FindWindow(NULL, TEXT("SomeApp"));if (h != INVALID_HANDLE_VALUE)SetForegroundWindow(h);return 0;}效果很好.与python相同:import ...
  • 刚接触MFC没多久,碰到一个需求,去获取其他进程的窗口句柄,但是我用 FindWindow()和EnumWindows()等方法获取到的句柄不一致,希望各位帮忙解解惑。 以下是我获取句柄的三种方法 方法一 //通过进程名获取进程ID ...
  • 函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);参数:IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。IpWindowName:指向一个指定了窗口名(窗...
  • vb.net中FindWindow方法的使用
  • 利用FindWindow和SendMessage,特此记下。 首先说FindWindowFindWindow返回与指定字符创相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。函数原型为: C++: HWND FindWindow(LPCTSTR lpClassName,LPCTSTR ...
  • 【C++】FindWindow

    千次阅读 2021-11-22 20:03:02
    HWND hwnd = FindWindow(NULL, TEXT("Epic Games启动程序")); if (hwnd != nullptr) { cout << "OK" << endl; } else { cout << "NO" << endl; }
  • 1、FindWindow: 2、 FindWindowEx: 3、SendMessage: 四、具体代码示例: 1、第一部分功能: A、接收端: B、发送端 C、运行测试 2.第二部分功能: A、接收端 B、发送端 C、运行测试 一、代码背景 ...
  • c# 利用findwindow及sendmessage外挂,也可以程序间通信。但是本代码主要演示外挂方式。
  • 1. 函数的声明: Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 这个函数有两个参数,第一个是要找的窗口的类,第二个是要...
  • FindWindow的c++代码

    2021-05-06 09:14:43
    FindWindow的c++代码
  • 关于FindWindow函数

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

    2020-07-30 15:26:18
    首先,引用命名空间及调用dll using System.Runtime.InteropServices; [DllImport("user32.dll")] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.
  • } } 我得到以下異常java.lang.UnsatisfiedLinkError: Error looking up function 'FindWindow': The specified procedure could not be found. 2014-02-22 Presen +0 JNA帶有標準窗口函數的定義。看看'...
  • C# FindWindow的用法

    千次阅读 2020-11-12 13:05:42
    然后声明API [DllImport("user32.dll", EntryPoint = "FindWindow")] //声明FindWindowAPI private extern static IntPtr FindWindow(string lpClassName, string lpWindowName); 双击刚才创建的那个Button按钮 ...
  • win32gui.FindWindow找不到风

    千次阅读 2021-03-05 13:49:04
    This答案引导我编写了以下代码:import win32guiimport win32conimport win32apihwndMain = win32gui.FindWindow("Tera Term VT", None)print hwndMainhwndChild = win32gui.GetWindow(hwndMain,...
  • FindWindow的用法

    2011-10-25 21:05:41
    FindWindow的用法,用HWND hWnd=::FindWindow("Tform1",0); 可以找到form1对它做动作 但若我要找如flashget 并把它用程序按钮缩小或关闭又要如何做? ■ 结束指定的程序 要结束指定的程序,得先要知道要结束的对象...
  • FindWindow FindWindowEx EnumWindows EnumChildWindows
  • FindWindow头文件为WinUser.h,故我还添加了#include 使用spy++工具查找外部进程窗口的类名和标题名。具体怎么操作可以查看spy++的用法。数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName); ...
  • 我想在QT中调佣FindWindow 去找一个外部程序(海康摄像头app)的窗口句柄,然后内嵌到我的QT主程序之中。某个旧海康app版本没有问题,我用最新SDK译的海康app版本则一直返回空值。 诡异的是,当我把这个调用...

空空如也

空空如也

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

findwindow