.net 调用 winapi获取窗口句柄和内容

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace cstest
{
    public partial class Form1 : Form
    {
        //定义一个符合WINAPI返回值和参数的委托
        public delegate bool CallBack(IntPtr hwnd, int lParam);
        //声明符合上述委托的函数(定义一个函数指针)
        private static CallBack myCallBack;
        public Form1()
        {
            myCallBack = new CallBack(Report);
        InitializeComponent();
            GetHandle("C#");
            this.textBox1.Multiline = true;
            this.textBox1.Dock = DockStyle.Fill;
        }

        private void GetHandle(string windcaption)
        {
            IntPtr mainHandle = FindWindow(null, windcaption);
            if (IntPtr.Zero != mainHandle)
            {
                AppendText(string.Format("{0}句柄:{1}", windcaption, Convert.ToString((int)mainHandle,16)));

                //EnumChildWindows((int)mainHandle, myCallBack, 0);
                //修改窗口标题
                SetWindowText((int)mainHandle, "C#");
                StringBuilder s = new StringBuilder(512);
                //获取控件标题
                int i = GetWindowText(mainHandle, s, s.Capacity);
                AppendText(string.Format("句柄{0}的caption:{1}", Convert.ToString((int)mainHandle, 16), s.ToString()));
                //枚举所有子窗体,并将子窗体句柄传给myCallBack
                EnumChildWindows((int)mainHandle, myCallBack, 0);
            }
        }

        private void AppendText(string msg)
        {
            this.textBox1.AppendText(msg);
            this.textBox1.AppendText("\r\n");
        }
        //根据窗体句柄,输出窗体caption
        public bool Report(IntPtr hWnd, int lParam)
        {
            StringBuilder s = new StringBuilder(512);
            int i = GetWindowText((IntPtr)hWnd, s, s.Capacity);
            AppendText(string.Format("句柄{0}的caption:{1}", Convert.ToString((int)hWnd, 16), s.ToString()));
            return true;
        }

        /// <summary>
        /// 获取窗体的句柄函数
        /// </summary>
        /// <param name="lpClassName">窗口类名</param>
        /// <param name="lpWindowName">窗口标题名</param>
        /// <returns>返回句柄</returns>
        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll")]
        public static extern int EnumWindows(CallBack x, int y);

        [DllImport("user32.dll")]
        private static extern IntPtr EnumChildWindows(int hWndParent, CallBack lpEnumFunc, int lParam);

        [DllImport("user32.dll")]
        public static extern int SetWindowText(int handle, string title);

        [DllImport("user32.dll", EntryPoint = "GetWindowText")]
        public static extern int GetWindowText(IntPtr hwnd, StringBuilder lpString,int cch);

        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, StringBuilder lParam);

        private void button1_Click(object sender, EventArgs e)
        {
            StringBuilder s = new StringBuilder(512);
            //获取控件标题,对TRichEdit无效
            //int i = GetWindowText((IntPtr)int.Parse(txtHandle.Text), s, s.Capacity);
            //获取控件标题,对TRichEdit有效
            int i = SendMessage((IntPtr)int.Parse(txtHandle.Text), 0x000D, 1000, s);
            AppendText(string.Format("句柄{0}的caption:{1}", txtHandle.Text, s.ToString()));
        }
    }
}

原文地址:https://www.cnblogs.com/yesok/p/11062008.html

时间: 2024-08-29 20:40:55

.net 调用 winapi获取窗口句柄和内容的相关文章

[WinAPI] 获取窗口句柄的几种方法

1.使用FindWindow函数获取窗口句柄 示例:使用FindWindow函数获取窗口句柄,然后获得窗口大小,并且移动窗口到指定位置. 我们想获得酷我音乐盒的窗口句柄并移动它,该怎么办呢? 首先打开VC或者VS里面tool中的SPY++点击查找窗口如下: PS:把那个靶心似的的东西移动到想查找的窗口上,这里是酷我音乐盒,下面会出现窗口的信息,包括窗口的句柄.名字.类.类型.大小和位置.点击OK还有更多信息~ PS:因为FindWindowA(LPCSTR lpClassName ,LPCSTR

phpcms-v9 --- 如何通过{pc}标签获取全站文章内容?

1.phpcms-v9默认情况下只能根据catid获取当前栏目及子栏目下的文章,但是有时候我们需要如何通过{pc}标签来获取全站文章内容的需求,应该怎么做呢? 第一步:在content_tag.class.php文件中添加如下方法: 1 /** 2 * 列表页标签:主要返回的是主表中数据与附表中数据 3 * @param $data 4 */ 5 public function lists_all($data) { 6 $this->db->set_model(1);//将模型手动指定为文章模

获取窗口句柄

1.使用FindWindow函数获取窗口句柄 示例:使用FindWindow函数获取窗口句柄,然后获得窗口大小和标题,并且移动窗口到指定位置. [html] view plaincopy #include <Windows.h> #include <stdio.h> #include <string.h> #include <iostream.h> int main(int argc, char* argv[]) { //根据窗口名获取QQ游戏登录窗口句柄

窗口句柄浅析和获取窗口句柄的方法

句柄(HANDLE)是Windows程序中一个重要的概念,使用也非常频繁.在Windows程序中,有各种各样的资源(窗口.图标.光标等),系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄. 窗口句柄是windows句柄的一种,且是重要的一种句柄.在Windows应用程序中,窗口是通过窗口句柄(HWND)来标识的.我们要对某个窗口进行操作,首先就要得到这个窗口的句柄. 窗口句柄的概念比较抽象,简单说窗口句柄就是一个窗口(window)的代表.我们通过几个例子来认识它. 1.

python3获取指定目录内容的详细信息

不同平台获取指定目录内容的详细信息命令各不相同: Linux中可以通过ls -al获取获取 windows中可以通过dir命令获取 下面是我写的一个通用获取目录内容详细信息的python3脚本: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import os, time, sys from os.path import join, getsize def ListDir(dir_data): ''' :param dir_data: 指定获取内容

VBScript设置和获取剪切板内容的方法

Automation中经常需要程序和剪切板交互,还在使用键盘一个一个input?内容多的话,岂不是太慢了,使用剪切板的黏贴复制,so fast,so easy--具体需要调用Microsoft Forms 2.0 Object Library的对象和方法,用它轻松实现设置和获取剪切板的内容,下面写了2个设置和获取剪切板内容的函数,需要的时候直接调用~  'operating clipboard Function setClipboard(str)     'setting clipboard's

QWidget类中默认是忽略inputMethodEvent事件(要获取输入的内容就必须使用这个事件)

因为项目的需要以及主管的要求,准备将工程移植到Qt中,这样就可以比较容易的实现跨平台了.因为之前工程是在windows下开发的,第一个平台又是mobile所以除了底层框架之外其他的都是使用的windows的API以及编程模式,现在要移植到Qt中,第一个要面临的问题就是如何将windows的消息机制很好的转换为Qt中的处理机制.windows中是消息,Qt中是事件和信号.槽,其实原理都是一样的. 1.常用事件 因为所有和界面相关的类都是继承自QWidget类,所以QWidget类有的时间和方法,在

Android调用gallery获取图片

从gallery中获取图片 步骤: 步骤一: // 激活系统图库应用,选择一张图片 Intent intent = new Intent(); // 活动操作:选择一个项目从数据,返回被选中 intent.setAction(Intent.ACTION_PICK); // 设置意图的类型 intent.setType("image/*"); // 设置开启意图 // 设置的是有返回值的意图开启需要重写onActivityResult startActivityForResult(int

性能优化之——.NET(C#)调用webService获取客户端IP地址所属区域(异步回调)(二)

朋友们这次分享的是异步回调不是异步调用哦! 请注意喽! 功能描述,接口地址,方法名称以及参数说明,同上篇:.NET(C#)调用webService获取客户端IP地址所属区域(非异步)(一)(LZ比较懒,不想写太多哦!(⊙0⊙)) 实现代码如下: 1 namespace main 2 { 3 class Program 4 { 5 public static string Result = string.Empty; 6 7 static void Main(string[] args) 8 {