WebPenguin のすべての投稿

UWSCでTaskkill

// Close操作の例
ID = GETID(“Chrome”)
IFB ID <> -1 Then // Chromeが表示されている時
CTRLWIN(GETID(“Chrome”),CLOSE)
ENDIF

// taskkillですべてのプロセス指定(子プロセスも含む必要があるときは /T も指定)
ID = GETID(“Chrome”)
IFB ID <> -1 Then // Chromeが表示されている時
DosCmd(“taskkill /F /IM <#DBL>CHROME.EXE<#DBL>”,TRUE,FALSE)
ENDIF

SLEEP(1)

ID = GETID(“Edge”)
IFB ID <> -1 Then // Edgeが表示されている時
DosCmd(“taskkill /F /IM <#DBL>msedge.EXE<#DBL> /T”,TRUE,FALSE)
ENDIF

EXCEL名前定義削除

エクセルで、シートをコピーしたりして利用する場合に、名前が定義されていると重複メッセージが出ることがある

名前定義を削除、変更したいときは、数式の名前の管理か、CTRL+F3キーで管理画面を呼び出す

UWSCを再起動

スケジュールで実行しているスクリプトを修正したら、記述ミスでエラーメッセージが表示されて以降のスケジュールも停止した。

スケジュール設定で、別プロセスで実行にチェックを入れておけば、エラーメッセージが出たスクリプトは、そのままで次のスケジュールが実行できる

エラーメッセージを解除するために、UWSCを再起動する

DosCmd(“uwsc_restart1.bat”) // 再起動batを実行

uwsc_restart1.batは、
@echo off
start “” “C:\ProgramData\tools\uwsc_restart2.bat”

uwsc_restart2.batは
@echo off
ping localhost -n 3 > nul
taskkill /im UWSC.exe /F /T

ping localhost -n 5 > nul
start “” C:\ProgramData\tools\uwsc.exe
exit

※UWSCの特徴として、UWSCスクリプトが終了(本体を終了も同様)させると、実行中のものも終わってしまうことがある

uwsc_restart1.batのみで、uwsc_restart2.batの内容を実行すると、taskkill 以降の処理は実行されずに、batファイルが終わってしまう

そこで、startで別にbatファイルを実行すると、uwsc_restart1.batが終わっても、uwsc_restart2.batは独立して実行されるので、うまくいく

※それぞれのスクリプトは別プロセスで実行すること

この様なBATファイルを使わなくても、UWSCには、POFF( コマンド )という便利な機能があるが、別プロセスで実行しても、該当プロセス以外は対応できない。

同一プロセスだとエラーメッセージにOKをクリックしないと停止したままなので、上記のBATファイルでの処理が必要

// UWSC再起動
POFF(P_UWSC_REEXEC)
// UWSC再起動 スクリプト再実行
POFF(P_UWSC_REEXEC,TRUE)

SOUNDで音を鳴らす時の注意

SOUND(“BEEP”)やSOUND(“音ファイル名.wav”),SOUND(“音ファイル名.mp3”)でuwscは音を鳴らせるが、デフォルトは処理終了を待たないFalseになっている

その為、次の処理でMSGBOXの様に待機コマンドが無いと、再生前にUWSC自体が終了してしまい、再生が止まるので注意

ほとんど場合、TRUE指定が必要

MSGBOXで、OKをクリックするまで、再生が続き、OKをクリックするとUWSCが終了するので、再生が止まることが確認できる例

fileName = “アラーム.wav”
SOUND(fileName)

MSGBOX(“OK”)

IISでActivePerl を利用したCGI

IISでActivePerl を利用したCGI掲示板を動作させる

ActivePerl-5.14
IIS8.5
Windows Server 2012 R2

IISマネージャでサイトを選択し、「ハンドラマッピング」を開き、「スクリプトマップの追加」を選択
以下の項目を入力する
要求パス *.cgi
実行可能ファイル参照して選択 C:\Perl\bin\perlis.dll
名前 Perl(任意)
IISを再起動する

一般に表示されている情報では、perl.exeをマッピングするが、それでは動作しなくて、perlis.dllを指定する必要があった

また、CGI表示の際にContent-type: text/htmlが上部に表示される問題は、CGIの修正で回避できた

以下の行が記載されている場所へ1行追記
print “Content-Type: text/html; charset=utf-8\n\n”;

追記した例
print “HTTP/1.1 200 OK\n”;
print “Content-Type: text/html; charset=utf-8\n\n”;

※上記をコピーすると、”が全角になるので、半角に修正が必要

ショートカットキーで操作

ショートカットキーを登録して操作できるアプリで有用

例 タスクトレイ格納を通常表示に戻して、キー登録したアプリ終了のショートカットキーを操作

ID = GETID(“Tablacus Explorer”)
IFB ID <> -1 Then
CTRLWIN(id, NORMAL)
ENDIF

ACW(GETID(“Tablacus Explorer”))

// 操作中フォルダでタイトルが変化する為か、ID指定で動作しない場合があるので、アクティブにした後で、ID0指定でキーを送る
SCKEY(0, VK_CTRL,VK_ALT,E) // ALT+CTRL+Eで終了

// SCKEY(0,VK_ALT,VK_F4) // ALT+F4キー操作で強制終了

状態が確認出来るまで繰り返す

<条件>

アプリケーションにメニュー画面が通常とコンパクトの表示があり、起動時にコンパクト設定が無い為、スタートアップでコンパクトボタンをクリックする

メニュー画面が表示されても、完全に起動するまで、操作できない

コンパクト表示に出来るまで、繰り返す

// メインメニュー表示待ち
While GETID(“メインメニュー (フル表示)”) = -1
SLEEP(1)
WEnd

// 画像ボタンの為、アドレス指定でコンパクトクリック
// アドレスは記録モードで操作して、調べる
ACW(GETID(“メインメニュー (フル表示)”)
BTN(LEFT,CLICK,800,150,0)

// 実際には、操作可能になるタイミングが不定でSLEEPを入れて繰り返しが必要

// コンパクト表示するまで繰り返し タイトルの違いで識別
// コンパクト表示では、”メインメニュー”にタイトルが変化する
While STATUS( GETID(“メインメニュー”), ST_TITLE ) <> “メインメニュー”
ACW”メインメニュー (フル表示)”)
BTN(LEFT,CLICK,800,150,0)
SLEEP(5)
WEnd

空白を含むパスを記述

<#DBL>記述するとダブルクォーテーションに置き換えられる

ID = GETID(“スライド”)
IFB ID <> -1 Then
DosCmd(“taskkill /F /IM <#DBL>POWERPNT.EXE<#DBL> /T”,TRUE,FALSE)
ENDIF

APP = “C:\Program Files\FastCopy\fcp.exe /cmd=sync /acl=FALSE /force_close /error_stop=FALSE /skip_empty_dir=FALSE /Exclude=<#DBL>Thumbs.db;desktop.ini;<#DBL>  <#DBL>” + “パスを記述” + “\*.ppsx<#DBL> /to=<#DBL>” + “パスを記述” + “<#DBL>”

DosCmd(APP,FALSE,FALSE) // 待つ、プロンプト非表示