C# Winform 知道一个窗体的句柄,如何获取这个窗体,并添加控件

Winform 知道一个窗体的句柄,如何获取这个窗体,并添加控件

var frm = (Control)Form.FromHandle(h);
h为句柄,我这里强转成control了,你可以自己看情况改动
我原来写过一个例子,调用cmd.exe窗口,并嵌入到自己的窗体内,你可以参考一下
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
public partial class Form2 : Form
{
[DllImport(
"user32", EntryPoint = "SetParent", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport(
"user32", EntryPoint = "FindWindowA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport(
"user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
[DllImport(
"shell32.dll", EntryPoint = "ShellExecuteA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] private static extern int ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
private const int WM_SYSCOMMAND = 0x112; private const int SC_MAXIMIZE = 0xF030; private const int SC_MINIMIZE = 0xF020; private const int SC_RESTORE = 0xF120; public const int SW_HIDE = 0; public const int SW_SHOW = 5;
[DllImport(
"user32.dll ", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] private static extern int ShowWindow(int hwnd, int nCmdShow);
public Form2() { InitializeComponent(); }
private void Form2_Load(object sender, EventArgs e) { //Process p = null; // p = System.Diagnostics.Process.Start("c:\\windows\\system32\\cmd.exe"); ShellExecute(this.panel1.Handle.ToInt32(), "open", @"c:\\windows\\system32\\cmd.exe", null, ".", SW_HIDE); // 让CtrlDemo.exe运行在PANEL里 IntPtr h = FindWindow(null, "c:\\windows\\system32\\cmd.exe"); //关键在这里 var frm = (Control)Form.FromHandle(h); //使你的Form可以嵌入别的容器 //frm.Visible = true; SetParent(h, this.panel1.Handle); //嵌套到panel1内 SendMessage(h.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0); ShowWindow(h.ToInt32(), SW_SHOW); } } }

原文连接:https://page.sm.cn/blm/midpage-317/index?id=12_aed11275f4756a00b0d5e044ca3c1f05&h=www.jingyanlib.com&uc_param_str=dnntnwvepffrbijbprsvchgputdemennosstodcaaagidsdieini&q=winform%E6%A0%B9%E6%8D%AE%E7%AA%97%E4%BD%93%E5%8F%A5%E6%9F%84+%E8%8E%B7%E5%8F%96%E7%AA%97%E4%BD%93&title=%E7%9F%A5%E9%81%93%E4%B8%80%E4%B8%AA%E7%AA%97%E4%BD%93%E7%9A%84%E5%8F%A5%E6%9F%84%EF%BC%8C%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%BF%99%E4%B8%AA%E7%AA%97%E4%BD%93_%E8%8A%9D%E5%A3%AB%E5%9B%9E%E7%AD%94&from=kkframenew_resultsearch&bucket=ab_pc_search%3Doff%26medical_article_insert_v2%3Db0%26medical_bs2%3Don%26medical_business_consult_trigger%3Db1%26medical_cls_tag_faq_recall_only%3Don%26medical_cls_tag_skip_cache_for_entity%3Don%26medical_dedup%3Dexp3%26medical_dedup2%3Dexp3%26medical_dedup3%3Dexp3%26medical_dedup4%3Dexp4%26medical_hos_zyy%3Don%26medical_l4_model%3Dmodel2%26medical_qa_dsi%3Doff%26medical_query_recommend%3Dbucket_4%26medical_ranker%3Dv1%26medical_rerank%3Dv3%26medical_rerank2%3Dbase%26medical_zizen%3Don%26

 

posted @ 2024-05-31 09:38  龙骑科技  阅读(289)  评论(0)    收藏  举报