μモニター情報の分割ソース(1)
//------------------------------------------------------------------------------ // μモニター情報のサンプル by 科学太郎 //============================================================================== // 新規作成日:2018-09-15 (土) 14:56:00 // 最終更新日:2018-09-15 (土) 16:48:00 //------------------------------------------------------------------------------ #cmpopt varinit 1 #packopt hide 1 #packopt name __FILE__ # #include "User32.as" #include "Kernel32.as" //-------------------------------------- // Win32API関数の呼び出し定義 //-------------------------------------- #uselib "Pdh.dll" #func global PdhEnumObjectItems "PdhEnumObjectItemsA" sptr,sptr,sptr,var,var,var,var,sptr,sptr #func global PdhOpenQuery "PdhOpenQueryA" sptr,sptr,sptr #func global PdhCloseQuery "PdhCloseQuery" sptr #func global PdhAddCounter "PdhAddCounterA" sptr,sptr,sptr,sptr #func global PdhCollectQueryData "PdhCollectQueryData" sptr #func global PdhGetFormattedCounterValue "PdhGetFormattedCounterValue" sptr,sptr,sptr,sptr //-------------------------------------- // 記号定数(API定数) //-------------------------------------- #const global NULL 0 #const global WM_CLOSE $00000010 #const global WM_TIMER $00000113 #const global WM_MOUSEMOVE $00000200 #const global WM_LBUTTONDOWN $00000201 #const global WM_NCLBUTTONDOWN $000000A1 #const global HTCAPTION $00000002 # #const global GWL_EXSTYLE $FFFFFFEC #const global WS_EX_TOOLWINDOW $00000080 # #const global SWP_NOSIZE $00000001 #const global SWP_NOMOVE $00000002 #const global SWP_NOZORDER $00000004 #const global SWP_NOACTIVATE $00000010 #const global SWP_FRAMECHANGED $00000020 #const global SWP_SHOWWINDOW $00000040 #const global SWP_HIDEWINDOW $00000080 #const global SPI_GETWORKAREA $00000030 # #const global ERROR_SUCCESS $00000000 #const global PDH_FMT_LONG $00000100 #const global PDH_FMT_DOUBLE $00000200 #const global PERF_DETAIL_WIZARD $00000190 //-------------------------------------- // 列挙定数(MEMORYSTATUSEX) //-------------------------------------- #enum msex_dwLength=0 ;構造体のサイズ #enum msex_dwMemoryLoad ;メモリの使用率(%) #enum msex_ullTotalPhysLo ;物理メモリの搭載容量 #enum msex_ullTotalPhysHi ; #enum msex_ullAvailPhysLo ;物理メモリの空き容量 #enum msex_ullAvailPhysHi ; #enum msex_ullTotalPageFileLo ;ページングの搭載容量 #enum msex_ullTotalPageFileHi ; #enum msex_ullAvailPageFileLo ;ページングの空き容量 #enum msex_ullAvailPageFileHi ; #enum msex_ullTotalVirtualLo ;仮想メモリの搭載容量 #enum msex_ullTotalVirtualHi ; #enum msex_ullAvailVirtualLo ;仮想メモリの空き容量 #enum msex_ullAvailVirtualHi ; #enum msex_ullAvailExtendedVirtualLo ;仮想メモリの拡張空き容量 #enum msex_ullAvailExtendedVirtualHi ; #enum DIM_MEMORYSTATUSEX #enum SIZE_MEMORYSTATUSEX=(DIM_MEMORYSTATUSEX*4) //------------------------------------------------------------------------------ //-------------------------------------- // 記号定数(フラグ値) //-------------------------------------- #const FLAG_HDD %000000001 ;HDDの使用率(%) #const FLAG_CPU %000000010 ;CPUの使用率(%) #const FLAG_MEM %000000100 ;物理メモリの使用率(%) #const FLAG_VRM %000001000 ;仮想メモリの使用率(%) #const FLAG_PGF %000010000 ;ページングの使用率(%) #const FLAG_UPB %000100000 ;ネットの送信速度(バイト/秒) #const FLAG_DNB %001000000 ;ネットの受信速度(バイト/秒) #const FLAG_UP8 %010000000 ;ネットの送信速度(ビット/秒) #const FLAG_DN8 %100000000 ;ネットの受信速度(ビット/秒) //-------------------------------------- // 列挙定数(非表示タイプ) //-------------------------------------- #enum HIDE_NULL=0 #enum HIDE_LFTBTM #enum HIDE_BOTTOM #enum HIDE_RHTBTM #enum HIDE_LEFT #enum HIDE_CENTER #enum HIDE_RIGHT #enum HIDE_LFTTOP #enum HIDE_TOP #enum HIDE_RHTTOP //-------------------------------------- // マクロ命令(表示/非表示) //-------------------------------------- #define SetShowWindow SetWindowPos hWnd,NULL,0,0,0,0,(SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_SHOWWINDOW) #define SetHideWindow SetWindowPos hWnd,NULL,0,0,0,0,(SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_HIDEWINDOW) //------------------------------------------------------------------------------ //-------------------------------------- // 記号定数(全体) //-------------------------------------- #const WID_MAIN (0) #const TID_CLOCK (0) #const TMS_CLOCK (100) //-------------------------------------- // マクロ変数(ワークエリア領域) //-------------------------------------- #define cxMonitor rcMonitor(0) #define cyMonitor rcMonitor(1) #define exMonitor rcMonitor(2) #define eyMonitor rcMonitor(3) //-------------------------------------- // マクロ変数(デスクトップ矩形) //-------------------------------------- #define cxDesktop (0) #define cyDesktop (0) #define exDesktop (ginfo_dispX-1) #define eyDesktop (ginfo_dispY-1) //-------------------------------------- // マクロ変数(ウインドウ矩形) //-------------------------------------- #define cxWindow (0) #define cyWindow (0) #define exWindow (ginfo_winX-1) #define eyWindow (ginfo_winY-1) //-------------------------------------- // 記号定数(サイズ) //-------------------------------------- #define FONT_NAME "HG明朝E" #const int FONT_SIZE (14) #const int HALF_SIZE (FONT_SIZE/2) #const int QUAD_SIZE (FONT_SIZE/4+0.5) #const int DESIGN_SW (FLAG_HDD|FLAG_CPU|FLAG_MEM|FLAG_VRM|FLAG_PGF|FLAG_UPB|FLAG_DNB|FLAG_UP8|FLAG_DN8) //-------------------------------------- // メイン部 //-------------------------------------- *Init ;単位 dim SizeUnits,9 SizeUnits(0)=' ','K','M','G','T','P','E','Z','Y' ;曜日 sdim WeekTable,7 WeekTable(0)="日","月","火","水","木","金","土" ;モニター nHDD=99 ;HDDの使用率(%) nCPU=99 ;CPUの使用率(%) nMEM=99 ;物理メモリの使用率(%) nVRM=99 ;仮想メモリの使用率(%) nPGF=99 ;ページングの使用率(%) dbUp=9999.0 ;ネットの送信速度(バイト/秒) dbDn=9999.0 ;ネットの受信速度(バイト/秒) ;文字列 sdim sMonitor,100 ;表示文字列 sdim sMonitorChr,100 ;文字文字列 sdim sMonitorNum,100 ;数値文字列 ;その他 dim nSecSave ;秒数保存変数 dim nSecCount ;秒数カウンタ *Main ;計算 MakeMonitor sMonitor,DESIGN_SW x=HALF_SIZE+HALF_SIZE*strlen(sMonitor) y=HALF_SIZE+FONT_SIZE ;作成 bgscr WID_MAIN,x,y,SCREEN_NORMAL|SCREEN_FIXEDSIZE|SCREEN_HIDE font FONT_NAME,FONT_SIZE:title "μモニター情報のサンプル by 科学太郎" GetWindowLong hWnd,GWL_EXSTYLE SetWindowLong hWnd,GWL_EXSTYLE,stat|WS_EX_TOOLWINDOW SetWindowPos hWnd,NULL,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED ;設定 oncmd gosub *OnTimer, WM_TIMER oncmd gosub *OnMouseMove, WM_MOUSEMOVE oncmd gosub *OnLButton1, WM_LBUTTONDOWN onkey gosub *OnKeyBoard ;初期化 InitMonitor InitHideWindow ;表示 DrawMonitor gsel WID_MAIN,2 await ;開始 StartMonitor if(stat==0):dialog "パフォーマンス・カウンタの初期化に失敗しました。",1,"確認":end InfoMonitor SetTimer hWnd,TID_CLOCK,TMS_CLOCK,NULL SendMsg hWnd,WM_TIMER,TID_CLOCK,NULL stop //-------------------------------------- // WM_TIMERメッセージの処理 //-------------------------------------- *OnTimer redraw 0 n=gettime(6) if(n!=nSecSave):nSecSave=n:nSecCount=0 repeat 1 if(nSecCount==0):DrawMonitor:break if(nSecCount==1): if(nSecCount==2): if(nSecCount==3): if(nSecCount==4): if(nSecCount==5): if(nSecCount==6): if(nSecCount==7): if(nSecCount==8):InfoMonitor:break loop ;0.2秒単位 if(nSecCount & 1)==0{ TimerShowWindow 50 } ;0.1秒単位 nSecCount++ redraw 1 return 0 //-------------------------------------- // WM_MOUSEMOVEメッセージの処理 //-------------------------------------- *OnMouseMove MouseHideWindow return 0 //-------------------------------------- // WM_LBUTTONDOWNメッセージの処理 //-------------------------------------- *OnLButton1 SendMsg hWnd,WM_NCLBUTTONDOWN,HTCAPTION,0 ClipDragWindow ginfo_sizeY return 0 //-------------------------------------- // キーボードの割り込み処理 //-------------------------------------- *OnKeyBoard if(iParam=='Q'):PostMessage hWnd,WM_CLOSE,0,0 return //-------------------------------------- // ウインドウ非表示の初期化 //-------------------------------------- #deffunc InitHideWindow dim ConvTable,16 n=-1 n++:ConvTable(n)=HIDE_CENTER ;%0000=中央 n++:ConvTable(n)=HIDE_LEFT ;%0001=左側 n++:ConvTable(n)=HIDE_RIGHT ;%0010=右側 n++:ConvTable(n)=HIDE_NULL ;%0011=※左右に広いウインドウ(中央) n++:ConvTable(n)=HIDE_TOP ;%0100=上側 n++:ConvTable(n)=HIDE_LFTTOP ;%0101=左上 n++:ConvTable(n)=HIDE_RHTTOP ;%0110=右上 n++:ConvTable(n)=HIDE_NULL ;%0111=※左右に広いウインドウ(上側) n++:ConvTable(n)=HIDE_BOTTOM ;%1000=下側 n++:ConvTable(n)=HIDE_LFTBTM ;%1001=左下 n++:ConvTable(n)=HIDE_RHTBTM ;%1010=右下 n++:ConvTable(n)=HIDE_NULL ;%1011=※左右に広いウインドウ(下側) n++:ConvTable(n)=HIDE_NULL ;%1100=※上下に広いウインドウ(中央) n++:ConvTable(n)=HIDE_NULL ;%1101=※上下に広いウインドウ(左側) n++:ConvTable(n)=HIDE_NULL ;%1110=※上下に広いウインドウ(右側) n++:ConvTable(n)=HIDE_NULL ;%1111=※デスクトップよりも広いウインドウ return //-------------------------------------- // ウインドウ非表示の開始 //-------------------------------------- #deffunc MouseHideWindow IsWindowVisible hWnd if(stat){ ;カーソル位置 x=1 y=1 if(ginfo_mx==cxDesktop):x=0 if(ginfo_mx==exDesktop):x=2 if(ginfo_my==cyDesktop):y=2 if(ginfo_my==eyDesktop):y=0 n=(y*3+x)+1 if(n==5):return ;ウインドウ位置 m=%0000 if(ginfo_wx1<=cxDesktop)and(cxDesktop<=ginfo_wx2):m|=%0001;左側 if(ginfo_wx1<=exDesktop)and(exDesktop<=ginfo_wx2):m|=%0010;右側 if(ginfo_wy1<=cyDesktop)and(cyDesktop<=ginfo_wy2):m|=%0100;上側 if(ginfo_wy1<=eyDesktop)and(eyDesktop<=ginfo_wy2):m|=%1000;下側 ;非表示判定 if(ConvTable(m)==n):SetHideWindow } return //-------------------------------------- // ウインドウ非表示の復帰 //-------------------------------------- #deffunc TimerShowWindow int _gap_ IsWindowVisible hWnd if(stat==0){ if(ginfo_mx)<(ginfo_wx1-(_gap_)):SetShowWindow:return if(ginfo_mx)>(ginfo_wx2+(_gap_)):SetShowWindow:return if(ginfo_my)<(ginfo_wy1-(_gap_)):SetShowWindow:return if(ginfo_my)>(ginfo_wy2+(_gap_)):SetShowWindow:return } return //-------------------------------------- // 画面外補正と画面端吸着 //-------------------------------------- #deffunc ClipDragWindow int _gap_ dim rcMonitor,4 SystemParametersInfo SPI_GETWORKAREA,0,varptr(rcMonitor),0 ;初期値 x=(ginfo_wx1) y=(ginfo_wy1) ;画面外補正 if(ginfo_wx1<cxMonitor):x=(cxMonitor) if(ginfo_wy1<cyMonitor):y=(cyMonitor) if(ginfo_wx2>exMonitor):x=(exMonitor-ginfo_sizeX) if(ginfo_wy2>eyMonitor):y=(eyMonitor-ginfo_sizeY) ;画面端吸着 if(cxMonitor<ginfo_wx1)and(ginfo_wx1<cxMonitor+(_gap_)):x=(cxMonitor) if(exMonitor>ginfo_wx2)and(ginfo_wx2>exMonitor-(_gap_)):x=(exMonitor-ginfo_sizeX) if(cyMonitor<ginfo_wy1)and(ginfo_wy1<cyMonitor+(_gap_)):y=(cyMonitor) if(eyMonitor>ginfo_wy2)and(ginfo_wy2>eyMonitor-(_gap_)):y=(eyMonitor-ginfo_sizeY) ;移動 SetWindowPos hWnd,NULL,x,y,0,0,SWP_NOSIZE|SWP_NOZORDER return
このソースは長くブログの文字数を超えたため分割しました。
続きはμモニター情報のソース(2)をどうぞ。
関連記事
- μデジタル時計のソース
- μモニター情報のソース 、分割(1) 、分割(2)
- μウインドウ情報のソース
※コメント投稿者のブログIDはブログ作成者のみに通知されます