
1. 切到「開發人員」。
2. 選擇「巨集」。
edisonx 發表在 痞客邦 留言(0) 人氣(1,114)
手邊 office 2010,但設定大同小異。
1. 按下「檔案」。

2. 按下「選項」。
edisonx 發表在 痞客邦 留言(0) 人氣(25,464)
用 C 實做 FSM 總算出來了,共二版的完全不同的 code
結果雖然還沒讓自己很滿意,不過也算是一小個結束了。
這二天有空的時候把問題和說明放上來好了,這陣子就先專心忙其它事吧 !!
edisonx 發表在 痞客邦 留言(0) 人氣(154)
這裡的 heap 管理不是指 console 的 new、malloc 等方式,而是用 win32 api 方式管理;相關的 API 非常多,資料都是從 MSDN 找下來的,有興趣到 MSDN 看更多。
1. 建立 heap
HANDLE WINAPI HeapCreate(
__in DWORD flOptions, // 如下說明
__in SIZE_T dwInitialSize, // heap 大小
__in SIZE_T dwMaximumSize // heap 最大值
);
flOptions
edisonx 發表在 痞客邦 留言(0) 人氣(384)
1. 相關函式
2. 列舉 process - tlhelp32.h
3. 列舉 process - psapi.h
edisonx 發表在 痞客邦 留言(0) 人氣(123)
// ==================================
// filename: EnumDeviceDriver.cpp
// compiler: vs2008
// author : EdisonX (Edison.Shih.)
//
// **** all rights reserve ****
// ==================================
edisonx 發表在 痞客邦 留言(0) 人氣(109)
// ==================================
// filename: ListModules2.cpp
// compiler: vs2008
// author : EdisonX (Edison.Shih.)
//
// **** all rights reserve ****
// ==================================
#include <windows.h>
#include <stdio.h>
#include <Psapi.h>
#pragma comment(lib, "psapi.lib")
edisonx 發表在 痞客邦 留言(0) 人氣(76)
相關 struct
typedef struct tagMODULEENTRY32 {
DWORD dwSize; // struct 大小
DWORD th32ModuleID; // 不用,設0
DWORD th32ProcessID; // 使用此 module 之 process ID
DWORD GlblcntUsage; // 通常 = 0xffff
DWORD ProccntUsage; // 與 GlblcntUsage 同
BYTE *modBaseAddr; // 此 module 於 process 之起始位置
DWORD modBaseSize; // module 大小, bytes
HMODULE hModule; // module's handle
TCHAR szModule[MAX_MODULE_NAME32 + 1]; // module 名
TCHAR szExePath[MAX_PATH]; // module 全名
} MODULEENTRY32, *PMODULEENTRY32;
edisonx 發表在 痞客邦 留言(0) 人氣(118)
process 可能會有多個 thread,於是要列舉 thread 時,必須要指定是哪個 process ,所以要給的必要參數是 process id。先看相關 struct
typedef struct tagTHREADENTRY32 {
DWORD dwSize; // 結構體大小
DWORD cntUsage; // 不用,設0
DWORD th32ThreadID; // 此 thread ID
DWORD th32OwnerProcessID; // 擁有此 thread 之 process id
LONG tpBasePri; // 優先權, 0-31
LONG tpDeltaPri; // 不用, 設0
DWORD dwFlags; // 不用, 設0
} THREADENTRY32, *PTHREADENTRY32;
edisonx 發表在 痞客邦 留言(0) 人氣(471)
process 管理中,PID 取得是第一步且重要的事,這裡提出二、三種方式取得 process ID
1. 已知視窗名稱
DWORD GetPIDByWindowName(const char* ClassName, const char* WindowName)
{
DWORD PID;
HWND targetWnd = FindWindow(ClassName, WindowName);
GetWindowThreadProcessId(targetWnd, &PID);
return PID;
}
edisonx 發表在 痞客邦 留言(0) 人氣(2,792)