一款 Windows 軟件快捷助手

?WPF 開發的 Windows ?軟件快捷助手

Windows ?軟件快捷助手

作者:WPFDevelopersOrg - 驚鏵

原文鏈接:https://github.com/WPFDevelopersOrg/SoftwareHelper

  • 框架使用.NET40

  • Visual Studio 2019;

  • 項目使用 MIT 開源許可協議;

  • 項目使用 MVVM 模式來實現詳細學習和理解 WPF

  • 新增功能:

    • 通過托盤設置是否開機啟動。

    • 增加外部文件可拖放入到應用。

  • 項目中技術使用到
    WindowsAPIStyleCustomControlJson 序列化和反序列化換膚 Dark|Light動畫Hook 按鍵與鼠標顏色拾取截圖工具DPI縮放開機啟動NLog轉換器禁止程序多開并喚醒之前程序等;

  • 歡迎下載項目進行魔改;

  • 更多效果可以通過GitHub[1]|碼云[2]下載源碼;

  • 需注意程序不能以管理員身份運行,因為管理員身份運行Drop操作無效。

1)要允許控件Drop操作,首先必須設置控件屬性AllowDrop="True",這樣控件才能產生DragOver/DragEnter/Drop等相關事件代碼如下:

<Canvas?Background="Transparent"?x:Name="DragCanvas"AllowDrop="True"?DragOver="DragCanvas_DragOver"Drop="DragCanvas_Drop"Visibility="Collapsed"><StackPanel?Orientation="Vertical"?Name="DragStackPanel"RenderTransformOrigin=".5,.5"Opacity=".5"><StackPanel.RenderTransform><ScaleTransform?x:Name="DragScaleTransform"?ScaleX="1"?ScaleY="1"/></StackPanel.RenderTransform><Image?x:Name="DragImage"?Stretch="Uniform"/><TextBlock?Name="DragTextBlock"MaxWidth="70"?TextWrapping="Wrap"VerticalAlignment="Center"Block.TextAlignment="Center"?HorizontalAlignment="Center"TextTrimming="CharacterEllipsis"MaxHeight="40"Foreground="{DynamicResource?NormalWhiteBrush}"/></StackPanel></Canvas>

2) 后臺實現拖拽代碼如下:

private?void?DragCanvas_DragOver(object?sender,?DragEventArgs?e){try{if?(e.Data.GetDataPresent(DataFormats.FileDrop)){var?msg?=?((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();filePath?=?msg;DragTextBlock.Text?=?System.IO.Path.GetFileName(filePath);var?icon?=?(BitmapSource)Common.GetIcon(filePath);fileIcon?=?icon;DragImage.Source?=?fileIcon;var?point?=?e.GetPosition(this);var?x?=?point.X?-?DragStackPanel.ActualWidth?/?2;var?y?=?point.Y?-?DragStackPanel.ActualHeight?/?2;Canvas.SetLeft(DragStackPanel,?x);Canvas.SetTop(DragStackPanel,?y);}}catch?(Exception?ex){Log.Error("DragCanvas_DragOver:"?+?ex.Message);}}private?void?embedDeasktopView_DragEnter(object?sender,?DragEventArgs?e){AppSwitchListEmbedded.IsHitTestVisible?=?false;AppSwitchList.IsHitTestVisible?=?false;var?doubleXAnimation?=?new?DoubleAnimation{From?=?0,To?=?1,Duration?=?new?Duration(TimeSpan.FromSeconds(0)),};DragScaleTransform.BeginAnimation(ScaleTransform.ScaleXProperty,doubleXAnimation);var?doubleYAnimation?=?new?DoubleAnimation{From?=?0,To?=?1,Duration?=?new?Duration(TimeSpan.FromSeconds(0)),};DragScaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty,?doubleXAnimation);DragCanvas.Visibility?=?Visibility.Visible;}private?void?embedDeasktopView_DragLeave(object?sender,?DragEventArgs?e){DragInitial();}void?DisposeDrag(){var?storyboard?=?new?Storyboard();var?doubleXAnimation?=?new?DoubleAnimation{From?=?1,To?=?0,Duration?=?new?Duration(TimeSpan.FromSeconds(0.5)),EasingFunction?=?new?BackEase?{?EasingMode?=?EasingMode.EaseIn?},};Storyboard.SetTargetName(doubleXAnimation,?"DragStackPanel");Storyboard.SetTargetProperty(doubleXAnimation,?new?PropertyPath("(StackPanel.RenderTransform).(ScaleTransform.ScaleX)"));var?doubleYAnimation?=?new?DoubleAnimation{From?=?1,To?=?0,Duration?=?new?Duration(TimeSpan.FromSeconds(0.5)),EasingFunction?=?new?BackEase?{?EasingMode?=?EasingMode.EaseIn?},};Storyboard.SetTargetName(doubleYAnimation,?"DragStackPanel");Storyboard.SetTargetProperty(doubleYAnimation,?new?PropertyPath("(StackPanel.RenderTransform).(ScaleTransform.ScaleY)"));storyboard.Children.Add(doubleXAnimation);storyboard.Children.Add(doubleYAnimation);storyboard.Completed?+=?delegate?{DragInitial();var?model?=?new?ApplicationModel();model.ExePath?=?filePath;model.Name?=?DragTextBlock.Text;var?iconPath?=?System.IO.Path.Combine(Common.TemporaryIconFile,?model.Name);iconPath?=?iconPath?+?".png";model.IconPath?=?iconPath;model.IsDrag?=?true;var?firstModel?=?mainVM.ApplicationList.FirstOrDefault(x?=>?x.Name?==?model.Name?&&?x.ExePath?==?model.ExePath);if?(firstModel?!=?null)?return;string?first?=?model.Name.Substring(0,?1);if?(!Common.IsChinese(first)){if?(char.IsUpper(first.ToCharArray()[0]))model.Group?=?first;model.Group?=?model.Name.Substring(0,?1).ToUpper();}else{model.Group?=?Common.GetCharSpellCode(first);}mainVM.ApplicationList.Insert(0,?model);if?(File.Exists(iconPath))return;Common.SaveImage(fileIcon,?iconPath);};storyboard.Begin(DragStackPanel);}void?DragInitial(){try{DragCanvas.Visibility?=?Visibility.Collapsed;AppSwitchListEmbedded.IsHitTestVisible?=?true;AppSwitchList.IsHitTestVisible?=?true;}catch?(Exception?ex){Log.Error("DragInitial:"?+?ex.Message);}}private?void?DragCanvas_Drop(object?sender,?DragEventArgs?e){if?(string.IsNullOrWhiteSpace(filePath)){DragInitial();return;?}DisposeDrag();}

體驗地址1[3]
體驗地址2[4]

參考資料

[1]

GitHub: https://github.com/WPFDevelopersOrg/SoftwareHelper

[2]

碼云: https://gitee.com/WPFDevelopersOrg/SoftwareHelper

[3]

體驗地址1: https://github.com/WPFDevelopersOrg/SoftwareHelper/releases/download/1.0.0.1/SoftwareHelper_Setup1.0.0.1.exe

[4]

體驗地址2: https://gitee.com/WPFDevelopersOrg/SoftwareHelper/releases/download/1.0.0.1/SoftwareHelper_Setup1.0.0.1.exe

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281398.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于8位AD_DA轉換芯片的采樣率問題

關于使用Keil計算程序執行時間 打開Keil程序&#xff0c;進入“啟動/停止調試”界面。在需要暫停的地方設置斷點&#xff08;在該句程序前雙擊&#xff09;。在程序上方有一行工具欄&#xff1a;此工具欄分別代表復位、運行、停止、步進、步越、步出、運行到光標處等。 點擊運…

CYQ.Data 數據框架 V4.0 開源版本發布(源碼提供下載,秋色園V2.5版本標配框架)

說明的說明&#xff1a; 博客園團隊兩次移此文出首頁&#xff0c;說 這篇文章不屬于知識分享型文章&#xff0c;并且有廣告嫌疑。 本文的確屬于分享型文章&#xff0c;而且分享的知識點比其它文章都多很多&#xff0c;看看網友回復“謝謝分享”就知道是分享型文章了。 所謂廣告…

oracle 分組后取每組第一條數據

數據格式 分組取第一條的效果 sql SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, test1.* FROM test1) WHERE rn 1 ;

永大服務器進去顯示字母,永大電梯服務器使用說明

永大電梯服務器使用說明2021-05-25一&#xff0e; 目的&#xff1a;用于工務交車前對MPU和XDR板進行調試。二&#xff0e; 對應作業&#xff1a;1-1對MPU電梯調試接線連接&#xff1a;1).對MPUGB2(A2)版電梯調試時(以及A2前版本)&#xff0c;接線情況如下&#xff1a;連接順序連…

樹莓派Zero 2 W(ubuntu-22.04)通過.NET6和libusb操作USB讀寫

有這個想法的初衷喜歡電子和DIY硬件的朋友對稚暉君應該都不陌生&#xff0c;他定期都會分享一些自己做的好玩的硬件&#xff0c;他之前做了一個ElectronBot桌面機器人我就很感興趣&#xff0c;所以就自己也做了一個。起初我只是自己開發了一個叫電子腦殼的上位機軟件&#xff0…

bzoj4589

fwt 原理并不知道 nim游戲石子異或和0后手贏 那么也就是求a[1]^a[2]^...^a[n]0的方案數 這個和bzoj3992一樣可以dp dp[i][j]表示前i個數異或和為j的方案數 dp[0][0] 1 dp[i][j] dp[i - 1][k] * a[p] p ^ k j a[p] 0 / 1 表示有沒有p這個數 這個東西也不能矩陣快速冪 但是我…

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 85

UnicodeDecodeError: ascii codec cant decode byte 0xe5 in position 85;import sys reload(sys) sys.setdefaultencoding(utf8)

JS設計模式五:職責鏈模式

職責鏈模式簡述 職責連是由多個不同的對象組成的&#xff0c;有發送者跟接收者&#xff0c;分別負責信息的發送跟接收&#xff0c;其中&#xff0c;鏈中第一個對象是 職責連是由多個不同的對象組成的&#xff0c;發送者是發送請求的對象&#xff0c;接收者接收請求并且對其進行…

web框架之Django(一)

Python的WEB框架有Django、Tornado、Flask 等多種&#xff0c;Django相較與其他WEB框架其優勢為&#xff1a;大而全&#xff0c;框架本身集成了ORM、模型綁定、模板引擎、緩存、Session等諸多功能。 基本配置 一、創建django程序 終端命令&#xff1a;django-admin startprojec…

寫一個易于維護使用方便性能可靠的Hybrid框架(一)—— 思路構建

寫一個易于維護使用方便性能可靠的Hybrid框架&#xff08;二&#xff09;—— 插件化 寫一個易于維護使用方便性能可靠的Hybrid框架&#xff08;三&#xff09;—— 配置插件 前言 本來上一篇博文寫完&#xff0c;我就告訴自己&#xff0c;這是最后一篇&#xff0c;之后不再總結…

程序員制作出價值5億外賣神器卻不能取消訂單,你知道嗎?

小編今日給大家帶來RACDisopsable&#xff0c;大家可能有部分人對這個會感覺到很陌生&#xff0c;那么我就用一句話來表達就是他可以幫我們取消訂閱。那么又會有人會對這個產生疑問了&#xff0c;我們什么時候需要用到這個取消訂閱了打個實際的例子來說吧&#xff0c;今天我在餓…

Computer

鏈接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2196https://blog.csdn.net/shuangde800/article/details/9732825#include<iostream> #include<cstdio> #include<algorithm> #include<vector> #include<queue> #include<cmath&…

智慧“昆明”在路上 未來充滿精彩

智慧城市是運用物聯網、云計算、大數據、移動互聯網、空間地理信息集成等新一代信息技術&#xff0c;促進城市規劃、建設、管理和服務智慧化的新理念和新模式。近年來&#xff0c;昆明市全面加快智慧城市建設&#xff0c;力爭通過三年的努力&#xff0c;打造區域信息輻射中心的…

《精讀 Mastering ABP Framework》教程發布

精讀《Mastering ABP Framework》學習總結&#xff0c;掌握軟件開發最佳實踐&#xff0c;構建可維護 .NET 解決方案。從 ABP Framework 框架中學習如何構建現代 WEB 應用程序。掌握 ABP Framework 框架ABP Framework 是一個完整的基礎架構&#xff0c;遵循軟件開發最佳實踐&…

C# 委托知識總結

1.什么是委托&#xff0c;為什么要使用委托 我正在埋頭苦寫程序&#xff0c;突然想喝水&#xff0c;但是又不想自己去掉杯水而打斷自己的思路&#xff0c;于是我就想讓女朋友去給我倒水。她去給我倒水&#xff0c;首先我得讓她知道我想讓她干什么&#xff0c;通知她之后我可以繼…

阿里云大學課程學習有獎征文活動現在開始

2019獨角獸企業重金招聘Python工程師標準>>> "學有所獲&#xff0c;分享為美"--阿里云大學課程學習有獎征文活動開始啦~~ 看課程&#xff0c;寫心得&#xff0c;贏千元大獎&#xff0c;還有機會加入阿里云大學技術作者群&#xff01;想試試自己的技術文筆…

配置網絡測試環境的批處理

引言 有次需要測試 50 臺左右的設備&#xff0c;每個都要連上電腦并搭好測試環境。這種事當然用服務器下發配置最方便&#xff0c;但條件不允許哦&#xff0c;只得手工一臺臺設。 寫了個批處理配置腳本&#xff0c;放到 U 盤上&#xff0c;最好再配上 autorun.inf&#xff0c;嘿…

Android 的系統架構

Android 的系統架構和其它操作系統一樣&#xff0c;采用了分層的架構。android 分為四個層&#xff0c;從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和 linux 核心層。 Android 是以 Linux 為核心的手機操作平臺&#xff0c;作為一款開放式的操作系統&#xf…

記一次 .NET 某制造業 MES 系統崩潰分析

一&#xff1a;背景 1.講故事前段時間有位朋友微信找到我&#xff0c;說他的程序偶爾會出現內存溢出崩潰&#xff0c;讓我幫忙看下是怎么回事&#xff0c;咨詢了下程序是 x86 部署&#xff0c;聽到這個詞其實心里已經有了數&#xff0c;不管怎么樣還是用 windbg 分析一下。二&a…

HTTPS協議開通,Apache服務器CSR簽名申請

登錄您的服務器終端 (SSH)。在命令提示符下&#xff0c;鍵入以下命令&#xff1a;openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr將 yourdomain 替換為您要保護的域名。例如&#xff0c;如果您的域名是 coolexample.com&#xff0c;您就…