c++控制ie浏览器
来源:互联网 发布:redis和mysql的区别 编辑:程序博客网 时间:2024/05/21 12:44
事先说一下,这不是用com,因此许多com的功能无法实现,我这里只是模拟下ie control,简单的实现几个功能。下面是自己封装的类:
class ieitem{
public:
ieitem(HWND handle);
~ieitem();
char* getname();
char* geturl();
void navigate(char *u);
HWND h;
void show();
void hide();
int visible;
private:
char *name;
char *url;
HWND h_edit;
};
class ie{
public:
ie();
~ie();
int getcount();
ieitem *getitem(int i);
void getobject();
HWND *item;
int count;
HWND *_item;
};
int CALLBACK cwin( HWND hwnd,
LPARAM lParam){
HWND *l=(HWND*)lParam;
char c[5]={0};
::GetClassName(hwnd,c,5);
if(::strcmp(c,"Edit")==0){
*l=hwnd;
return 0;
}
return 1;
}
int CALLBACK win( HWND hwnd,
LPARAM lParam){
char c[8]={0};
ie* i=(ie*)lParam;
::GetClassName(hwnd,c,8);
if(::strcmp(c,"IEFrame")==0){
i->count++;
i->_item=i->item;
i->item=new HWND[i->count];
if(i->count>1){
for(int a=0;a<i->count-1;a++){
i->item[a]=i->_item[a];
}
}
i->item[i->count-1]=hwnd;
}
return 1;
}
ieitem::ieitem(HWND handle){
name=0;
url=0;
h=handle;
::EnumChildWindows(h,cwin,(LPARAM)&h_edit);
}
void ieitem::show(){
::ShowWindow(h,1);
visible=1;
}
void ieitem::hide(){
::ShowWindow(h,0);
visible=0;
}
ieitem::~ieitem(){
if(name!=0){
delete []name;
}
if(url!=0){
delete []url;
}
delete this;
}
char *ieitem::getname(){
if(name!=0){
delete []name;
}
int l=::SendMessage(h,WM_GETTEXTLENGTH,0,0);
name=new char[l+1];
::SendMessage(h,WM_GETTEXT,l+1,(long)name);
return name;
}
char *ieitem::geturl(){
if(url!=0){
delete []url;
}
int l=::SendMessage(h_edit,WM_GETTEXTLENGTH,0,0);
url=new char[l+1];
::SendMessage(h_edit,WM_GETTEXT,l+1,(long)url);
return url;
}
void ieitem::navigate(char *u){
::SendMessage(h_edit,WM_SETTEXT,0,(long)u);
PostMessage(h_edit, WM_KEYDOWN, VK_RETURN, 0);
}
ie::ie(){
count=0;
item=0;
}
ie::~ie(){
if(item!=0){
delete []item;
}
}
void ie::getobject(){
if(item!=0){
delete []item;
}
count=0;
::EnumWindows(win,(LPARAM)this);
}
int ie::getcount(){
return count;
}
ieitem* ie::getitem(int i){
ieitem* o=new ieitem(item[i]);
return o;
}
我封装了ie和ieitem类,调用时由ie引申出ieitem,下面给出简单示例:
main(){
ie a;
a.getobject();
for(int i=0;i<a.count;i++){
if(::strstr(a.getitem(i)->geturl(),"qq.com")){
a.getitem(i)->show();
}
}
}
先getobject下,获得当前ie的状态,其他的接口都很简单,不多重复了。
我用api模拟的,但是毕竟不是引入shellwindows,没有办法操作文档对象,在vc下操作com比较麻烦,一般我都是vb直接上的。
文章有不足之处,还望各位多多指点。
- c++控制ie浏览器
- c# 控制IE浏览器
- c# 控制IE浏览器
- C#控制IE浏览器
- IE浏览器兼容问题,CSS控制bug
- VB完全控制IE浏览器,操作ie对象,响应ie事件
- WebBrowser控件实现对IE浏览器的各种控制
- 用Delphi编程控制IE浏览器的窗口
- 防止黑客用IE浏览器实现远程控制
- WebBrowser控键实现对IE浏览器的各种控制
- 如何控制IE浏览器的行为,以及获取结果
- vb.net 教程 20-3 控制Ie浏览器 2
- vb.net 教程 20-3 控制Ie浏览器 1
- vb.net 教程 20-3 控制Ie浏览器 3
- vb.net 教程 20-3 控制Ie浏览器 4
- vb.net 教程 20-3 控制Ie浏览器 5
- vb.net 教程 20-3 控制Ie浏览器 6
- vb.net 教程 20-3 控制Ie浏览器 7
- Qt集成到VS2008
- openssl 0.9.7a-0.9.7d的一个多线程bug
- 多态性和虚函数知识点整理
- 仿GOOGLE个性首页可移动图层效果
- C#(.net)中的DllImport
- c++控制ie浏览器
- 简单的构造和析构函数 你能玩的转吗?
- .NET牛人应该知道些什么?
- c#全角半角转换
- 利用js让iframe框架自适应网页高度
- 代码清单7-4是一个比较完整的数据访问组件,下面分析这些代码的具体实现。
- Hubble.net V0.2 版本正式生成
- 防止SQL注入,过滤非法字符的方法
- 李书福