HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0809
流星群タスクのキル(っていうのかな)をしたい6解決


流星群

リンク

2013/8/9(Fri) 10:06:57|NO.56235

公開するようなものでも無いのに質問するのは少し気が引けますがしちゃいます。
自分用に決めた時間(例えば1時間)を設定すると、その間ブラウザ等が開いていると
自動的にタスクを終わらせて、使えないようにしたいのです。
どうか方法ありますかね?



この記事に返信する


KA

リンク

2013/8/9(Fri) 11:09:46|NO.56237

何となく意味が伝わりません。



流星群

リンク

2013/8/9(Fri) 11:51:20|NO.56238

すいません。しっかり書きます。
自作ソフト起動(1時間後に通知する)

ここから1時間ループ
  HSPのエディタを起動する(手動)→何も起こらない
  IEやら火狐やらChromeを付ける→タスクを消す
ここまで1時間ループ

1時間後、自作ソフト通知後終了。



KA

リンク

2013/8/9(Fri) 12:07:06|NO.56239

いや、それは分かるけど、「タスクを消す」と「使えないようにする」は
何を意味するのか良く分からない。

「終了」でもないし、「隠す」こと?



流星群

リンク

2013/8/9(Fri) 12:13:31|NO.56240

ああ、何か説明が微妙だった。今わかりました。
タスクマネージャ基準の
アプリケーションの方のタスクの終了か。
プロセスの終了どちらでも良いということです。
ですが、プロセスの方は余り触りたくないので
アプリケーションの方の終了をしたいということです



FunnyMaker

リンク

2013/8/9(Fri) 13:54:20|NO.56244

プロセスの終了もアプリケーションの終了も結局は同じでは?

下ののコードが参考になるかもしれません。
以前勉強用に作ったやつです。


#uselib "User32.dll" #cfunc WindowFromPoint "WindowFromPoint" int,int #cfunc GetAncestor "GetAncestor" int,int #define GA_PARENT 1 ;親ウィンドウを返す #define GA_ROOT 2 ;親子関係を遡って、直近上位のトップレベルウィンドウを返す #define GA_ROOTOWNER 3 ;親子関係と所有関係を遡って、所有されていないトップレベルウィンドウを返す #func GetWindowThreadProcessId "GetWindowThreadProcessId" int,int #uselib "Kernel32.dll" #func OpenProcess "OpenProcess" int,int,int #define PROCESS_TERMINATE 0x0001 #define PROCESS_CREATE_THREAD 0x0002 #define PROCESS_SET_SESSIONID 0x0004 #define PROCESS_VM_OPERATION 0x0008 #define PROCESS_VM_READ 0x0010 #define PROCESS_VM_WRITE 0x0020 #define PROCESS_CREATE_PROCESS 0x0080 #define PROCESS_SET_QUOTA 0x0100 #define PROCESS_SET_INFORMATION 0x0200 #define PROCESS_QUERY_INFORMATION 0x0400 #define PROCESS_SET_PORT 0x0800 #define PROCESS_SUSPEND_RESUME 0x0800 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000 #define PROCESS_ALL_ACCESS 0x1f0fff #func CloseHandle "CloseHandle" int #func TerminateProcess "TerminateProcess" int,int #define WM_QUIT 0x0012 #include "WindowMessageList.h" #include "SystemCommandList.h" screen 0,300,100,0 repeat num1 = WindowFromPoint(ginfo(0),ginfo(1)) hwnd_target = GetAncestor(num1,GA_ROOTOWNER) redraw 0 color 255,255,255 : boxf color 0,0,0 pos 0,0 mes "ウィンドウハンドル : "+hwnd_target+"" mes "プロセスID : " mes "Ctrl + Alt + 左クリック : 閉じる要求" mes "Ctrl + Alt + 右クリック : キル" redraw 1 getkey num1(0),17;Ctrl getkey num1(1),18;Alt getkey num1(2),1 getkey num1(3),2 num2 = "NoClick" if (num1(0) = 1)&(num1(1) = 1)&(num1(2) = 1)&(num1(3) = 0) : num2 = "Mouse_LeftClick" if (num1(0) = 1)&(num1(1) = 1)&(num1(2) = 0)&(num1(3) = 1) : num2 = "Mouse_RightClick" if num2 = "Mouse_LeftClick" { sendmsg hwnd_target,WM_CLOSE,SC_CLOSE,16 repeat;マウスボタンを放すまで待つ getkey num1(2),1 getkey num1(3),2 if (num1(2) = 0)&(num1(3) = 0) : break await 10 loop } if num2 = "Mouse_RightClick" { GetWindowThreadProcessId hwnd_target,varptr(ID_process_target);プロセスIDを取得 OpenProcess PROCESS_ALL_ACCESS,1,ID_process_target : handle_process_target = stat;オブジェクトのハンドルを掴む TerminateProcess handle_process_target,0 CloseHandle handle_process_target;オブジェクトのハンドルを解放 repeat;マウスボタンを放すまで待つ getkey num1(2),1 getkey num1(3),2 if (num1(2) = 0)&(num1(3) = 0) : break await 10 loop } await 10 loop

終了するには、2つのやり方があります。
一つめは「終了"要求"を送る」で、二つめは「強制終了」です。
ブラウザは、複数タブを開いていると、終了要求の受け取り時に確認ダイアログを出してくることがあり、
素直に終わってはくれないこともあるでしょう。そういうときは、そのダイアログを操作するステップを
踏む必要があり、面倒なります。
後者は有無を言わさず終わらせます。

どちらにせよ、対象のアプリケーションのウィンドウハンドルを取得する処理はこのサンプルの別に用意する必要があります。
方法はありますが、たぶん言うまでもなさそうなので割愛します。

流星群さんは前者を望んでいらっしゃるようなので、プロセスの終了は必要ないかもしれません。



流星群

リンク

2013/8/10(Sat) 15:53:52|NO.56264

>FunnyMakerさん
有難うございます。
ハンドル取得すれば良いのですね。結局WinAPIか…

あ、要求でOKです(多分)
有り難うございました。



ONION software Copyright 1997-2023(c) All rights reserved.