社区
C#
帖子详情
C#通过句柄如何得到 TStringGrid 的数据
csharpcn
2011-08-16 07:56:55
通过spy++已经得到 TStringGrid 的句柄
请问
用C# 如何能得到 TStringGrid 中的数据
以前应该有人问过,没查到,请知道的告诉一下,最好有部分源代码
引用 using System.Runtime.InteropServices;
和 [DllImport("User32.dll", EntryPoint = "FindWindow")] 都是必须的,这步介绍可以省略,可以节省回答人的时间,谢谢大家帮忙
...全文
488
13
打赏
收藏
C#通过句柄如何得到 TStringGrid 的数据
通过spy++已经得到 TStringGrid 的句柄 请问 用C# 如何能得到 TStringGrid 中的数据 以前应该有人问过,没查到,请知道的告诉一下,最好有部分源代码 引用 using System.Runtime.InteropServices; 和 [DllImport("User32.dll", EntryPoint = "FindWindow")] 都是必须的,这步介绍可以省略,可以节省回答人的时间,谢谢大家帮忙
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
csharpcn
2011-08-18
打赏
举报
回复
谢谢大家的回复
csharpcn
2011-08-18
打赏
举报
回复
没有解决,再想其他方法吧
LMAOhuaNL
2011-08-17
打赏
举报
回复
StringGrid1-> Rows[index] 获得第 index 行的内容,返回值为 TStrings* 类型。
csharpcn
2011-08-17
打赏
举报
回复
可能比较难解决,这个问题晚点结贴,希望能有c#高手,给出代码。
谢谢大家
mjp1234airen4385
2011-08-17
打赏
举报
回复
是一个以前的示例代码,写的比较乱,也没有注释。
虽然写成功了,最后也没有用到。
mjp1234airen4385
2011-08-17
打赏
举报
回复
以前做个这个,不过是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);
mjp1234airen4385
2011-08-17
打赏
举报
回复
C#中,例如:Form1.Handle就是句柄的意思了。
原来不是怕
2011-08-17
打赏
举报
回复
请问C#有句柄这个概念嘛
stszd604
2011-08-17
打赏
举报
回复
[Quote=引用 5 楼 wuzhanhui 的回复:]
引用 4 楼 lmaohuanl 的回复:
StringGrid1-> Rows[index] 获得第 index 行的内容,返回值为 TStrings* 类型。
解决了吗
[/Quote]
解决了吗
csharpcn
2011-08-16
打赏
举报
回复
一般情况下,可以通过句柄得到输入框和标题栏的内容,但是这个
TStringGrid 中的数据
不知道怎么能得到
ycproc
2011-08-16
打赏
举报
回复
你想调用它 首先得知道他的返回吧
知道了返回再去接收 处理成自己的
Jxiaoshen
2011-08-16
打赏
举报
回复
帮顶~~
C#
句柄
截图(窗口截图)
根据窗口名称获取窗口
句柄
,通过
句柄
对窗口截图并保存,源码真实可用!
C#
通过窗口名获取程序所有控件
句柄
通过窗口名获取程序所有控件
句柄
,并绘制
句柄
结构树。
c#
获取窗体
句柄
模拟鼠标点击
c#
获取窗体
句柄
模拟鼠标点击实例2012年8月20日23:48:21,代码清楚,有详细注释,希望对大家有用
通过
句柄
获取窗口名并隐藏窗口和任务栏图标
通过API函数穷举
得到
可视窗口的
句柄
,通过
句柄
获得对应窗口标题并显示在list中,在list中钩选相应项,则可隐藏窗口和窗口在任栏的图标.去掉对就项的钩则可使其恢复.程序主窗口也能隐藏,并且可通过热键ALT+F7将其唤出.并只允许程序只运行一个实例.
c#
即时获得窗口
句柄
c#
即时获得窗口
句柄
,主要用于通过鼠标获得窗口
句柄
,供程序猿们参考学习
C#
111,112
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章