20071027总结
来源:互联网 发布:农产品网络零售 编辑:程序博客网 时间:2024/05/14 07:05
本周 wpf中 主要是完成了对tab的学习 以及 从目录中读取更多文件信息的技巧.
然而到了周三,就又开始了新一轮的处理文档运动。.
更令人惊诧的是 除了要写文档,一个数月前的项目又返回了一堆问题.而对于硬盘数据全丢的我来说 无疑是一次充分的摧残.为了 保持程序的不被修改.花了1晚上的工夫来研究如何从程序外部来操作程序中的各个控件. 好在之前研究过1段时间外挂.目的还算达到了.可是到了客户那里一调试.自己又傻了。原来哪个控件没有把文本实时刷新到程序中去.结果一晚上的辛苦 对于解决当时的问题来讲 白费了。
不过把期间的经验技巧做一总结,日后自己或者网上的朋友肯定是能用的着的.
问题:寻找程序中的editbox并发送字符串.
思路分为2个方向,一个是找到窗体handle然后 找到editbox handle通过 sendmessage发消息.
此方法可用于可以准确得到editbox handle的情况下.代码如下:
HWND sipahwnd = ::FindWindow(NULL,"**系统");
//char ab[100];// = "sdfdsf.jpg";
// strcpy(ab,_T("dsfdsf.jpg"));
if (sipahwnd)
{
HWND dialoghwnd = ::FindWindow("#32770","打开图像");
if (dialoghwnd)
{
::SetForegroundWindow(dialoghwnd);
//得到此进程中的窗体句柄
HWND edithwnd = ::FindWindowEx(dialoghwnd,0,"Edit",0);
//遍历得到下一个窗体句柄//getwindow(hwnd,gw_hwndnext);
if(edithwnd)
{
::SendMessage(edithwnd,WM_SETTEXT,0,(LPARAM)SipaAdd);
}
}
}
另外一种方法 得到主程序handle然后激活窗体 用粘贴板把 内容粘入.目前已经可以实现 复制,但是 在激活窗体方面遇到了问题.
if (OpenClipboard())
{
HGLOBAL clipbuffer;
char *buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE,strlen(SipaAdd));
buffer = (char *)GlobalLock(clipbuffer);
strcpy(buffer,LPCSTR(SipaAdd));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
//把变量拷贝到粘贴版
::SetForegroundWindow(sipahwnd);
::SetFocus(sipahwnd);
//::SetCursorPos(400,400);
//Sleep(200);
//::PostMessage(sipahwnd,WM_LBUTTONDOWN,1,MAKELONG(200,200));
::SendMessage(sipahwnd,WM_LBUTTONDOWN,0,0);
Sleep(100);
::SendMessage(sipahwnd,WM_LBUTTONUP,0,0);
就在我对无法完成任务胆战心惊的时候,突然之前backup的源代码被我发现了。hoho天不绝我.
终于可以好好改了.
周末的时候基本就是忙着送文档, 帮公司做(目前我所在地)各项目的收尾工作,与客户交流.
找到了源代码没想到gdal不能使用.又用了1个多钟头把gdal重新配了1遍.事后才发觉.不能用的原因并不是gdal....不过也无所谓了,就当复习功课了 ^_^
周六,就是今天. 完成了mfc下限制字符串长度,以及限制特定输入的操作。并简单实现了vista下输入序列号的那种输入方式。话不多说:见代码:
限制长度:
DDV_MaxChars(pDX, m_szffs, 20); DDV 是MFC用来处理数据检测的一种简单方法。
限制输入:
int charpos = LOWORD(GetSel());CString str;
GetWindowText(str);
if (nChar >= '0' && nChar <= '9')
{
if (charpos == 4 || charpos ==7)
{
str.Insert(charpos,'-');
SetWindowText(str);
SetSel(charpos + 1,charpos + 1);
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
else if (nChar == VK_BACK)
{
if (charpos == 5 || charpos ==8)
{
str.Delete(charpos-1,1);
SetWindowText(str);
SetSel(charpos - 1,charpos - 1);
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
此代码实现了 输入yyyy-mm-dd并会自动输入- 但是没有对ymd的范围进行限制。且删除方法不正确也会造成错误输入。不过对于理解cedit以及实现简单的限制已经足够了 希望能对观看者起到帮助作用^_^
- 20071027总结
- 总结
- 总结
- 总结
- 总结
- 总结!
- 总结
- 总结.
- 总结。
- 总结
- 总结
- 总结
- 总结
- 总结
- 总结
- 总结
- 总结
- 总结
- ASP.NET AJAX入门系列(2):使用ScriptManager控件
- 关于Award 公司的BIOS
- debt ratio
- LINUX常用技巧
- 自定义绘制表格和树条目
- 20071027总结
- 各种文件后缀名
- JMF捕获音频和视频一 http://zhangjunhd.blog.51cto.com/113473/25477
- 深度剖析传值、传地址和传引用的区别
- 各种文件后缀名2
- mapx 显示新建图元的属性
- Java集合框架
- ASP.NET AJAX入门系列(3):使用ScriptManagerProxy控件
- SQLServer和Oracle的常用函数对比