独自のプログラムのエラーとクラッシュを処理します

Automate-Batchツールを使用してAdobe Photoshopでバッチ処理を行っていた場合(自動モードでプログラムからフィルターが適用された非常に多くのグラフィックファイルのバッチ処理)、おそらくこの種のプログラムクラッシュに遭遇しました。





もちろん、これらのエラーが現れるのを待つことができます。これは、1時間の処理後、または数時間後に発生する可能性があり、アラームを設定して夜に目を覚まし(ロボットのように) 、「Photoshopが飛び出しましたか?」 その後、 緊張して再び処理を開始し、すでに処理されたファイルを別のフォルダーにソートします。

要するに、これが問題です! (同様に、他のソフトウェアからのエラーを処理できます)。 解決策?






これらのエラーはどのようにして発生しましたか?

Photoshopフィルターを使用してビデオを処理することにしました。 プラグインを使用してMovをVirtualDubにインポートしました。 ストーリーボードファイル-エクスポート-イメージシーケンスを作成し、ファイル名、ファイルタイプ、桁数、フォルダーを注文しました。 movを膨大な数のbmpファイルにエクスポートし、Photoshopでバッチ処理を開始しました。 その後、処理の結果がVirtualDubを通じて計画され、Deshakerフィルターを使用して完成したaviファイルにエクスポートされ、カメラの揺れがなくなりました。 しかし、Photoshopのクラッシュが始まりました。たとえば、単にPNGファイルにエラーとして保存すると、「ファイル形式モジュールはファイルを解析できないため」(Photoshopはファイル形式モジュールで解析できないというエラーを生成しますか?)

AutoItスクリプト言語を使用してPhotoshopエラーを処理します。 これを行うには、エラーが発生することを期待し、それらに応答する方法を説明し、テストし、既製の自動化されたコンピューターアクションを備えたexeファイルの形式で既製のソリューションを組み立てる忍耐力のあるコーヒーが必要です。

AutoIt Windows Infoと呼ばれるAutoItツールを使用してエラーウィンドウを調べます。 驚いたことに、Adobe Photoshopウィンドウは標準ウィンドウApiウィンドウを使用しませんが、プログラムは問題なくエラーメッセージを表示します。



if WinExists("Adobe Photoshop CS3 Extended","OK") then
WinWait("Adobe Photoshop CS3 Extended","OK")
; 30 OK
sleep(3000)
WinActivate("Adobe Photoshop CS3 Extended","OK")
sleep(3000)
;ControlClick("Adobe Photoshop CS3 Extended","OK","[CLASS:Static; INSTANCE:2]")
;WinClose("Adobe Photoshop CS3 Extended","OK")
sleep(3000)
;msgbox(1,"1","1")
; ,
; , Adobe Photoshop
ProcessClose("Photoshop.exe")
endif


同様に、テキストMicrosoft Visual C ++ Runtime Libraryでエラーを閉じることができます。

if WinExists("Microsoft Visual C++ Runtime Library","") Then
winwait("Microsoft Visual C++ Runtime Library","")
WinActivate("Microsoft Visual C++ Runtime Library","")
winclose("Microsoft Visual C++ Runtime Library","")
;msgbox(0,"First","1")
EndIf

sleep(10000)

if WinExists("Photoshop.exe - Application Error","OK") Then
winwait("Photoshop.exe - Application Error","OK")
WinActivate("Photoshop.exe - Application Error","OK")
controlclick("Photoshop.exe - Application Error","OK","[CLASS:Button; INSTANCE:1]")
EndIf

sleep(10000)

if WinExists("Photoshop.exe - Application Error","OK") Then
WinActivate("Photoshop.exe - Application Error","OK")
winwait("Photoshop.exe - Application Error","OK")
controlclick("Photoshop.exe - Application Error","OK","[CLASS:Button; INSTANCE:1]")
EndIf

sleep(10000)


エラーが処理され、プログラムが閉じます。 もう一度起動する必要があります。 英語版のAdobePhotoshopでバッチ処理を開始するためのホットキーAlt + f(ファイル)-u(aUtomate)-Alt + a(アクション)-処理するプロファイルを選択するには-下矢印キー(「キーボード」-スクリプトを使用)をそれぞれ使用します)、またはホットキーを使用したくない場合-キーボードを上下に使用する、入力するなど...



ShellExecute("C:\Program Files\Adobe\Adobe Photoshop CS3\Photoshop.exe","","C:\Program Files\Adobe\Adobe Photoshop CS3\")
sleep(30000)
; , !
IF WinExists("Adobe Photoshop CS3 Extended","") Then
WinActivate("Adobe Photoshop CS3 Extended","")
Send("!f")
;File
sleep(5000)
Send("u")
;aUtomate
sleep(5000)
Send("b")
;Batch
sleep(5000)
; -
;send("{UP}")
;sleep(10000)
;send("{UP}")
;sleep(10000)
;send("{UP}")
;sleep(10000)
;send("{UP}")
;sleep(1000)
;send("{UP}")
;sleep(10000)
;send("{UP}")
;sleep(10000)
;send("{UP}")
;sleep(10000)
;send("{ENTER}")
;sleep(10000)
;send("{ENTER}")
;sleep(10000)
;Set - - . , __ 2
send("!t")
sleep(10000)
send("{DOWN}")
sleep(10000)
send("{DOWN}")
sleep(10000)
send("{ENTER}")
EndIf


私たちはすでにコンピューターに何を教えましたか? 発生したエラーを閉じ、Photoshopの処理を開始します。 しかし、慎重に検討すると、コンピューターは同じフォルダーで処理を開始し、ファイルが処理されたかどうかを理解しません。以前に処理されたファイルの「二次」処理があり、処理が必要なファイルに進みます。 どうする?

処理したファイルを別の形式、たとえばpng(Deflateアルゴリズムを使用してロスレス圧縮を使用するグラフィック情報を保存するためのラスター形式)で保存します。 保存された* .pngファイルの名前で、元の* .jpegまたは* .bmpファイルを削除します。 ドキュメントとAutoItの例を検討した結果、次のスクリプトが判明しました(* .pngファイルを検索し、その名前でソース* .bmpファイルを消去します)。

#include <file.au3>
#include <array.au3>

Dim $szDrive, $szDir, $szFName, $szExt

sleep(10000)

$flagvixod = 0

; Shows the filenames of all files in the current directory.
$search = FileFindFirstFile("*.png")

; Check if the search was successful
If $search = -1 Then
MsgBox(0, "Error", "No files/directories matched the search pattern")
; - .. png
Exit
EndIf

While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop

$TestPath = _PathSplit(@ScriptDir & "\" & $file, $szDrive, $szDir, $szFName, $szExt)
;3 = name , 4 = extension
; png bmp !
DelMyFile($TestPath[3] & ".bmp")

WEnd

Func DelMyFile($value)
;msgbox (0,"0",$value)
;return $value
If FileExists($value) Then
filedelete($value)
Else
Return $value
endif
EndFunc


「ファイル-名前を付けて保存...」アクションを追加して、PNGを保存するバッチファイルを保存することを忘れないでください。

エラーを見つけるための「ループ処理」、これらすべてを単一のファイルに収集することは残っています。 または、タスクをWindowsタスクスケジューラ(スケジュールされたタスク)に追加します。これは、数分ごとに自動的にチェックされ、コンピューター画面でエラーを確認して決定します-それらを閉じ、プログラムを閉じ、元の未処理ファイルを(保存済みおよび既に処理済みのリストから削除します)、処理のためにPhotoshopを再起動します。 信頼性のために、10〜30秒間のスクリプトの一時停止が追加されます。 エラーが発生した後、コンピューターがキーストロークにまったく正確かつ迅速に応答しないことがあります。

Source: https://habr.com/ru/post/J135290/


All Articles