我vb學員,想讀取TStringGird資料,遍歷網上論壇沒找到完整的VB代碼。識訓是看到高人用C++寫的代碼和生成的DLL及演示程式。
1)我希望用VB呼叫DLL的方法讀出TStringGird資料,不知是否可以呼叫?如何宣告、呼叫?(我用VB代碼已經找到TStringGir的句柄)
2)在看C++代碼時,感覺不到代碼是怎么HOOK出資料的,如用可能請老師們幫助注釋一下C++代碼。
另:因為自己已經沒用分數,所以請老師諒解我的摳門。
謝謝
附件
1)自己想取到的內容:

2)C++原始碼鏈接:http://bbs.csdn.net/topics/370135676
代碼作者:mjp1234airen4385
附:mjp1234airen4385代碼如下
以前做個這個,不過是C++的,使用了hook方法。
你可以參考
下載完了,運行Exec這個程式,是TStringGrid的示例,運行EnumControls.exe,
點擊【列舉表單中的控制元件】按鈕,就獲取了TStringGrid的句柄,
點擊【復制SG中的資料】就可以把Exec這個程式中TStringGrid的資料復制到EnumControls.exe了。
核心代碼是這個:
HWND DLLHWND;
void __stdcall (*InstallHook)(HWND, HWND);
void __stdcall (*UninstallHook)();
char * __stdcall (*GetHookedCell)();
DLLHWND = LoadLibrary("HookSG.dll");
InstallHook = (void (__stdcall *)(HWND, HWND))GetProcAddress(DLLHWND, "InstallHook");
UninstallHook = (void (__stdcall *)())GetProcAddress(DLLHWND, "UninstallHook");
GetHookedCell = (char * (__stdcall *)())GetProcAddress(DLLHWND, "GetHookedCell");
//AnsiString StrHwnd = SG->Cells[2][SelectedRow];
//if (StrHwnd == "") return;
//HWND hWnd = (void *)(StrHwnd.ToInt());
//HWND hParent = GetParent(hWnd);
//HWND hParent = FindWindow("TForm1", "列舉表單中的控制元件");
//HWND hParent = FindWindow("TForm1", "Form1");
//HWND hParent = FindWindow("TFrmSGHooked", "StringGrid to be hooked");
char cText[MAX_PATH] = {0};
strcpy(cText, Edit1->Text.c_str());
if (strcmp(cText, "") == 0) return;
HWND hParent = FindWindow(NULL, cText);
HWND hWnd = FindWindowEx(hParent, 0, "TStringGrid", NULL);
if (!hWnd) return;
InstallHook(Handle, hWnd);
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
PostMessage(hParent, WM_NULL, 0, 0);
for (int i = 0; i < 20; i++)
{
Sleep(100);
Application->ProcessMessages();
if (MsgWnd != 0) break;
}
if (MsgWnd == 0) goto Exit;
int iRow, iCol, iLen;
iRow = SendMessage(MsgWnd, CM_QUERYROW, 0, 0);
iCol = SendMessage(MsgWnd, CM_QUERYCOL, 0, 0);
if (iRow <= 0 || iCol <= 0) goto Exit;
SGSub->RowCount = iRow;
SGSub->ColCount = iCol;
for (int i = 0; i < iRow; i++)
{
for (int j = 0; j < iCol; j++)
{
iLen = SendMessage(MsgWnd, CM_HOOKCELL, j, i);
if (iLen < 0) goto Exit;
SGSub->Cells[j][i] = GetHookedCell();
}
}
Exit:
MsgWnd = 0;
UninstallHook();
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);
FreeLibrary(DLLHWND);
3)自己測驗原始碼演示程式的截圖:

演示程式附件中DII名稱是:HookSG.dll
希望VB老師能給出呼叫HookSG.dll的方法,怎要取得總行數,列數、及單元格中的內容。
如有高人能提供一個完全用VB寫的完整代碼來替代HookSG.dll,那將是VB學員的福音。
uj5u.com熱心網友回復:
這種亂發版的帖子讓俺想到蠟筆小新里的一幕:小新:老板我要買大白菜
老板:沒有。。。
小新:那我要胡蘿卜
老板:沒有。。。
小新:啥都沒有也敢開店吖(走人...)
老板:少給我放屁了!這里是賣魚的~ .\/.
uj5u.com熱心網友回復:
請問有附檔嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/107096.html
標籤:茶館
