顯示當前程序的基本原理是獲取當前程序的「快照
」,之後遍歷快照中的所有程序,並把程序名稱在
ccombobox
中顯示出來。
為注入程式對應的對話方塊類新增名為showprocesses()函式,該函式完成顯示當前程序的功能。
在showprocesses()函式中,呼叫
createtoolhelp32snapshot()
函式實現獲取當前程序「快照」的功能。該函式可以獲取程序、堆、模組和執行緒的快照。
handle winapi createtoolhelp32snapshot(
dword dwflags,
dword th32processid
createtoolhelp32snapshot()函式的第乙個引數指定了要獲取誰的快照;第二個引數指定了包含在快照中的程序
id,如果要獲取的是堆或者模組的快照,該引數則指定了堆或者模組所在的程序
id,如果要獲取的是程序的快照,則可以忽略該引數。函式的返回值是快照的控制代碼。 0
。hsnapshot
是獲取到的程序快照控制代碼。
通過process32first()函式和
process32next()
函式遍歷快照中的程序,並且把程序的資訊儲存到
processentry32
結構的物件中。
process32first()函式的作用是在程序快照中找到第乙個程序;
process32next()
函式的作用是在程序快照中找到下乙個程序。
bool winapi process32first(
_in_ handle hsnapshot,
_inout_ lpprocessentry32 lppe
bool winapi process32next(
_in_ handle hsnapshot,
_out_ lpprocessentry32 lppe
其中,第乙個引數是程序快照的控制代碼;第二個引數是processentry32結構的指標,用來儲存找到的程序資訊。
遍歷快照中的程序並顯示的**如下所示:
processentry32 pe32;
pe32.dwsize = sizeof(processentry32);
int index = 0;
process32first(hsnapshot, &pe32);do
m_processesname.insertstring(index, pe32.szexefile);
index++;
} while (process32next(hsnapshot, &pe32));
其中,pe32是
processentry32
結構的物件,在使用該結構的物件時,必須首先結構中表示結構大小的成員變數
dwsize
進行賦值;通過
process32first()
函式獲取快照中的第乙個程序,
hsnapshot
是在「3.2.1
獲取當前程序「快照」」中得到的快照控制代碼;通過
do...while
語句遍歷「快照」中的所有程序,並且把程序的資訊儲存在
pe32
中;m_processesname
是圖3-1
中組合框控制項的變數,新增該變數的方法為在
vs2015
的「資源編輯器」中選中
ccombobox
組合框控制項,之後在右鍵選單中選擇「新增變數」,接下來在「新增成員變數嚮導」對話方塊中將「類別」設定為「
control
」,「變數名」設定為「
m_processesname
」,如圖
3-2所示。
圖3-2 為組合框控制項新增變數
在do...while語句中,通過
m_processesname
呼叫ccombobox
類的成員函式
insertstring()
將在「快照」中獲取到的程序資訊pe32.szexefile「插入」到組合框的下拉列表中,ccombobox::insertstring()函式的第乙個引數表示插入內容在組合框下拉列表中的索引,第二個引數表示插入的內容。
在遍歷了「快照」中的所有程序之後,需要將「快照」控制代碼關閉。
closehandle(hsnapshot);
3.2.4 設定控制項初始顯示的內容
(1)設定組合框初始顯示的內容
m_processesname.setcursel(0);
其中,ccombobox::setcursel()函式的作用是設定組合框控制項的顯示內容,其函式為組合框列表中顯示內容的索引,
0表示在組合框中顯示其列表框中第乙個內容。
(2)設定編輯框初始顯示的內容
在圖3-1中,
編輯框控制項cedit用於輸入要注入的動態庫名稱。在編寫的程式中,要注入的動態庫名稱是「
mfc_extent_dll_test.dll
」,因此將該控制項初始顯示的內容設定為動態庫的名稱。
m_dllname.setwindowtextw(_t("mfc_extent_dll_test.dll"));
其中,m_dllname是編輯框控制項
cedit
對應的變數,新增的方法如「3.2.2遍歷程序並顯示」中介紹的方法。通過m_dllname
呼叫cedit::setwindowtextw()
函式設定其初始顯示的內容。
vc 關於動態庫的哪些知識
專案開發都是分模組的,所以常常需要些個動態庫方便別人呼叫。這兩天因為專案整合,因為是組長負責整合我只需要跟進就可以,模組有問題需要及時調整的。所以上班的時候有零碎的時間。就看看公司的一些 然後有感而發,就把動多型庫的知識看了一下。下面是一些心得 都是從乙個文章摘抄的一些東西,pdf我會上傳的 1.靜...
如何優雅實現屬性的動態注入
這是在實際開發專案中遇到的乙個問題。從資料庫查詢返回的 list map string,object 的集合。並且返回的列名是中文的,專案也沒有使用mybatis 直接使用的jdbctemplate.並且欄位還超級多,這樣將資料轉換的時候如果乙個乙個的注入就會讓 臭長臭長的,所以才有了動態注入。我這...
vc 簡單的vector動態陣列實現
1 ifndef myvector 2 define myvector 3 include 4 define success 1 成功 5 define errors 1 失敗 6 define malloc error 2 申請記憶體失敗 7 define index error 3 錯誤的索引號...