aardio 文档

aardio 范例: 临视窗口创建、销毁、激活、全屏等事件

相关范例 | 判断钩子拦截到的消息类型

//临视窗口创建、销毁、激活、全屏等事件
//相关范例: https://www.aardio.com/zh-cn/doc/example/System/Desktop/appBarMsg.html
import win.ui;
/*DSG{{*/
var winform = win.form(text="临视窗口创建、销毁、激活、全屏等事件";right=603;bottom=384)
winform.add(
edit={cls="edit";left=8;top=8;right=594;bottom=372;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;vscroll=1;z=1}
)
/*}}*/

import win.util.shellhook;
var shellhook = win.util.shellhook(winform);

shellhook.onShellHook=function(hshell,hwnd){ 

    //获取线程ID,进程ID
    var tid,pid = win.getThreadProcessId(hwnd);
    if(tid== thread.getId()){
        /*return 如果不想临视本线程在这里退出*/
    }

    //判断钩子拦截到的消息类型
    //https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-registershellhookwindow
    select(hshell ) {
        case 0x1/*_HSHELL_WINDOWCREATED*/ {  
            winform.edit.print( "窗口创建"+hwnd+"进程ID:" + pid + "线程ID:" +tid + '\r\n    标题:' + win.getText(hwnd) )
        }
        case 0x2/*_HSHELL_WINDOWDESTROYED*/{
            winform.edit.print( "窗口销毁"+hwnd+"进程ID:" + pid + "线程ID:" +tid  + '\r\n   标题:' + win.getText(hwnd) )
        }   
        case 0x4/*_HSHELL_WINDOWACTIVATED*/{
            winform.edit.print("窗口激活"+hwnd+"进程ID:" + pid + "线程ID:" +tid  + '\r\n   标题:' + win.getText(hwnd) )
        }
        case 0x35/*_HSHELL_FULLSCREEN_ENTERING*/{
            if(win.getForeground() ==hwnd){
                winform.edit.print("窗口全屏"+hwnd+"进程ID:" + pid + "线程ID:" +tid  + '\r\n   标题:' + win.getText(hwnd) )
            }
        }
        case 0x36/*_HSHELL_FULLSCREEN_ENTERING*/{
            if(win.getForeground() ==hwnd){
                winform.edit.print("窗口退出全屏"+hwnd+"进程ID:" + pid + "线程ID:" +tid  + '\r\n   标题:' + win.getText(hwnd) )
            }
        }  
     }  
}

winform.show();
win.loopMessage();
Markdown 格式