不論是用哪套程式語言,一些議題蠻常見的,有些實用性是初學者自己想摸(像是做自動點擊之類的),做個 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 之特性與其他差異顯得較大。

 

其他的想到再補吧。

edisonx 發表在 痞客邦 PIXNET 留言(0) 人氣()