if hWnd <> 0 then while GetParent(hWnd) <> NULL do hWnd := GetParent(hWnd); |
二、最大化窗口的矩形區域
通過窗體句柄計算窗體矩形區域并畫虛線提示框也是以前做過的功能,不過源碼在家里,這趟只得重新編寫。但是在我現用的Win2000系統中,最大化窗體的矩形區域左上角竟然是(-4,-4),且寬度也比屏幕寬度多了4,想來可能是Windows有意這樣處理窗體,讓它那個3D的邊框顯示在屏幕之外。印象中我上次做這個功能時并沒有這個問題,不知是不是以前沒注意到。
三、取進程的內存用量
在Win2000下很容易實現,用GetPRocessMemoryInfo就可以了,而且有任務管理器可以對比。而在Win98/ME下就麻煩多了,最后使用了下面的代碼,但得到的數值很大,沒得對比的情況下只能這樣了。
iFlag := VirtualQueryEx(hndProcess, lpAddr, mi, SizeOf(mi)); repeat LongWord(lpAddr) := LongWord(mi.BaseAddress) + mi.RegionSize; if LongWord(lpAddr) > $7fffffff then break; if mi.State = MEM_COMMIT then Inc(iTotalCommit, mi.RegionSize); iFlag := VirtualQueryEx(hndProcess, lpAddr, mi, SizeOf(mi)); until iFlag <> sizeof(mi); |
四、GetWindowThreadProcessId
DWORD GetWindowThreadProcessId(HWND, LPDWORD)可以返回兩個值,一個是函數本身的返回值,另一個LPDWORD指向的變量,LPDWORD才進程ID。
新聞熱點
疑難解答