プロセスの終了もアプリケーションの終了も結局は同じでは?
下ののコードが参考になるかもしれません。
以前勉強用に作ったやつです。
#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つのやり方があります。
一つめは「終了"要求"を送る」で、二つめは「強制終了」です。
ブラウザは、複数タブを開いていると、終了要求の受け取り時に確認ダイアログを出してくることがあり、
素直に終わってはくれないこともあるでしょう。そういうときは、そのダイアログを操作するステップを
踏む必要があり、面倒なります。
後者は有無を言わさず終わらせます。
どちらにせよ、対象のアプリケーションのウィンドウハンドルを取得する処理はこのサンプルの別に用意する必要があります。
方法はありますが、たぶん言うまでもなさそうなので割愛します。
流星群さんは前者を望んでいらっしゃるようなので、プロセスの終了は必要ないかもしれません。