C#中已经获取了父窗口句柄如何枚举到子窗口的句柄。

C#中已经获取了父窗口句柄如何枚举到子窗口的句柄。,第1张

  List<string> list = new List<string>();

        [DllImport("user32dll")]

        [return: MarshalAs(UnmanagedTypeBool)]

        public static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);

 

        [DllImport("user32dll")]

        public static extern int GetWindowText(int hWnd, IntPtr lpString, int nMaxCount);

 

        private void toolStripButton5_Click(object sender, EventArgs e)

        {

            listClear();

            EnumChildWindows(thisHandle, thisEnumWindowsMethod, IntPtrZero);

            //这里得到了所有的子窗口listCount;

        }

 

        private bool EnumWindowsMethod(int hWnd, int lParam)

        {

            IntPtr lpString = MarshalAllocHGlobal(200);

            GetWindowText(hWnd, lpString, 200);

            var text = MarshalPtrToStringAnsi(lpString);

            if (!stringIsNullOrWhiteSpace(text))

                listAdd(text);

            return true;

        }

在编程中,无论是子窗体还是父窗体,都能相互获取到句柄。甚至可以获取到当前程序之外的窗口句柄。至于你不能获取感觉上你是使用的类似句柄查找工具来查找窗口的句柄。这个在软件中是有办法进行屏蔽的。很复杂。。例如你不管用什么工具查找QQ登录的密码文本框句柄,怎么都查找不到,实际上是因为QQ用了其他手段来进行屏蔽。。。

你是想模拟按键么

首先要获得窗口的句柄 用下面的函数应该能找到:

FindWindow根据类名\窗口标题寻找窗口

遍历顶层窗口EnumWindows

遍历窗口回调函数EnumWindowProc

遍历父窗口的所有子窗口EnumChildWindows

返回父窗口Point处的子窗口ChildWindowFromPoint

ChildWindowFromPointEx多一个参数UINT来忽略不可见无效透明的子窗口

获取与指定窗口具有莫种关系的窗口GetWindow

获取父窗口的子窗口中Z序最大的子窗口GetTopWindow

获取指定窗口相同层次Z序差1的窗口GetNextWindow

获取桌面窗口句柄GetDesktopWindow

用SendMessage函数不需要窗口标题的,只要句柄

LRESULT SendMessage(

HWND hWnd, // handle of destination window

UINT Msg, // message to send

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

);

或者用keybd_event函数,要先用SetForegroundWindow函数把目标窗口设置成前台窗口

VOID keybd_event(

BYTE bVk, // virtual-key code

BYTE bScan, // hardware scan code

DWORD dwFlags, // flags specifying various function options

DWORD dwExtraInfo // additional data associated with keystroke

);

补充:

第一个:我进入某个游戏,用CE查到内存地址后,退出游戏,再查内存地址,两个内存地址是不一样的,有什么办法可以让每次的内存地址都一样?或者说下别的解决方法?

不让每次的内存地址都一样应该是做不到的,游戏每次运行由系统分配内存,哪能让你控制啊。

第二个:我想让鼠标在内存数值到某一个数值时,鼠标移动到某点进行鼠标 *** 作,该怎么写源代码?

定义一个指针变量p,类型根据你需要的数值而定

p=该内存地址

if(p==该数值)

{

//mousemove

}

以上就是关于C#中已经获取了父窗口句柄如何枚举到子窗口的句柄。全部的内容,包括:C#中已经获取了父窗口句柄如何枚举到子窗口的句柄。、可以从子窗口句柄获取到父窗口的句柄,为什么从父窗口句柄枚举不到这个子窗口的句柄、按键精灵8,获取句柄有些只有窗口类名,没有窗口标题,该怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9378303.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存