WindowsAPI句柄操作之(1)事件在外、代码在家

目录

页面展示

1、目标程序的窗体

2、主程序的窗体

3、实现效果

实现过程

1、查找目标窗体

2、隐藏目标窗体中的控件

3、移动控件

程序源码


如何意想天开地对一个没有源码的窗体UI加以改造,甚至响应来自这个点击事件,在自己的程序里编写事件代码?

本文提供两个VS2022的C#程序,一个是模拟没有源码的目标程序,一个是实现以上想法的主程序。

页面展示

1、目标程序的窗体

2、主程序的窗体

3、实现效果

实现过程

1、查找目标窗体

[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(
    string lpClassName,  /* 窗体类名 */
    string lpWindowName  /* 窗体标题 */
    );

IntPtr hProcessB = CWindowsAPI.FindWindow(null, "把柄程序B");

2、隐藏目标窗体中的控件

不是必须要隐藏

[DllImport("user32.DLL")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter,   string lpszClass, string lpszWindow);

[DllImport("user32.dll")]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);


IntPtr hControl1 = CWindowsAPI.FindWindowEx(hProcessB, IntPtr.Zero, "WindowsForms10.Window.8.app.0.141b42a_r9_ad1", null);
CWindowsAPI.ShowWindow(hControl1, CWindowsAPI.SW_HIDE);

IntPtr hControl2 = CWindowsAPI.FindWindowEx(hProcessB, IntPtr.Zero, null, "toolStrip1");
CWindowsAPI.ShowWindow(hControl2, CWindowsAPI.SW_HIDE);

IntPtr hControl3 = CWindowsAPI.FindWindowEx(hProcessB, IntPtr.Zero, null, "menuStrip1");
CWindowsAPI.ShowWindow(hControl3, CWindowsAPI.SW_HIDE);

3、移动控件

[DllImport("user32.dll", EntryPoint = "SetParent")]
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

public const uint SWP_NOSIZE = 0x0001;
[DllImport("user32.dll")] public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags);


CWindowsAPI.SetParent(menuStrip1.Handle, hProcessB);
CWindowsAPI.SetParent(toolStrip1.Handle, hProcessB); 
CWindowsAPI.SetParent(label1.Handle, hProcessB);
CWindowsAPI.SetParent(textBox1.Handle, hProcessB);
CWindowsAPI.SetParent(btnRun.Handle, hProcessB);

CWindowsAPI.SetWindowPos(label1.Handle, IntPtr.Zero, 30, 155, 0, 0, CWindowsAPI.SWP_NOSIZE);
CWindowsAPI.SetWindowPos(textBox1.Handle, IntPtr.Zero, 100, 150, 0, 0, CWindowsAPI.SWP_NOSIZE);
CWindowsAPI.SetWindowPos(btnRun.Handle, IntPtr.Zero, 100, 200, 0, 0, CWindowsAPI.SWP_NOSIZE);

程序源码

句柄操作之(1)事件在外、代码在家.rar资源-CSDN文库

https://download.csdn.net/download/xbdcbd/88873771

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xbdcbd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值