C# Console利用mspaint打開(kāi)圖像并保存的方法
本文實(shí)例講述了C# Console利用mspaint打開(kāi)圖像并保存的方法。分享給大家供大家參考,具體如下:
調(diào)用畫(huà)圖板壓縮圖片
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"); //發(fā)送 Ctrl + s 鍵
System.Windows.Forms.SendKeys.SendWait("%{F4}"); // 發(fā)送 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("Target window is not existing.try #{0}", count)).ToString();
if (count > 5)
{
throw new InvalidProgramException(message, ex);
}
else
{
return FindWindowByProcessId(processId);
}
}
}
模擬鍵盤(pán)輸入
SendKeys.SendWait("{F5}"); //發(fā)送F5按鍵
SendKeys.SendWait("^s"); //發(fā)送 Ctrl + s 鍵
SendKeys.SendWait("%{F4}"); // 發(fā)送 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}")
//多次按鍵的代碼
//為了指定重復(fù)鍵,使用 {key number} 的形式。必須在 key 與 number 之間放置一個(gè)空格。//例如,{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;
}
}
}
希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。
- C# Console.WriteLine()用法案例詳解
- C# Console類(lèi)的具體用法
- C#控制臺(tái)程序如何發(fā)布到服務(wù)器Linux上運(yùn)行
- C# 創(chuàng)建控制臺(tái)應(yīng)用程序
- C# 實(shí)現(xiàn)在控制臺(tái)上換行輸出與不換行輸出
- 使用Visual Studio2019創(chuàng)建C#項(xiàng)目(窗體應(yīng)用程序、控制臺(tái)應(yīng)用程序、Web應(yīng)用程序)
- C#創(chuàng)建WCF服務(wù)控制臺(tái)應(yīng)用程序詳解
- 解析C# Console 控制臺(tái)為什么也會(huì)卡死(原因分析)
相關(guān)文章
C#調(diào)用執(zhí)行外部程序的實(shí)現(xiàn)方法
這篇文章主要介紹了C#調(diào)用執(zhí)行外部程序的實(shí)現(xiàn)方法,涉及C#進(jìn)程調(diào)用的相關(guān)使用技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-04-04
BarCode條形碼基于C# GDI+ 的實(shí)現(xiàn)方法詳解
本篇文章介紹了,BarCode條形碼基于C# GDI+ 的實(shí)現(xiàn)方法詳解。需要的朋友參考下2013-05-05
使用C#發(fā)送Http請(qǐng)求實(shí)現(xiàn)模擬登陸實(shí)例
本文主要介紹了使用C#發(fā)送Http請(qǐng)求實(shí)現(xiàn)模擬登陸實(shí)例,模擬登陸的原理簡(jiǎn)單,想要了解的朋友可以了解一下。2016-10-10
WPF實(shí)現(xiàn)數(shù)據(jù)綁定的幾種方法
Windows Presentation Foundation (WPF) 是微軟開(kāi)發(fā)的一套用于構(gòu)建用戶(hù)界面的框架,在 WPF 中,數(shù)據(jù)綁定是一個(gè)非常重要的概念,它使得 UI 和數(shù)據(jù)源之間的同步變得簡(jiǎn)單和高效,本文將詳細(xì)分析 WPF 中實(shí)現(xiàn)數(shù)據(jù)綁定的幾種方法,需要的朋友可以參考下2024-12-12
.NET實(shí)現(xiàn)父窗體關(guān)閉而不影響子窗體的方法
這篇文章主要介紹了.NET實(shí)現(xiàn)父窗體關(guān)閉而不影響子窗體的方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08
C# BackgroundWorker組件學(xué)習(xí)入門(mén)介紹
一個(gè)程序中需要進(jìn)行大量的運(yùn)算,并且需要在運(yùn)算過(guò)程中支持用戶(hù)一定的交互,為了獲得更好的用戶(hù)體驗(yàn),使用BackgroundWorker來(lái)完成這一功能2013-10-10

