日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

sendkeys安装包_利用Windows命令行解压zip压缩文件(不借助第三方软件)

發(fā)布時(shí)間:2023/12/10 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sendkeys安装包_利用Windows命令行解压zip压缩文件(不借助第三方软件) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

利用Windows命令行解壓zip壓縮文件(不借助第三方軟件)

發(fā)布時(shí)間:2019-05-14 15:33,

瀏覽次數(shù):4280

, 標(biāo)簽:

Windows

zip

首先說明一下本文的需求:利用Windows自帶的API、DLL或命令行參數(shù)等任何手段,解壓一個(gè)標(biāo)準(zhǔn)的zip壓縮文件,并且不借助任何第三方程序。

一、前言——徒勞的探索

為什么會(huì)提出這種需求呢?因?yàn)槲医谠诰幊讨?#xff0c;需要在程序運(yùn)行時(shí)解壓一個(gè)zip文件,然后使用解壓出來的文件。之所以要強(qiáng)調(diào)不借助第三方軟件,是因?yàn)槌绦虬l(fā)布到客戶電腦后,不能指望(或要求)客戶電腦里必須有解壓縮軟件,因此利用Windows自帶的解壓縮功能是最保險(xiǎn)的一個(gè)辦法。我本來以為這是一個(gè)非常簡(jiǎn)單的需求,因?yàn)槲以谑褂眯卵b的Windows時(shí),文件管理器(Explorer.exe)都能直接提取zip文檔,因此我認(rèn)為只要找到文件管理器里使用的解壓方式或是命令行參數(shù),直接應(yīng)用到我的程序里就萬事大吉了。

然而,事情并沒有我想的那么簡(jiǎn)單。我搜遍了百度谷歌,各種中文英文論壇,網(wǎng)友們給出的方向無非兩條路。第一條路,Windows自帶的zip解壓功能位于zipfldr.dll中,只要弄清楚怎么利用這個(gè)dll文件就行了。然而這個(gè)dll并沒有提供公開的接口或命令行參數(shù),唯一提供的還有點(diǎn)用的接口RouteTheCall只能顯示壓縮文件,并不能解壓文件。關(guān)于為什么這個(gè)dll不對(duì)外提供服務(wù),網(wǎng)上也是眾說紛紜,有的說是這個(gè)dll文件功能還有缺陷,所以微軟不想公開參數(shù);也有的說因?yàn)楝F(xiàn)在解壓縮zip文件的第三方軟件、代碼太多了,微軟沒必要再單獨(dú)提供一個(gè)接口了等云云。真實(shí)的原因我們不去考證,但是總結(jié)起來就是一句話,這條路行不通。第二條路,包括在Microsoft官方論壇上,有很多人說直接安個(gè)7-zip或者Winrar就能用命令行解壓了?;蛘哂腥藳]說的這么直白,他們說你用個(gè)開源且免費(fèi)的zlib(或其他開源代碼),然后就能很容易解壓zip軟件了。甚至更有很多自以為大師的小白說,打開cmd,輸入如下參數(shù),就能解壓了:unzip.exe

mydata.zip –XXXXXX(或是winrar.exe –x

…….)。這些方式確實(shí)能解壓,但是卻與我的需求背道而馳,我的需求是不能借助任何第三方的程序便實(shí)現(xiàn)zip文檔的解壓。走這條路的一部分人也算實(shí)在,明確說這是利用第三方程序?qū)崿F(xiàn)的,不利用第三方程序?qū)崿F(xiàn)不了,另一部分“大師”級(jí)小白卻信誓旦旦地說,這就是Windows自帶的解壓(難道僅僅因?yàn)槭敲钜虻絚md里就算是Windows自帶的解壓方式了?)。除了上述兩條基本路線,還有一些比較冷門的說法,比如有人說Windows自帶的解壓程序是expand.exe,用這個(gè)可以解壓zip。這個(gè)程序其實(shí)只能解壓.cab文檔,之所以有人說這個(gè)能解壓zip是因?yàn)樗麄儼岩粋€(gè)文件的擴(kuò)展名從.cab改成了.zip,然后用expand解壓,這樣當(dāng)然能解壓了。如果是一個(gè)標(biāo)準(zhǔn)的zip,用expand是無論如何也解壓不了的(即使把文件擴(kuò)展名改成.cab)??傊?#xff0c;經(jīng)過數(shù)日的搜索與求助,結(jié)論是沒有任何一種方法可以不借助第三方程序解壓標(biāo)準(zhǔn)的zip。

二、進(jìn)階——思路的轉(zhuǎn)變

既然網(wǎng)上沒有答案,那就自己解決,就像我當(dāng)年研究0xc000007b問題時(shí)一樣(詳見《運(yùn)行游戲時(shí)出現(xiàn)0xc000007b錯(cuò)誤的解決方法

》),網(wǎng)上到處都是提問的,但是沒有一個(gè)回答是有效的。這次也是,網(wǎng)上回答雖然多,但是沒有能完全滿足我的需求的。首先需要梳理一下我的思路。我原來計(jì)劃的思路是:

1、得到一個(gè)zip壓縮文件;2、用Windows自帶的程序(或命令行等)解壓這個(gè)zip文件;3、使用解壓出來的文件(包括運(yùn)行、復(fù)制、移動(dòng)、重命名等)

在這個(gè)思路下,第2步就卡住了,后續(xù)自然也沒有后續(xù)了。但是仔細(xì)回憶一下,我當(dāng)時(shí)產(chǎn)生這個(gè)需求的時(shí)候?yàn)槭裁从X得這個(gè)需求應(yīng)該很簡(jiǎn)單呢?因?yàn)槲以谑褂迷鎃indows的時(shí)候,在文件管理器里只要雙擊就可以打開zip文檔,并且在文件管理器里可以瀏覽壓縮包里的所有文件,然后只要在要運(yùn)行的程序上雙擊,就可以自動(dòng)運(yùn)行那個(gè)文件。整個(gè)過程就像打開一個(gè)普通文件夾,然后雙擊我要運(yùn)行的程序一樣那樣自然,幾乎感覺不到這是個(gè)壓縮文檔,中間還要有解壓過程。那我的程序能不能也用這個(gè)思路解決呢?比如像這樣:

1、得到一個(gè)zip壓縮文件;2、打開這個(gè)zip壓縮文檔;3、運(yùn)行我要運(yùn)行的文件

在新思路的指引下我開始了我的嘗試,然后我意外的發(fā)現(xiàn),這個(gè)方式居然成功了,我完全不去考慮到底要怎么解壓,我就把這個(gè)zip文檔當(dāng)成一個(gè)普通的文件夾在文件管理器中打開,然后運(yùn)行我要運(yùn)行的程序。當(dāng)我運(yùn)行這個(gè)程序時(shí),Windows自己在后臺(tái)便幫我把文件解壓好了,程序運(yùn)行起來就像已經(jīng)解壓好后再雙擊運(yùn)行一樣。

三、方法——代碼的實(shí)現(xiàn)

下面我把實(shí)現(xiàn)的方法通過VB.NET代碼的形式展現(xiàn)出來,大家可以根據(jù)上面的思路結(jié)合代碼自行應(yīng)用到其他語言上,或者直接在cmd命令行里運(yùn)行也行。

第1步,首先找到一個(gè)示例的標(biāo)準(zhǔn)zip文檔,里面有exe程序,也有txt文檔,這里以我的DirectX修復(fù)工具在線修復(fù)版

為例,如圖1:

圖1. 示例zip文檔及文檔內(nèi)文件

從上面的圖標(biāo)可以看出來,我的系統(tǒng)里沒裝任何第三方解壓縮軟件,只能通過Windows Explorer打開。

第2步,新建一個(gè)空程序,主窗體上畫2個(gè)Button,然后打入代碼(如圖2)。Button1中的代碼是用來打開非exe文件的,Button2中的代碼是用來打開exe文件的。

圖2. 示例代碼 Public Class Form1 Private Sub Button1_Click(sender As System.Object,

e As System.EventArgs) Handles Button1.Click '打開一個(gè)zip壓縮文件中的非exe文件 Dim appID As

Integer appID = Shell("explorer

""C:\Users\zhangyue\Desktop\DirectXRepair_3.8_Online.zip\DirectXRepair_3.8_Online\使用說明.txt""",

AppWinStyle.NormalFocus) 'appID = Shell("explorer

""C:\Users\zhangyue\Desktop\DirectXRepair_3.8_Online.zip\DirectXRepair_3.8_Online\Data\A\xinput1_1.dll""",

AppWinStyle.NormalFocus) End Sub Private Sub Button2_Click(sender As

System.Object, e As System.EventArgs) Handles Button2.Click '打開一個(gè)zip壓縮文件中的exe文件

Dim appID As Integer appID = Shell("explorer

""C:\Users\zhangyue\Desktop\DirectXRepair_3.8_Online.zip\DirectXRepair_3.8_Online\DirectX

Repair.exe""", AppWinStyle.NormalFocus) Threading.Thread.Sleep(1000)

'需要一定的延遲,確保Explorer彈出對(duì)話框后再發(fā)送字母U My.Computer.Keyboard.SendKeys("U") End Sub End

Class

第3步,單擊Button1,可以看到使用說明.txt就被打開了,沒有一絲延遲,完全感受不到壓縮文檔的存在,就像文檔已經(jīng)解壓好一樣,直接打開(如圖3)。Button1中的代碼可以推廣到打開所有的非exe文件上。

圖3. 直接打開(解壓)zip文檔中的txt文件

如果我們需要打開的是exe文件,假如也用Button1中的代碼,只是文件名換成XXX.exe的話,文件管理器會(huì)彈出一個(gè)對(duì)話框,如圖4。

圖4. Explorer.exe詢問用戶希望如何打開exe文件

這個(gè)提示的原因是因?yàn)?#xff0c;通常exe運(yùn)行時(shí),需要調(diào)用其文件夾中的dll文件或其他配置文件,方能正常運(yùn)行,所以Windows會(huì)詢問用戶是否需要全部解壓這個(gè)zip文檔,還是只運(yùn)行你選定的exe文件。由于DirectX

Repair.exe不需要調(diào)用任何dll文件,所以上圖中的對(duì)話框應(yīng)該選擇第二個(gè)按鈕“運(yùn)行”。關(guān)于這個(gè)選擇,我們也可以自動(dòng)化完成,通過添加2行代碼(如圖5),即可實(shí)現(xiàn)自動(dòng)點(diǎn)擊按鈕并正常運(yùn)行程序。之所以發(fā)送字母U,是因?yàn)槿鐖D4中,“運(yùn)行”按鈕的快捷鍵為U。

圖5. 新增延遲代碼和按鍵代碼 Threading.Thread.Sleep(1000) '需要一定的延遲,確保Explorer彈出對(duì)話框后再發(fā)送字母U

My.Computer.Keyboard.SendKeys("U")

第4步,單擊Button2,可以看到DirectX修復(fù)工具主界面就被打開了。雖然代碼上會(huì)有一點(diǎn)點(diǎn)延時(shí),但是畢竟還是自動(dòng)化操作,還算可以接受。如圖6。

圖6.?直接打開(解壓)zip文檔中的exe文件

代碼中的延時(shí)代碼非常重要,如果沒有延時(shí),文件管理器還沒彈出這個(gè)詢問框時(shí),可能程序就把按鍵發(fā)過去了,這樣就會(huì)造成無法實(shí)現(xiàn)自動(dòng)啟動(dòng)。關(guān)于具體延時(shí)需要多少毫秒,這個(gè)大家可以自行設(shè)置。

四、提高——疑問的解答

說到這大家可能會(huì)有幾個(gè)疑問,我來一一解答。

問題1,有的時(shí)候我不只需要運(yùn)行壓縮包里的文件,我需要復(fù)制、重命名或是提供命令參數(shù)運(yùn)行等操作,這個(gè)怎么實(shí)現(xiàn)?以剛才第4步打開的DirectX

Repair.exe為例,一旦這個(gè)文件運(yùn)行起來了,那么這個(gè)文件其實(shí)就已經(jīng)被解壓了存在于你的電腦上了,只要到系統(tǒng)文件夾的Temp文件夾里找到解壓出來的exe文件(如圖7),那么你想對(duì)它做任何事都隨意了(圖中示例路徑為:C:\Users\zhangyue\AppData\Local\Temp\Temp1_DirectXRepair_3.8_Online.zip\DirectXRepair_3.8_Online\DirectX

Repair.exe)。

圖7. 可在系統(tǒng)Temp文件夾中找到已經(jīng)解壓出來的exe文件

問題2,我的exe程序還需要zip文檔里dll文件等支持,怎們辦?這時(shí)在運(yùn)行你的程序之前,先按照之前的第3步,把dll文件打開,然后另存到你需要的目錄下,將來運(yùn)行exe時(shí),到系統(tǒng)Temp文件夾中把exe也拷貝到你需要的目錄下,這樣就可以運(yùn)行了。關(guān)于如何打開dll文件,我再給個(gè)提示,先到注冊(cè)表里,把dll文件的默認(rèn)打開方式設(shè)置為記事本(如圖8),當(dāng)按照第3步打開時(shí),打開的就是一個(gè)記事本,只要把這個(gè)記事本保存并重命名為dll文件,即相當(dāng)于對(duì)這個(gè)dll文件進(jìn)行了解壓。讓dll文件通過記事本打開的注冊(cè)表具體位置為:Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.dll\UserChoice\Progid,值為:Applications\NOTEPAD.EXE

圖8. 在注冊(cè)表中設(shè)置默認(rèn)通過記事本打開dll文件

問題3,我想后臺(tái)操作,怎么辦?這點(diǎn)我還沒有實(shí)踐,不過思路已經(jīng)有了,就是首先后臺(tái)通過explorer打開一個(gè)zip壓縮文檔,然后利用Windows

API函數(shù),把這個(gè)explorer中的文件默默拷貝出來,然后再關(guān)掉這個(gè)后臺(tái)explorer,即相當(dāng)于在后臺(tái)把這個(gè)zip文檔解壓到了指定的文件夾。

五、結(jié)語——艱難的開端

關(guān)于我文中提到的方法,我毫不掩飾的說,并不完美,和我們的理想還有一定的差距。但是,這個(gè)方法是目前能滿足我的需求的唯一方法。第三方軟件固然方便,但是并不滿足我的需求;zipfldr.dll也許可以實(shí)現(xiàn)我的需求,但是目前我(包括大家)并沒有找到解決方法。萬事開頭難,從無到有是最困難的,雖然目前的方法不甚完美,但畢竟解決了有無問題,可以先用著,未來再不斷研究新方法,改進(jìn)實(shí)現(xiàn)的方式。就好比10年前我研究0xc000007b問題時(shí),我最開始給大家提出的解決方案是安裝DirectX9.0。雖然安裝DirectX9.0不是100%有效,但是最起碼解決了0xc000007b問題解決方案有無的問題,給大家指明了一個(gè)方向。后續(xù)針對(duì)0xc000007b問題發(fā)布的

DirectX修復(fù)工具 ,再到后來的

DirectX修復(fù)工具增強(qiáng)版

,可以說已經(jīng)可以解決現(xiàn)在市面上95%的問題了,已經(jīng)接近完美了。

關(guān)于用Windows自帶程序(或命令)解壓zip文檔的方案,我相信未來也可以變得更加高效、更加完美。如果各位對(duì)我的方案有任何意見或者建議,一定要及時(shí)告訴我,希望我們大家可以共同提高。

總結(jié)

以上是生活随笔為你收集整理的sendkeys安装包_利用Windows命令行解压zip压缩文件(不借助第三方软件)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。