WPF 实现截屏控件之移动(二)(仿微信)

WPF开发者QQ群

此群已满340500857 ,请加新群458041663

       由于微信群人数太多入群请添加小编微信号

 yanjinhuawechatW_Feng_aiQ 邀请入群

 需备注WPF开发者 

 接着上一篇,兼容屏幕缩放问题。

01

代码如下

一、创建ScreenCut.xaml代码如下。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:controls="clr-namespace:WPFDevelopers.Controls"><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Basic/ControlBasic.xaml"/><ResourceDictionary Source="ButtonsStyles.xaml"/></ResourceDictionary.MergedDictionaries><Style x:Key="RectangleStyle" TargetType="{x:Type Rectangle}"><Setter Property="Fill" Value="{DynamicResource BlackSolidColorBrush}"/><Setter Property="Opacity" Value=".5"/></Style><Style TargetType="{x:Type controls:ScreenCut}" BasedOn="{StaticResource ControlBasicStyle}"><Setter Property="WindowState" Value="Maximized"/><Setter Property="WindowStyle" Value="None"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type controls:ScreenCut}"><Canvas x:Name="PART_Canvas"Width="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}}"Height="{Binding Source={x:Static SystemParameters.PrimaryScreenHeight}}"><Rectangle x:Name="PART_RectangleLeft" Style="{DynamicResource RectangleStyle}"/><Rectangle x:Name="PART_RectangleTop" Style="{DynamicResource RectangleStyle}"/><Rectangle x:Name="PART_RectangleRight" Style="{DynamicResource RectangleStyle}"/><Rectangle x:Name="PART_RectangleBottom" Style="{DynamicResource RectangleStyle}"/><Border x:Name="PART_Border" BorderBrush="{DynamicResource PrimaryNormalSolidColorBrush}" BorderThickness="1" Background="Transparent" Cursor="SizeAll"/><WrapPanel x:Name="PART_WrapPanel" Visibility="Hidden" Panel.ZIndex="99"Height="38" Background="{DynamicResource WhiteSolidColorBrush}"VerticalAlignment="Center"><Button x:Name="PART_ButtonSave" Style="{DynamicResource PathButton}"ToolTip="保存" Margin="10,0,0,0"><Button.Content><Path Fill="{DynamicResource InfoPressedSolidColorBrush}" Width="18" Height="18" Stretch="Fill" Data="{StaticResource PathSave}"/></Button.Content></Button><Button x:Name="PART_ButtonCancel" Style="{DynamicResource PathButton}"ToolTip="取消"><Button.Content><Path Fill="{DynamicResource DangerPressedSolidColorBrush}" Width="14" Height="14" Stretch="Fill" Data="{StaticResource PathCancel}"/></Button.Content></Button><Button x:Name="PART_ButtonComplete"  Style="{DynamicResource PathButton}"ToolTip="完成" Margin="0,0,10,0"><Button.Content><Path Fill="{DynamicResource SuccessPressedSolidColorBrush}"  Width="20" Height="15" Stretch="Fill" Data="{StaticResource PathComplete}"/></Button.Content></Button></WrapPanel></Canvas></ControlTemplate></Setter.Value></Setter></Style>
</ResourceDictionary>

二、创建ScreenCut.cs代码如下。

using Microsoft.Win32;
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using WPFDevelopers.Helpers;namespace WPFDevelopers.Controls
{[TemplatePart(Name = CanvasTemplateName, Type = typeof(Canvas))][TemplatePart(Name = RectangleLeftTemplateName, Type = typeof(Rectangle))][TemplatePart(Name = RectangleTopTemplateName, Type = typeof(Rectangle))][TemplatePart(Name = RectangleRightTemplateName, Type = typeof(Rectangle))][TemplatePart(Name = RectangleBottomTemplateName, Type = typeof(Rectangle))][TemplatePart(Name = BorderTemplateName, Type = typeof(Border))][TemplatePart(Name = WrapPanelTemplateName, Type = typeof(WrapPanel))][TemplatePart(Name = ButtonSaveTemplateName, Type = typeof(Button))][TemplatePart(Name = ButtonCancelTemplateName, Type = typeof(Button))][TemplatePart(Name = ButtonCompleteTemplateName, Type = typeof(Button))]public class ScreenCut : Window{private const string CanvasTemplateName = "PART_Canvas";private const string RectangleLeftTemplateName = "PART_RectangleLeft";private const string RectangleTopTemplateName = "PART_RectangleTop";private const string RectangleRightTemplateName = "PART_RectangleRight";private const string RectangleBottomTemplateName = "PART_RectangleBottom";private const string BorderTemplateName = "PART_Border";private const string WrapPanelTemplateName = "PART_WrapPanel";private const string ButtonSaveTemplateName = "PART_ButtonSave";private const string ButtonCancelTemplateName = "PART_ButtonCancel";private const string ButtonCompleteTemplateName = "PART_ButtonComplete";private Canvas _canvas;private Rectangle _rectangleLeft, _rectangleTop, _rectangleRight, _rectangleBottom;private Border _border;private WrapPanel _wrapPanel;private Button _buttonSave, _buttonCancel, _buttonComplete;private Rect rect;private Point pointStart, pointEnd;private bool isMouseUp = false;private Win32ApiHelper.DeskTopSize size;static ScreenCut(){DefaultStyleKeyProperty.OverrideMetadata(typeof(ScreenCut), new FrameworkPropertyMetadata(typeof(ScreenCut)));}public override void OnApplyTemplate(){base.OnApplyTemplate();_canvas = GetTemplateChild(CanvasTemplateName) as Canvas;_rectangleLeft = GetTemplateChild(RectangleLeftTemplateName) as Rectangle;_rectangleTop = GetTemplateChild(RectangleTopTemplateName) as Rectangle;_rectangleRight = GetTemplateChild(RectangleRightTemplateName) as Rectangle;_rectangleBottom = GetTemplateChild(RectangleBottomTemplateName) as Rectangle;_border = GetTemplateChild(BorderTemplateName) as Border;_wrapPanel = GetTemplateChild(WrapPanelTemplateName) as WrapPanel;_buttonSave = GetTemplateChild(ButtonSaveTemplateName) as Button;if (_buttonSave != null)_buttonSave.Click += _buttonSave_Click;_buttonCancel = GetTemplateChild(ButtonCancelTemplateName) as Button;if (_buttonCancel != null)_buttonCancel.Click += _buttonCancel_Click;_buttonComplete = GetTemplateChild(ButtonCompleteTemplateName) as Button;if (_buttonComplete != null)_buttonComplete.Click += _buttonComplete_Click;_canvas.Background = new ImageBrush(Capture());_rectangleLeft.Width = _canvas.Width;_rectangleLeft.Height = _canvas.Height;}private void _buttonSave_Click(object sender, RoutedEventArgs e){SaveFileDialog dlg = new SaveFileDialog();dlg.FileName = $"WPFDevelopers{DateTime.Now.ToString("yyyyMMddHHmmss")}.jpg";dlg.DefaultExt = ".jpg";dlg.Filter = "image file|*.jpg";if (dlg.ShowDialog() == true){BitmapEncoder pngEncoder = new PngBitmapEncoder();pngEncoder.Frames.Add(BitmapFrame.Create(CutBitmap()));using (var fs = System.IO.File.OpenWrite(dlg.FileName)){pngEncoder.Save(fs);fs.Dispose();fs.Close();}}Close();}private void _buttonComplete_Click(object sender, RoutedEventArgs e){Clipboard.SetImage(CutBitmap());Close();}CroppedBitmap CutBitmap(){_border.Visibility = Visibility.Collapsed;_rectangleLeft.Visibility = Visibility.Collapsed;_rectangleTop.Visibility = Visibility.Collapsed;_rectangleRight.Visibility = Visibility.Collapsed;_rectangleBottom.Visibility = Visibility.Collapsed;var renderTargetBitmap = new RenderTargetBitmap((int)_canvas.Width,(int)_canvas.Height, 96d, 96d, System.Windows.Media.PixelFormats.Default);renderTargetBitmap.Render(_canvas);return new CroppedBitmap(renderTargetBitmap, new Int32Rect((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height));}private void _buttonCancel_Click(object sender, RoutedEventArgs e){Close();}protected override void OnPreviewKeyDown(KeyEventArgs e){if (e.Key == Key.Escape)Close();}protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e){pointStart = e.GetPosition(_canvas);if (!isMouseUp){_wrapPanel.Visibility = Visibility.Hidden;pointEnd = pointStart;rect = new Rect(pointStart, pointEnd);}}protected override void OnPreviewMouseMove(MouseEventArgs e){if (e.LeftButton == MouseButtonState.Pressed){var current = e.GetPosition(_canvas);if (!isMouseUp){MoveAllRectangle(current);}else{if (current != pointStart){var vector = Point.Subtract(current, pointStart);var left = Canvas.GetLeft(_border) + vector.X;var top = Canvas.GetTop(_border) + vector.Y;if (left <= 0)left = 0;if (top <= 0)top = 0;if (left + _border.Width >= _canvas.ActualWidth)left = _canvas.ActualWidth - _border.ActualWidth;if (top + _border.Height >= _canvas.ActualHeight)top = _canvas.ActualHeight - _border.ActualHeight;pointStart = current;Canvas.SetLeft(_border, left);Canvas.SetTop(_border, top);rect = new Rect(new Point(left, top), new Point(left + _border.Width, top + _border.Height));_rectangleLeft.Width = left <= 0 ? 0 : left >= _canvas.ActualWidth ? _canvas.ActualWidth : left;_rectangleLeft.Height = _canvas.ActualHeight;Canvas.SetLeft(_rectangleTop, _rectangleLeft.Width);_rectangleTop.Height = top <= 0 ? 0 : top >= _canvas.ActualHeight ? _canvas.ActualHeight : top;Canvas.SetLeft(_rectangleRight, left + _border.Width);var wRight = _canvas.ActualWidth - (_border.Width + _rectangleLeft.Width);_rectangleRight.Width = wRight <= 0 ? 0 : wRight;_rectangleRight.Height = _canvas.ActualHeight;Canvas.SetLeft(_rectangleBottom, _rectangleLeft.Width);Canvas.SetTop(_rectangleBottom, top + _border.Height);_rectangleBottom.Width = _border.Width;var hBottom = _canvas.ActualHeight - (top + _border.Height);_rectangleBottom.Height = hBottom <= 0 ? 0 : hBottom;}}}}protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e){_wrapPanel.Visibility = Visibility.Visible;Canvas.SetLeft(_wrapPanel, rect.X + rect.Width - _wrapPanel.ActualWidth);var y = Canvas.GetTop(_border) + _border.ActualHeight + _wrapPanel.ActualHeight;if (y > _canvas.ActualHeight)y = Canvas.GetTop(_border) - _wrapPanel.ActualHeight - 4;elsey = Canvas.GetTop(_border) + _border.ActualHeight + 4;Canvas.SetTop(_wrapPanel, y);isMouseUp = true;}void MoveAllRectangle(Point current){pointEnd = current;rect = new Rect(pointStart, pointEnd);_rectangleLeft.Width = rect.X;_rectangleLeft.Height = _canvas.Height;Canvas.SetLeft(_rectangleTop, _rectangleLeft.Width);_rectangleTop.Width = rect.Width;double h = 0.0;if (current.Y < pointStart.Y)h = current.Y;elseh = current.Y - rect.Height;_rectangleTop.Height = h;Canvas.SetLeft(_rectangleRight, _rectangleLeft.Width + rect.Width);_rectangleRight.Width = _canvas.Width - (rect.Width + _rectangleLeft.Width);_rectangleRight.Height = _canvas.Height;Canvas.SetLeft(_rectangleBottom, _rectangleLeft.Width);Canvas.SetTop(_rectangleBottom, rect.Height + _rectangleTop.Height);_rectangleBottom.Width = rect.Width;_rectangleBottom.Height = _canvas.Height - (rect.Height + _rectangleTop.Height);_border.Height = rect.Height;_border.Width = rect.Width;Canvas.SetLeft(_border, rect.X);Canvas.SetTop(_border, rect.Y);}BitmapSource Capture(){IntPtr hBitmap;IntPtr hDC = Win32ApiHelper.GetDC(Win32ApiHelper.GetDesktopWindow());IntPtr hMemDC = Win32ApiHelper.CreateCompatibleDC(hDC);size.cx = Win32ApiHelper.GetSystemMetrics(0);size.cy = Win32ApiHelper.GetSystemMetrics(1);hBitmap = Win32ApiHelper.CreateCompatibleBitmap(hDC, size.cx, size.cy);if (hBitmap != IntPtr.Zero){IntPtr hOld = (IntPtr)Win32ApiHelper.SelectObject(hMemDC, hBitmap);Win32ApiHelper.BitBlt(hMemDC, 0, 0, size.cx, size.cy, hDC, 0, 0, Win32ApiHelper.TernaryRasterOperations.SRCCOPY);Win32ApiHelper.SelectObject(hMemDC, hOld);Win32ApiHelper.DeleteDC(hMemDC);Win32ApiHelper.ReleaseDC(Win32ApiHelper.GetDesktopWindow(), hDC);var bsource = Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());Win32ApiHelper.DeleteObject(hBitmap);GC.Collect();return bsource;}return null;}}
}

三、新建WINAPI DLL Imports.cs代码如下。

#region WINAPI DLL Imports[DllImport("gdi32.dll", ExactSpelling = true, PreserveSig = true, SetLastError = true)]public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);[DllImport("gdi32.dll")]public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);[DllImport("gdi32.dll", SetLastError = true)]public static extern IntPtr CreateCompatibleDC(IntPtr hdc);[DllImport("gdi32.dll")]public static extern bool DeleteObject(IntPtr hObject);[DllImport("gdi32.dll")]public static extern IntPtr CreateBitmap(int nWidth, int nHeight, uint cPlanes, uint cBitsPerPel, IntPtr lpvBits);[DllImport("user32.dll")]public static extern IntPtr GetDC(IntPtr hWnd);[DllImport("user32.dll")]public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);[DllImport("gdi32.dll", EntryPoint = "DeleteDC")]public static extern IntPtr DeleteDC(IntPtr hDc);public const int SM_CXSCREEN = 0;public const int SM_CYSCREEN = 1;[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]public static extern IntPtr GetDesktopWindow();[DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]public static extern int GetSystemMetrics(int abc);[DllImport("user32.dll", EntryPoint = "GetWindowDC")]public static extern IntPtr GetWindowDC(Int32 ptr);public struct DeskTopSize{public int cx;public int cy;}public enum TernaryRasterOperations : uint{/// <summary>dest = source</summary>SRCCOPY = 0x00CC0020,/// <summary>dest = source OR dest</summary>SRCPAINT = 0x00EE0086,/// <summary>dest = source AND dest</summary>SRCAND = 0x008800C6,/// <summary>dest = source XOR dest</summary>SRCINVERT = 0x00660046,/// <summary>dest = source AND (NOT dest)</summary>SRCERASE = 0x00440328,/// <summary>dest = (NOT source)</summary>NOTSRCCOPY = 0x00330008,/// <summary>dest = (NOT src) AND (NOT dest)</summary>NOTSRCERASE = 0x001100A6,/// <summary>dest = (source AND pattern)</summary>MERGECOPY = 0x00C000CA,/// <summary>dest = (NOT source) OR dest</summary>MERGEPAINT = 0x00BB0226,/// <summary>dest = pattern</summary>PATCOPY = 0x00F00021,/// <summary>dest = DPSnoo</summary>PATPAINT = 0x00FB0A09,/// <summary>dest = pattern XOR dest</summary>PATINVERT = 0x005A0049,/// <summary>dest = (NOT dest)</summary>DSTINVERT = 0x00550009,/// <summary>dest = BLACK</summary>BLACKNESS = 0x00000042,/// <summary>dest = WHITE</summary>WHITENESS = 0x00FF0062}[DllImport("gdi32.dll")]public static extern bool BitBlt(IntPtr hdc, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, TernaryRasterOperations dwRop);#endregion}

四、新建ScreenCutExample.xaml.cs代码如下。

var screenCut = new ScreenCut();screenCut.ShowDialog();//screenCut.Show();

02


效果预览

鸣谢素材提供者 - 吴锋

源码地址如下

Github:https://github.com/WPFDevelopersOrg

Gitee:https://gitee.com/WPFDevelopersOrg

WPF开发者QQ群: 340500857 | 458041663

Github:https://github.com/WPFDevelopersOrg

出处:https://www.cnblogs.com/yanjinhua

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载请著名作者 出处 https://github.com/WPFDevelopersOrg

4cdd79e13025aa9bc39659f9a61da1e5.png

扫一扫关注我们,

17b05be38a38009a6c8757a26e7e3614.gif

更多知识早知道!

90f3d4ee44e229706ab725b89fdc2557.gif

点击阅读原文可跳转至源代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入剖析阿里云推荐引擎——新架构,新体验

摘要&#xff1a;本文的整理自2017云栖大会-上海峰会上阿里云算法专家郑重&#xff08;卢梭&#xff09;的分享讲义&#xff0c;从2016年2月V2.0公开使用到现在&#xff0c;阿里云推荐引擎有了更大的进步。有着获取排序的在线计算&#xff0c;修正匹配的近线计算及匹配排序的离…

分治算法之快速排序

1、快速排序 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序 2、思路 ( 1 )分解:先从数列中取出一个元素作为基准元素。以基准元素为标准,将问题分解为两个子序列,使小于…

SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

SQL Server 2008空间数据应用系列三&#xff1a;SQL Server 2008空间数据类型 原文:SQL Server 2008空间数据应用系列三&#xff1a;SQL Server 2008空间数据类型友情提示&#xff0c;您阅读本篇博文的先决条件如下&#xff1a; 1、本文示例基于Microsoft SQL Server 2008 R2调…

.NET 很好,你可能对它有一些误解

> 作者&#xff1a;Charles Chen在 20 年前的 2002 年, 微软公布了下一代的软件、服务的愿景和路线&#xff0c;2 月 13 日&#xff0c;Visual Studio .NET 推出&#xff0c;.NET 开发平台的第一个版本正式向世界发布。到现在为止&#xff0c;.NET 都已经 20 岁了, 它已经成…

SQL语言实现金额小写转大写完整案例代码

1. 数字大小写对照表 一到十数字大小写: 1——壹,2——贰,3——叁,4——肆,5——伍,6——陆,7——柒,8——捌,9——玖,10——拾 2. 大小写转换案例 将12.345元转换为大写 select dbo.L2U(12.345,1) select dbo.L2U(123456789.345,1) 结果: 3. SQL转化代码 CREA…

盘点PHP编程常见失误

为什么80%的码农都做不了架构师&#xff1f;>>> 变量声明 如果在一条语句中声明一个变量&#xff0c;如下所示&#xff1a;$varvalue;编译器首先会求出语句右半部分的值&#xff0c;恰恰正是语句的这一部分常常会引发错误。如果使用的语法不正确&#xff0c;就会出…

Educational Codeforces Round 1

被C坑的不行不行的。。。其他题目都还可以。 A - Tricky Sum 求1&#xff0c;2&#xff0c;3,...,n的加和&#xff0c;其中2^x&#xff08;x>0&#xff09;为负。 因为2^x的个数很少&#xff0c;所以以每个2^x为分界点进行判断. 初始化x0; 如果n>2^x,求出2^(x-1)到2^(x)之…

甲骨文严查Java授权,企业连夜删除JDK

文 | Travis出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013)根据外媒 The Register 报道和各大企业的反馈&#xff0c;甲骨文公司近日已经开始将 Java 纳入其软件许可审查中&#xff0c;目的是找出那些处于不合规边缘或已经违规的客户&#xff0c;甲骨文此举是为了推…

前端日志分析

前端日志分析介绍 前端日志分析是通过搜集访客访问网站的行为数据&#xff0c;然后在这些用户日志数据的基础上通过定量和定性分析&#xff0c;来改善用户的浏览体验及网站性能&#xff0c;最终提升商业回报的过程&#xff0c;通常&#xff0c;前端日志分析遵循以下步骤…

zuul转发的一些常见异常

为什么80%的码农都做不了架构师&#xff1f;>>> ##序 使用zuul作为api网关的话&#xff0c;经常会碰见一些异常&#xff0c;这里小结一下。 ##ZuulException 这个是最外层的异常 public class ZuulException extends Exception {public int nStatusCode;public Str…

Xamarin效果第八篇之视频监控

还记得全年帮助一个朋友通过技术手段写了一个PC端的监控软件,这不再次想起此事,准备基于Xamarin再来实现一个移动端的监控;毕竟直接手机上打开还是比较方便的;最终实现的效果:1、启动页动画,原来直接贴图片;这次尝试使用Lottie来玩玩,直接贴参考连接https://www.codesitory.com…

前端实现连连看小游戏(1)

博主玩了这么久的连连看&#xff0c;居然是第一次发现&#xff0c;连连看最多只能有2个转弯。orz… 在网上搜索连连看的连线算法判断&#xff0c;并没有找到很全面的&#xff0c;经过自己摸索之后&#xff0c;做了一些小动画&#xff0c;希望大家可以看一遍都懂啦&#xff5e;&…

在 Visual Studio 2010 中创建 ASP.Net Web Service

第一步&#xff1a;创建一个“ASP.Net Empty Web Application”项目 第二步&#xff1a;在项目中添加“Web Service”新项目 第一步之后&#xff0c;Visual Studio 2010会创建一个仅含一个站点配制文件&#xff08;Web.config&#xff09;的空站点&#xff0c;其余的什么也没有…

C#中缓存的使用

简介缓存是指可以进行高速数据交换的存储器&#xff0c;它先于内存与CPU交换数据&#xff0c;因此速率很快。由于CPU从内存中读取数据的速度比从磁盘读取快几个数量级&#xff0c;并且存在内存中&#xff0c;减小了数据库访问的压力&#xff0c; 所以缓存几乎每个项目都会用到。…

Windows Phone 8开发环境搭建介绍

1. 如果是Windows 8系统中安装VS2012&#xff0c;可以直接安装&#xff1a;   Windows Phone SDK 8.0 是一个功能齐全的开发环境&#xff0c;可用于构建 Windows Phone 8.0 和 Windows Phone 7.5 的应用和游戏。 Windows Phone SDK 将提供一个适用于 Windows Phone 的独立 Vi…

Tushare数据的绘图操作

1.在代码里调试学习实在费劲&#xff0c;可以把数据取到df里&#xff0c;在交互界面里慢慢调试 2.柱状图 绘制柱状图&#xff0c;默认情况下乱&#xff0c;数据太密了 改用曲线图

python远程执行shell 防止注入脚本_解决 window 上python远程执行shell paramiko 下令 Permission denied...

1. 若是程序是在 Linux远程执行 , 那么遇到某些下令是不需要 再输入密码的但若是 python 是在内陆 , 用 paramiko包 远程ssh登录执行下令 , 就会遇到需要输入密码2.解决办法 , 在windows上面 ssh-keygen -t rsa -C “abby192.168.1.100” , 公钥的作用域是远程 IP用户名 为’…

MT3608 高效率1.2MHz2A升压转换器和MT3608L 高效率1.2MHz 2.5A升压转换器 MT3608L和MT3608的区别

MT3608是一个恒定的频率&#xff0c;6引脚SOT23电流模式升压转换器的小&#xff0c;低功耗应用的目的。该MT3608开关在1.2MHz&#xff0c;并允许微小的&#xff0c;低成本的电容器和电感器使用2毫米或更小的高度内部软启动浪涌电流的结果&#xff0c;并延长电池寿命。 …

CityEngine 2012与ArcGIS 10.2破解心得

安装及破解步骤&#xff1a; 1.卸载机子上原有的ArcGIS的License以及Desktop。 2.安装及破解CityEngine。&#xff08;安装包及注册码下载见点击打开链接&#xff09; 3.安装ArcGIS Desktop即可&#xff0c;不需要安装Lisence。 4.如果第三步结束后ArcGIS打不开&#xff0c…

JsonRequestBehavior.AllowGet 方便浏览器调试

[HttpGet]public ActionResult getCoversationList(int CustomerId){// 获取用户相关的聊天数据&#xff0c;包括个人&#xff0c;群&#xff0c;系统(可以单独获取)return Json(new { result true, info "", msg "操作成功" }, JsonRequestBehavior.Al…