C# Console利用mspaint打开图像并保存的方法

作者:礼拜一 时间:2023-07-05 16:15:43 

本文实例讲述了C# Console利用mspaint打开图像并保存的方法。分享给大家供大家参考,具体如下:

调用画图板压缩图片


System.Diagnostics.Process process = new System.Diagnostics.Process();
process = System.Diagnostics.Process.Start("mspaint.exe", path);
int processId = process.Id;
AutomationElement element = FindWindowByProcessId(processId);
System.Windows.Forms.SendKeys.SendWait("^s"); //发送 Ctrl + s 键
System.Windows.Forms.SendKeys.SendWait("%{F4}"); // 发送 Alt + F4 键

代码


public static AutomationElement FindWindowByProcessId(int processId)
{
 AutomationElement targetWindow = null;
 int count = 0;
 try
 {
   Process p = Process.GetProcessById(processId);
   targetWindow = AutomationElement.FromHandle(p.MainWindowHandle);
   return targetWindow;
 }
 catch (Exception ex)
 {
   count++;
   StringBuilder sb = new StringBuilder();
   string message = sb.AppendLine(string.Format("Targetwindowisnotexisting.try#{0}", count)).ToString();
   if (count > 5)
   {
     throw new InvalidProgramException(message, ex);
   }
   else
   {
     return FindWindowByProcessId(processId);
   }
 }
}

模拟键盘输入


SendKeys.SendWait("{F5}");     //发送F5按键
SendKeys.SendWait("^s");    //发送 Ctrl + s 键
SendKeys.SendWait("%{F4}");   // 发送 Alt + F4 键
//按键 代码
BACKSPACE {BACKSPACE}, {BS}, 或 {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} 或 {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER}或 ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} 或 {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SendKeys.SendWait("+{TAB}");
SendKeys.SendWait("%f");//alt+f
SendKeys.SendWait("{Tab}");
SendKeys.SendWait("{Enter}")
//多次按键的代码
//为了指定重复键,使用 {key number} 的形式。必须在 key 与 number 之间放置一个空格。//例如,{LEFT 42} 意指 42 次按下 LEFT ARROW 键;{h 10} 则是指 10 次按下 H 键。

Where is the System.Windows.Automation

The UIAutomationClient.dll is located in this folder:

C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0

If you can't find in your Add Reference->.Net tab, then you have to use the Browse tab to go to the given path, and add the assembly (Right Click on the References, choose add reference, click browse tab):

完整demo程序代码如下:


using System;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Windows.Automation;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Forms;
namespace UIATest
{
 class Program
 {
   static void Main(string[] args)
   {
     Process process = Process.Start(@"E:\WorkBook\ATP\WpfApp\bin\Debug\WpfApp.exe");
     int processId = process.Id;
     AutomationElement element = FindElementById(processId, "textBox1");
     SendKeys sendkeys = new SendKeys();
     sendkeys.Sendkeys(element, "Sending keys to input data");
     Console.WriteLine(sendkeys.ToString());
     sendkeys.Sendkeys(element, sendkeys.ContextMenu);
     Console.WriteLine(sendkeys.ToString());
     Console.WriteLine("Test finised.");
   }
   /// <summary>
   /// Get the automation elemention of current form.
   /// </summary>
   /// <param name="processId">Process Id</param>
   /// <returns>Target element</returns>
   public static AutomationElement FindWindowByProcessId(int processId)
   {
     AutomationElement targetWindow = null;
     int count = 0;
     try
     {
       Process p = Process.GetProcessById(processId);
       targetWindow = AutomationElement.FromHandle(p.MainWindowHandle);
       return targetWindow;
     }
     catch (Exception ex)
     {
       count++;
       StringBuilder sb = new StringBuilder();
       string message = sb.AppendLine(string.Format("Target window is not existing.try #{0}", count)).ToString();
       if (count > 5)
       {
         throw new InvalidProgramException(message, ex);
       }
       else
       {
         return FindWindowByProcessId(processId);
       }
     }
   }
   /// <summary>
   /// Get the automation element by automation Id.
   /// </summary>
   /// <param name="windowName">Window name</param>
   /// <param name="automationId">Control automation Id</param>
   /// <returns>Automatin element searched by automation Id</returns>
   public static AutomationElement FindElementById(int processId, string automationId)
   {
     AutomationElement aeForm = FindWindowByProcessId(processId);
     AutomationElement tarFindElement = aeForm.FindFirst(TreeScope.Descendants,
     new PropertyCondition(AutomationElement.AutomationIdProperty, automationId));
     return tarFindElement;
   }
 }
}

希望本文所述对大家C#程序设计有所帮助。

标签:C#,Console,图像
0
投稿

猜你喜欢

  • Java Http的基础概念了解

    2021-08-12 04:23:28
  • 如何在Intellij中安装LeetCode刷题插件方便Java刷题

    2023-10-16 21:38:08
  • Android自定义UI实现微信语音

    2022-04-18 10:47:41
  • C#如何利用反射将枚举绑定到下拉框详解

    2022-09-12 01:48:09
  • Android kotlin使用注解实现防按钮连点功能的示例

    2023-07-02 11:58:06
  • 通过java.util.TreeMap源码加强红黑树的理解

    2021-07-27 08:45:59
  • Android实现歌词渐变色和进度的效果

    2023-09-24 02:33:17
  • C# form-data上传图片流到远程服务器的详细代码

    2022-06-12 01:39:58
  • C#中的静态成员、静态方法、静态类介绍

    2022-04-25 20:06:51
  • Android 三级NestedScroll嵌套滚动实践

    2022-11-12 07:45:21
  • Unity OnGUI实时显示游戏FPS

    2021-10-05 22:53:39
  • Java Swing JTextArea文本区域的实现示例

    2023-10-30 13:40:28
  • c# 钩子学习笔记

    2023-03-31 20:54:22
  • Spring Boot集成Shiro实现动态加载权限的完整步骤

    2023-02-18 17:43:10
  • java安全编码指南之:Number操作详解

    2021-09-27 07:14:50
  • Java之BigDecimal的坑及解决

    2022-05-17 01:09:01
  • IDEA导出jar打包成exe应用程序的小结

    2023-06-22 04:02:46
  • Java Lambda表达式常用的函数式接口

    2021-10-30 13:43:53
  • 详解Android系统中的root权限获得原理

    2023-06-19 20:28:25
  • android使用Path绘制出多边形

    2021-11-11 19:53:38
  • asp之家 软件编程 m.aspxhome.com