能力值:
(RANK:990 )
|
-
-
2 楼
UINT GetDlgItemText(
HWND hDlg, // handle of dialog box
int nIDDlgItem, // identifier of control
LPTSTR lpString, // address of buffer for text
int nMaxCount // maximum size of string
);
第三个参数就是获得数据的地址。汇编中如这样:
004010E3 |. 68 FF000000 PUSH 0FF ; /Count = FF (255.)
004010E8 |. 68 20304000 PUSH uninstal.00403020 ; |Buffer = uninstal.00403020
004010ED |. 68 E9030000 PUSH 3E9 ; |ControlID = 3E9 (1001.)
004010F2 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
004010F5 |. E8 EE000000 CALL <JMP.&user32.GetDlgItemTextA> ; \GetDlgItemTextA
上面的004010E8地址处的指令PUSH uninstal.00403020中的00403020就是保存获得数据的地址。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢,终于明白了!那么"ControlID = 3E9"和"Count = FF"是什么意义呢?为什么要将3E9和FF入栈呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
ControlID = 3E9是控件ID,表示你要获取的那个控件,Count = FF就是欲取得的最大长度了
|
能力值:
(RANK:990 )
|
-
-
5 楼
ControlID 是上面函数原型中的第二个参数,就是控件 ID,用资源编辑工具看一下就明白了。我这里的编辑框的控件 ID 是 1001,16进制就是 3E9,用这个来指示到底要获得哪个控件的内容。
上面我贴的函数原型已经说的很清楚了,四个参数,汇编调用参数入栈是类似于__stdcall的方式,参数由右到左传递。还不清楚的话看看新手入门必读,有调用约定的解释。
|
|
|