首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#:使用SendKeys在另一个应用程序中按下按钮,直到patrent应用程序关闭

C#是一种通用的面向对象编程语言,由微软公司开发。它具有强大的功能和广泛的应用领域,包括前端开发、后端开发、软件测试、数据库、服务器运维、云原生、网络通信、网络安全、音视频、多媒体处理、人工智能、物联网、移动开发、存储、区块链、元宇宙等。

对于使用SendKeys在另一个应用程序中按下按钮的需求,可以通过C#的SendKeys类来实现。SendKeys类提供了模拟键盘输入的功能,可以向其他应用程序发送按键消息。

以下是一个示例代码,演示如何使用SendKeys在另一个应用程序中按下按钮:

代码语言:txt
复制
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("user32.dll")]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

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

    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

    [DllImport("user32.dll")]
    public static extern IntPtr SetForegroundWindow(IntPtr hWnd);

    const int WM_KEYDOWN = 0x0100;
    const int WM_KEYUP = 0x0101;

    static void Main(string[] args)
    {
        // 查找目标应用程序的窗口句柄
        IntPtr targetWindow = FindWindow(null, "目标应用程序窗口标题");

        if (targetWindow != IntPtr.Zero)
        {
            // 将目标应用程序窗口置于前台
            SetForegroundWindow(targetWindow);

            // 查找按钮控件的句柄
            IntPtr button = FindWindowEx(targetWindow, IntPtr.Zero, "Button", "按钮文本");

            if (button != IntPtr.Zero)
            {
                // 模拟按下按钮
                SendMessage(button, WM_KEYDOWN, 0x0D, 0);
                SendMessage(button, WM_KEYUP, 0x0D, 0);
            }
        }
    }
}

上述代码中,通过FindWindow和FindWindowEx函数可以找到目标应用程序的窗口和按钮控件的句柄。然后使用SetForegroundWindow函数将目标应用程序窗口置于前台,最后使用SendMessage函数模拟按下按钮的操作。

需要注意的是,上述代码中的"目标应用程序窗口标题"和"按钮文本"需要根据实际情况进行替换。

关于C#的SendKeys类和相关的API函数,可以参考以下链接:

以上是关于使用C#的SendKeys在另一个应用程序中按下按钮的解决方案。希望对您有帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • VBS终极教程(2)

    =================================== VBS例子讲解--1: 用 run运行文件 set shl="createobject"("WScript.Shell") shl.run"regedit.exe" set shl="nothing" VBS例子讲解--2: 用 FSO复制文件 Set shl = CreateObject("Scripting.FileSystemObject") shl.CopyFile "c:\1.txt","d:\" set shl = nothing ========================================================= CreateObject 描述创建并返回对象的引用。语法 CreateObject(class) class 参数使用语法 servername.typename,有以下部分: 部分描述 servername 提供对象的应用程序名称。 typename 要创建的对象类型或类。 说明 Automation 服务器至少提供一种对象类型。例如,字处理应用程序可以提供应用程序对象、文档对象和工具条对象。要创建 Automation 对象,将 CreateObject 函数返回的对象赋值给某对象变量: Dim ExcelSheet Set ExcelSheet = CreateObject("Excel.Sheet") ' 使 Excel 在整个 Application 对象中都可见。 ExcelSheet.Application.Visible = True ' 将一些文本放入工作表的第一个单元格中。 ExcelSheet.ActiveSheet.Cells(1,1).Value = "This is column A, row 1" ' 保存工作表。 ExcelSheet.SaveAs "C:\TEST.XLS" ' 关闭 Excel,使 Quit 方法处于 Application 对象中。 ExcelSheet.Application.Quit ' 释放对象变量。 Set ExcelSheet = Nothing ================================== Set 将对象引用赋给一个变量或属性,或者将对象引用与事件关联。 createobject("WScript.Shell").run"regedit.exe" 和下面的 3句句有同样效果。 set shl="createobject"("WScript.Shell") shl.run"regedit.exe" set shl="nothing" 但如果我要使用多个 CreateObject对象的时候,就要写很多个 CreateObject("WScript.Shell")出来。内容如下: createobject("WScript.Shell").run"regedit.exe" CreateObject("WScript.Shell").popup"注册表已经被运行" 上面例子会给我们造成很多麻烦和工作量。这个时候我们可以使用 set来吧 CreateObject("WScript.Shell")对象付给一个变量。 以后只要对变量访问就相当于对 CreateObject("WScript.Shell")访问了。 set shl="createobject"("WScript.Shell") shl.run"regedit.exe" shl.popup"注册表已经被运行" set shl="nothing" Nothing 可选项。断开 shl与任何指定对象或类的关联。当没有其它变量引用前面的引用对象时,将 shl赋值为 Nothing 以释放与前面的引用对象相关联的系统或内存资源。 WScript 对象介绍属性/方法/对象。属性=一个物体本身具有的一种特性。方法=一个物体能够做某件事情,完成某件事情的时候就要用到方法。 WScript属性的演示例子:运行 WScript属性的格式为: WScript.属性名。 关于属性--实例: WScript.Echo (WScript.FullName) 'FullName 属性是代表主机可执行文件的完全限定路径的只读字符串。 WScript.Echo (WScript.Name) '返回 WScript 对象(主机可执行文件)的名称 WScript.Echo (WScript.Path) '返回包含主机可执行文件(CScript.exe 或 WScript.exe)的路径名称。 WScript.Echo WScript.ScriptName '返回当前运行脚本的文件名。 wscript.echo WScript.ScriptF

    01

    c#实战教程_ps初学者入门视频

    大家好,又见面了,我是你们的朋友全栈君。 C#基础教程-c#实例教程,适合初学者。 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言,还需要认真阅读有关C#语言的专著。 1.1 C#语言特点 Microsoft.NET(以下简称.NET)框架是微软提出的新一代Web软件开发模型,C#语言是.NET框架中新一代的开发工具。C#语言是一种现代、面向对象的语言,它简化了C++语言在类、命名空间、方法重载和异常处理等方面的操作,它摒弃了C++的复杂性,更易使用,更少出错。它使用组件编程,和VB一样容易使用。C#语法和C++和JAVA语法非常相似,如果读者用过C++和JAVA,学习C#语言应是比较轻松的。 用C#语言编写的源程序,必须用C#语言编译器将C#源程序编译为中间语言(MicroSoft Intermediate Language,MSIL)代码,形成扩展名为exe或dll文件。中间语言代码不是CPU可执行的机器码,在程序运行时,必须由通用语言运行环境(Common Language Runtime,CLR)中的既时编译器(JUST IN Time,JIT)将中间语言代码翻译为CPU可执行的机器码,由CPU执行。CLR为C#语言中间语言代码运行提供了一种运行时环境,C#语言的CLR和JAVA语言的虚拟机类似。这种执行方法使运行速度变慢,但带来其它一些好处,主要有:  通用语言规范(Common Language Specification,CLS):.NET系统包括如下语言:C#、C++、VB、J#,他们都遵守通用语言规范。任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,由CLR负责执行。只要为其它操作系统编制相应的CLR,中间语言代码也可在其它系统中运行。  自动内存管理:CLR内建垃圾收集器,当变量实例的生命周期结束时,垃圾收集器负责收回不被使用的实例占用的内存空间。不必象C和C++语言,用语句在堆中建立的实例,必须用语句释放实例占用的内存空间。也就是说,CLR具有自动内存管理功能。  交叉语言处理:由于任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,不同语言设计的组件,可以互相通用,可以从其它语言定义的类派生出本语言的新类。由于中间语言代码由CLR负责执行,因此异常处理方法是一致的,这在调试一种语言调用另一种语言的子程序时,显得特别方便。  增加安全:C#语言不支持指针,一切对内存的访问都必须通过对象的引用变量来实现,只允许访问内存中允许访问的部分,这就防止病毒程序使用非法指针访问私有成员。也避免指针的误操作产生的错误。CLR执行中间语言代码前,要对中间语言代码的安全性,完整性进行验证,防止病毒对中间语言代码的修改。  版本支持:系统中的组件或动态联接库可能要升级,由于这些组件或动态联接库都要在注册表中注册,由此可能带来一系列问题,例如,安装新程序时自动安装新组件替换旧组件,有可能使某些必须使用旧组件才可以运行的程序,使用新组件运行不了。在.NET中这些组件或动态联接库不必在注册表中注册,每个程序都可以使用自带的组件或动态联接库,只要把这些组件或动态联接库放到运行程序所在文件夹的子文件夹bin中,运行程序就自动使用在bin文件夹中的组件或动态联接库。由于不需要在注册表中注册,软件的安装也变得容易了,一般将运行程序及库文件拷贝到指定文件夹中就可以了。  完全面向对象:不象C++语言,即支持面向过程程序设计,又支持面向对象程序设计,C#语言是完全面向对象的,在C#中不再存在全局函数、全局变量,所有的函数、变量和常量都必须定义在类中,避免了命名冲突。C#语言不支持多重继承。 1.2 编写控制台应用程序 使用SDK命令行工具编写控制台程序 第一个程序总是非常简单的,程序首先让用户通过键盘输入自己的名字,然后程序在屏幕上打印一条欢迎信息。程序的代码是这样的: using System;//导入命名空间。//为C#语言新增解释方法,解释到本行结束 class Welcome//类定义,类的概念见下一节 { /*解释开始,和C语言解释用法相同 解释结束*/ static void Main()//主程序,程序入口函数,必须在一个类中定义 { Console.WriteLine(“请键入你的姓名:”);//控制台输出字符串 Console.ReadLine();//从键盘读入数据,输入回车结束 Console.WriteLine(“欢迎!”); } } 可以用任意一种文本编辑软件完成上述代码的编写,然后把文件存盘,假设文件名叫做welcome.c

    01

    曾是最流行的语言之一,Visual Basic 28年兴衰记

    这是一篇暴露年龄的文章。为什么这么说?因为现在年轻的程序员可能没有接触过当年红极一时的 Visual Basic。28 年前的 1991 年 4 月,Microsoft 发布了 Visual Basic 1.0 for Windows,次年 9 月,发布了 Visual Basic 1.0 for DOS。这在当时引起了很大的轰动,许多专家把 VB 的出现当做是软件开发史上的一个具有划时代意义的事件。以现在的眼光来看,VB1.0 版的功能其实非常弱,但它在推出时可是第一个 “可视” 的编程软件。这使得程序员欣喜之极,都尝试在 VB 的平台上进行软件创作。到了 1998 年夏天,Microsoft 发布了 VB 6,这是 VB.NET 至今仍然无法完全取代的版本。但随着.NET 的兴起,VB 开始走上下坡路。它是如何兴起的,又是如何衰落的?让我们跟着 Matthew MacDonald 的脚步笑看 VB 的风起云落吧!

    02
    领券