99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

C#實現一個程序控制另一個程序

項目需要一個升級程序,這時候需要一個添加一個中間引導程序,實現兩個程序互動,一個程序可以調用另外一個程序,本來程序是wpf實現,所以就還想都用wpf實現,但是試了幾天各種辦法都調試不過,只能找到窗體的句柄,但是找不到控件的句柄。所以最終失敗,最后發(fā)現原因可能是:wpf的界面是畫出來的,不是win32窗體,沒法用api操作。

主要實現方式:利用API函數去找到進程窗口的句柄,然后用API去控制這個窗口

一:第一個程序引導第二個程序后,實現控制第二個程序的隱藏和實現等

WindowsFormsApp1中Form1窗體如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace 控制執(zhí)行文件
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
        Process process = new Process();
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            process.StartInfo.FileName = @"E:\test\控制執(zhí)行文件\測試程序\bin\Debug\測試程序.exe";
           // process.StartInfo.FileName = ConfigurationManager.AppSettings["sb1"];
            process.Start();
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            DisPlayWindow(process.MainWindowHandle,1);
        }
        public int DisPlayWindow(IntPtr hwnd, int nCmdshow) {
            return ShowWindow(hwnd, nCmdshow);
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            DisPlayWindow(process.MainWindowHandle, 2);
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            process.Kill();
        }
    }
}

出現的問題:如果被控制程序自己隱藏后,再從控制程序去顯示被控制程序就會有問題,程序會黑屏

二:被控制程序來操作控制程序,主要實現方式

導入“User32.dll”中的FindWindow、FindWindowEx函數查找窗口,并獲取窗口句柄。也可直接利用C#中的Process類來啟動程序,并獲取這個進程的主窗口的句柄,等等

        [DllImport("user32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

        //[DllImport("user32.dll")]
        //public static extern bool SendMessage(int hWnd, int msg, Boolean wParam, int lParam);

        /// <summary>
        /// 第一個參數是窗體的類名、第二個參數是窗體的標題,二者必須要有一個。這里推薦vs自帶的 spy++ 工具查看窗體參數
        /// </summary>
        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);


///
/// 參數說明:
hwndParent
 主窗體句柄、第一步調用 FindWindow 函數返回的值
hwndChildAfter
 子窗體的句柄,可空
lpClassName
要尋找的控件的類名
lpWindowName
要尋找的控件的標題
然后我們調用此函數尋找窗體里的 “button1” 按鈕。
///
        [DllImport("User32.dll", EntryPoint = "FindWindowEx")]
        private static extern IntPtr FindWindowEx(IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow);

        private void btnUpdate_Click(object sender, RoutedEventArgs e)
        {
            const int WM_SHOWWINDOW = 0x18;
            const int BM_CLICK = 0xF5;
            
            IntPtr WINDOW_HANDLER = FindWindow(null, "FormLead");//發(fā)送消息窗口句柄this.Handle.ToInt32(
               //IntPtr WINDOW_HANDLER = FindWindow(null, "layoutPnlUpdate");//發(fā)送消息窗口句柄this.Handle.ToInt32(
            IntPtr childHwnd = FindWindowEx(WINDOW_HANDLER, 0, null, "button1");   //獲得按鈕的句柄,此按鈕父控件必須是上面搜索的窗體
            if (childHwnd != IntPtr.Zero)
            {
                SendMessage(childHwnd, BM_CLICK, 0, 0);
            }
        }

注意事項:FindWindowEx(WINDOW_HANDLER, 0, null, "button1");   //獲得按鈕的句柄,此按鈕父控件必須是上面搜索的窗體,要不搜索不到

wMsg常量值:因為字數限制,請看另一篇

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關注 19
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 漂亮人妻被中出中文字幕 | 97免费视频在线观看 | 清纯唯美经典一区二区 | 国产成人综合激情视频在线观看 | 乱人伦人妻中文字幕 | 日韩在线视屏 | 欧美日日爱 | 亚洲在线网站 | www爱爱| 亚洲无吗视频在线 | 亚洲中文久久精品81 | 亚洲精品乱码久久久久膏 | 免费观看黄页网站 | 18禁止进入1000部高潮网站 | 日韩精品一区二区三区国语自制 | 国产在线视频不卡一区二区 | 亚洲精品网站免费 | 久久艹一区 | 成人黄网视频在线观看 | 狠狠色丁香婷婷综合久久来来去 | 日日摸夜夜添夜夜无码区 | 日韩视频区| 国产精品久久久久9999 | 国产女同2互磨高潮在线观看 | 久久99久久精品国产 | 一级在线播放 | 国产高潮流白浆喷水在线观看 | 激情白浆| 琪琪午夜成人理论福利片美容院 | 91一区二区三区四区 | 国产一区二区三区高清在线观看 | 99视频国产精品免费观看 | 成年人在线免费看的惊悚动作片 | 欧美在线视频一区在线观看 | 裸体男同自慰gay网站 | 涩色av| 欧美日韩精品一区二区三区四区 | 韩国av一区二区 | 国产一级一片免费播放 | 久久露脸国产精品 | 午夜宫影视 |