2012-03-27 24 views
4

SendMessage()関数はスクリプトをハングアップさせ、終了することはないのでSendMessageを実行しています(タスクが完了しています)。私はマスタースクリプトからそれを殺す時間の地獄を持っているので、これを回避するにはとにかくありますか?SendMessageがスクリプトのハングを引き起こしています

Stop-job -name offmon 

または

Remove-job -name offmon -force 

はそれを殺すことはありません。それは完了していないので、それはそれを殺すことができないことを報告します。

私はこれを毎日何度も呼び出す必要があります。毎回、これは約30Mのメモリを消費する新しいpowershell.exeを生成します。

注:あなたがそれを実行した場合、コードがあなたのモニターの電源を入れますと、「@を(タブそれを上に見栄えがすることはできません)行の先頭にあることが必要

start-job -Name offmon -ScriptBlock { 
$HWND = -1 
$WM_SYSCOMMAND = 0x0112 
$SC_MONITORPOWER = 0xF170 
$MONITOR_ON = -1 
$MONITOR_OFF = 2 
#Store the C# signature of the SendMessage function. 
$signature = @" 
[DllImport("user32.dll")] 
public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam); 
"@ 
#Add the SendMessage function as a static method of a class 
$SendMessage = Add-Type -MemberDefinition $signature -Name "Win32SendMessage" -Namespace Win32Functions -PassThru 
#Invoke the SendMessage Function 
$SendMessage::SendMessage($HWND, $WM_SYSCOMMAND, $SC_MONITORPOWER, $MONITOR_OFF) 
exit} 

も。これは、私はそれがstart-job causes scripts to hang.MS Supportに関連しているとは思わないので、立ち仕事せずに、単に同じハングこれはWin7Ent/2008R2でさらに

おかげ

編集:。。!誤植

+0

をクラッシュしません、しかし、SendMessageのための署名SendMessage(IntPtr、uint、IntPtr、IntPtr)である必要があります。 – OldFart

+0

私は実際のコマンドが通過するので、モニターは何のエラーもなくオフになりますが、私は間違っていると思います。 – yaodin

+0

あなたは64ビットOSですか?もしそうなら、ここですべて読む:http://stackoverflow.com/questions/9891585/sendmessage-is-causing-script-to-hang –

答えて

3

SendMessageからPostMessageに変更してください。それは私のために働いた。

違いはPostMessageで、非同期であり、応答を待つ必要はありません。

0

Add-Type -Assembly UIAutomationClient 

を追加して使用してください

public static extern IntPtr PostMessage(int hWnd, UInt32 hMsg, Int32 wParam, Int32 lParam); 

または

public static extern IntPtr SendMessage(int hWnd, UInt32 hMsg, Int32 wParam, Int32 lParam); 

そして、これが問題である場合、スクリプトは、もはや私にはわからない

関連する問題