本發(fā)明屬于計(jì)算機(jī)桌面應(yīng)用領(lǐng)域,尤其是需要判斷用戶界面是否停留在指定的應(yīng)用程序上時(shí),快速判斷的方法,提供一種快速判斷用戶界面是否停留在指定的應(yīng)用程序上的方法。
背景技術(shù):
隨著計(jì)算機(jī)和網(wǎng)絡(luò)的飛速發(fā)展,遠(yuǎn)程教育的應(yīng)用越來越廣泛,當(dāng)遠(yuǎn)程教育應(yīng)用在低齡兒童身上時(shí),由于低齡兒童普遍存在注意力不足,容易開小差等情況,造成培訓(xùn)效果打折扣,為此,需要一個(gè)判斷學(xué)生在使用遠(yuǎn)程教育軟件時(shí),快速判斷是否認(rèn)真的技術(shù),以便采取后續(xù)措施。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是針對現(xiàn)有技術(shù)的空白,提供了一種快速判斷用戶界面是否停留在指定的應(yīng)用程序上的方法。
本發(fā)明方法的具體步驟為:
步驟一,獲取屏幕的分辨率,記為CXScreen、CYScreen,再根據(jù)實(shí)際情況,設(shè)置一個(gè)網(wǎng)格距離值Interval,將CXScreen、CYScreen均除以Interval,得到橫向和縱向的循環(huán)判斷的次數(shù),分別記為CXNum、CYNum。
步驟二,初始化一個(gè)計(jì)數(shù)變量UseNum=0,然后根據(jù)CXNum、CYNum,使用一個(gè)二重循環(huán),計(jì)算每次循環(huán)體內(nèi)的需要判斷的點(diǎn)的坐標(biāo)Point(n,m):
Point(n,m)=(n×Interval,m×Interval)0≤n≤CXNum,0≤m≤CYNum
當(dāng)點(diǎn)的坐標(biāo)計(jì)算出來后,調(diào)用Windows提供的API函數(shù),獲取該點(diǎn)所在的應(yīng)用程序的標(biāo)識,然后將該應(yīng)用程序的標(biāo)識與預(yù)想的應(yīng)用程序的標(biāo)識進(jìn)行比較,若相等,則將計(jì)數(shù)變量UseNum=UseNum+1。
步驟三,計(jì)算坐標(biāo)Point(n,m)落在指定的應(yīng)用程序上的比率,若大于閾值U,則認(rèn)為用戶正在使用該應(yīng)用程序。
各步驟的詳細(xì)說明如下:
步驟一中,網(wǎng)格距離值Interval用于決定判斷的網(wǎng)格點(diǎn)之間的距離,一般設(shè)置為10到50像素之間,設(shè)置得小則檢測精準(zhǔn)度越高,設(shè)置得大則檢測速度越快,根據(jù)實(shí)際要求,測試后使用一個(gè)可接受的值。
步驟二中,通過Windows API中的WindowFromPoint獲取指定點(diǎn)所在的窗口句柄,該API的輸入?yún)?shù)是一個(gè)點(diǎn)的坐標(biāo)值,輸出參數(shù)是這個(gè)點(diǎn)所在的窗口句柄,然后使用GetWindowThreadProcessId獲取這個(gè)窗口句柄所在的進(jìn)程ID,將該應(yīng)用程序的進(jìn)程ID與需要判斷的應(yīng)用程序的進(jìn)程ID進(jìn)行比較,從而得到該點(diǎn)是否屬于需要判斷的應(yīng)用程序。
步驟三中,落在指定的應(yīng)用程序上的比率Ratio的計(jì)算公式如下:
計(jì)算得到的Ratio的值域?yàn)閇0,1],一般當(dāng)Ratio處于[0.85,1]時(shí),認(rèn)為學(xué)生正在使用應(yīng)用程序,因?yàn)橛脩羝聊簧弦话氵€有任務(wù)欄等空間是被系統(tǒng)所占用的,這些面積需要排除在外。
本發(fā)明有益效果如下:
本方法的思想是通過Windows系統(tǒng)提供的功能函數(shù),通過簡單的循環(huán)調(diào)用來判斷某些屏幕位置是否屬于指定的應(yīng)用程序,獲取到所有的信息后,根據(jù)是否停留在指定的應(yīng)用程序的點(diǎn)占所有點(diǎn)的比率,判斷用戶是否在使用指定的應(yīng)用程序,主要的創(chuàng)新點(diǎn)是不通過復(fù)雜的窗口層次的判斷方式,僅通過直接的判斷點(diǎn)的方式,加快了計(jì)算速度,減少了干擾因素,使本方法在各種用戶環(huán)境下都能較好的工作。
附圖說明
圖1為本發(fā)明實(shí)施例。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對本發(fā)明做進(jìn)一步說明。
快速判斷用戶界面是否停留在指定的應(yīng)用程序上的方法,具體步驟如下:
步驟一,獲取屏幕的分辨率,記為CXScreen、CYScreen,再根據(jù)實(shí)際情況,設(shè)置一個(gè)網(wǎng)格距離值Interval,將CXScreen、CYScreen均除以Interval,得到橫向和縱向的循環(huán)判斷的次數(shù),分別記為CXNum、CYNum。
步驟二,初始化一個(gè)計(jì)數(shù)變量UseNum=0,然后根據(jù)CXNum、CYNum,使用一個(gè)二重循環(huán),計(jì)算每次循環(huán)體內(nèi)的需要判斷的點(diǎn)的坐標(biāo)Point(n,m):
Point(n,m)=(n×Interval,m×Interval)0≤n≤CXNum,0≤m≤CYNum
當(dāng)點(diǎn)的坐標(biāo)計(jì)算出來后,調(diào)用Windows提供的API函數(shù),獲取該點(diǎn)所在的應(yīng)用程序的標(biāo)識,然后將該應(yīng)用程序的標(biāo)識與預(yù)想的應(yīng)用程序的標(biāo)識進(jìn)行比較,若相等,則將計(jì)數(shù)變量UseNum=UseNum+1。
步驟三,計(jì)算坐標(biāo)Point(n,m)落在指定的應(yīng)用程序上的比率,若大于閾值U,則認(rèn)為用戶正在使用該應(yīng)用程序。
各步驟的詳細(xì)說明如下:
步驟一中,網(wǎng)格距離值Interval用于決定判斷的網(wǎng)格點(diǎn)之間的距離,一般設(shè)置為10到50像素之間,設(shè)置得小則檢測精準(zhǔn)度越高,設(shè)置得大則檢測速度越快,根據(jù)實(shí)際要求,測試后使用一個(gè)可接受的值。
步驟二中,通過Windows API中的WindowFromPoint獲取指定點(diǎn)所在的窗口句柄,該API的輸入?yún)?shù)是一個(gè)點(diǎn)的坐標(biāo)值,輸出參數(shù)是這個(gè)點(diǎn)所在的窗口句柄,然后使用GetWindowThreadProcessId獲取這個(gè)窗口句柄所在的進(jìn)程ID,將該應(yīng)用程序的進(jìn)程ID與需要判斷的應(yīng)用程序的進(jìn)程ID進(jìn)行比較,從而得到該點(diǎn)是否屬于需要判斷的應(yīng)用程序。
步驟三中,落在指定的應(yīng)用程序上的比率Ratio的計(jì)算公式如下:
計(jì)算得到的Ratio的值域?yàn)閇0,1],一般當(dāng)Ratio處于[0.85,1]時(shí),認(rèn)為學(xué)生正在使用應(yīng)用程序,因?yàn)橛脩羝聊簧弦话氵€有任務(wù)欄等空間是被系統(tǒng)所占用的,這些面積需要排除在外。
實(shí)施例:
如圖1所示,用于判斷PC機(jī)是否在使用無限寶(藍(lán)色標(biāo)題欄和邊框的程序)。具體如下:目前屏幕分辨率為1440*900,網(wǎng)格距離值Interval設(shè)為200,則屏幕被分割為縱向5個(gè)點(diǎn),橫向8個(gè)點(diǎn),共40個(gè)點(diǎn)圖上紅線的交叉點(diǎn)即這40個(gè)點(diǎn),其中用藍(lán)色五角星標(biāo)明的點(diǎn)被判斷為屬于無限寶應(yīng)用程序,共計(jì)18個(gè),占比為18/40=45%,小于85%的閾值,所以判定為未在認(rèn)真使用無限寶程序。