昨日も昨日とてCLANNADやってたんだけど、壮大に寝落ちしてしまいました。さすがに3徹はきついのか・・・。ってか、そんなに必死になってやる意味が分からないな、よく考えてみれば。急がなきゃいけないものでもないんだよね・・・。エロゲーモードは正常な思考回路を失わせるのか。
それはそうと、昨日の続き。APIの組み合わせでいけるだろとは思ってたけど、DLL使う関数とかあったりと意外と面倒だった。それでも50行のコードですが。
#include <stdio.h> #include <unistd.h> #include <windows.h> #define BUFSIZE 1024 DWORD (WINAPI *fpGetModuleBaseName)(HANDLE, HMODULE, LPTSTR, DWORD); void getActiveProcInfo(void); int main(void){ HINSTANCE hInst; if((hInst = LoadLibrary("psapi.dll")) == NULL){ return 1; } if((fpGetModuleBaseName = (DWORD (WINAPI *)(HANDLE, HMODULE, LPTSTR, DWORD)) GetProcAddress(hInst, "GetModuleBaseNameA")) == NULL){ return 1; } while(1){ getActiveProcInfo(); _sleep(1000); } FreeLibrary(hInst); return 0; } void getActiveProcInfo(void) { HWND hWnd; DWORD pid; HANDLE hProc; char file[BUFSIZE], title[BUFSIZE]; hWnd = GetForegroundWindow(); GetWindowText(hWnd, title, BUFSIZE); GetWindowThreadProcessId(hWnd , &pid); if(!(hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid))){ return; } fpGetModuleBaseName(hProc, NULL, file, BUFSIZE); CloseHandle(hProc) ; printf("hWnd = %d\n", hWnd); printf("pid = %d\n", pid); printf("proc = %s\n", file); printf("title = %s\n", title); printf("-----------------------------\n"); fflush(stdout); }
実行結果
hWnd = 1509388 pid = 2352 proc = Sleipnir.exe title = はてなダイアリー - XXXannex - Sleipnir ----------------------------- hWnd = 331718 pid = 2816 proc = xyzzy.exe title = getap.c - xyzzy -----------------------------
で、後はどうにかして集計すればいい・・・のかな?