不論是用哪套程式語言,一些議題蠻常見的,有些實用性是初學者自己想摸(像是做自動點擊之類的),做個 note。
1. process 議題
列舉工作管理員裡面所有的 process name
關閉特定之 process name
keywrod : psapi, thelp32
windows cmd line : tasklist , taskkill
2. GUI 議題
截取某視窗圖片
截取桌面圖片
keyword : FindWindow(Ex) , GetDC, CreateCompatibleBitmap, CreateCompatibleDC, BitBlt...
3. GM8 議題
讀取、修改某 process 記憶體值
keyword : FindWindow、GetWindowsThreadId、OpenProcess、OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges、ReadProcessMemory、WriteProcessMemory、struct SYSTEM_INFO、struct MEMORY_BASIC_INFORMATION、VirtualQueryEx。
[註] 個人認為沒必要花時間在這議題上,原因在撰寫搜尋時會花太長時間在 research API之使用,不過很多初學者很想做這種事。
4. 硬體\環境資訊
取得 CPU 個數、PageSize、應用程式定址範圍 : GetSystemInfo
取得使用者名稱、取得電腦名稱、系統目錄、Windows 目錄 : GetComputerName、GetUserName、GetSystemDirectory、GetWindowsDirectory
取得目前記憶體狀態 ( 含大小、page、實際與佔用) : GlobalMemoryStatus(Ex), 範例。
5. 窮舉檔案
找出某個資料夾底下所有檔案 : struct _finddata_t、 _findfirst、_findnext。
cmd line : dir /b (/s)
[註] 沒可攜性作法,其他方式
(1) FindFirstFile、FindNextFile、FindClose <Win32 API>;
(2) <direct.h> : opendir、readdir
(3) <boost/filesystem.hpp>
6. A 程式輸出至 console,B 程式如何以 A 之輸出當輸入
方法一:先用 io redirection 將 A 輸出轉到文字檔,B 程式去讀文字檔。
方法二:
7. 程式中執行其他執行檔
(1) system("a.exe"); // 阻塞式
(2) system("start /b a.exe"); // 非阻塞式,不顯示 console
(3) WinExec("a.exe", SW_SHOWNORMAL) ; // 非阻塞式, 少用
(4) CreateProcess ("a.exe", ...); // 含阻塞式與非阻塞式, codeproject
(5) ShellExecute(Ex) (....) ; // 須事先使用 CoInitializeEx
註 : ShellExecuteEx 之特性與其他差異顯得較大。
其他的想到再補吧。