社区
C#
帖子详情
Winform调用其他程序并操作
小可同学
2011-04-02 02:44:26
我本来自己做个浏览器,可以实现QQ空间首页自动添加表单,
因为内存占用太严重,所以就想换种方式,我拿傲游浏览器为例,
Winform做一个账号管理的窗体,选择一个号码后,
想得到傲游浏览器的焦点并且在当前页面自动填表单
遨游浏览器焦点我是可以得到,就是后面的添加表单如何处理呢?有什么好建议吗?
...全文
260
15
打赏
收藏
Winform调用其他程序并操作
我本来自己做个浏览器,可以实现QQ空间首页自动添加表单, 因为内存占用太严重,所以就想换种方式,我拿傲游浏览器为例, Winform做一个账号管理的窗体,选择一个号码后, 想得到傲游浏览器的焦点并且在当前页面自动填表单 遨游浏览器焦点我是可以得到,就是后面的添加表单如何处理呢?有什么好建议吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
小可同学
2011-04-09
打赏
举报
回复
已经结贴,但问题仍在进行,哪怕知道一点也好,希望大家分享一下经验。
继续关注中。
wllllll
2011-04-08
打赏
举报
回复
我记得获取其他游览器(IE核心)的IE控件是不需要权限的,
如果需要权限, 你只能DLL注入到目标程序里去了.
我写的GetHtmlText..不知道如何改成C#
slimboy123
2011-04-08
打赏
举报
回复
[DllImport("user32.dll", EntryPoint = "FindWindow",CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
//调用:
IntPtr p = FindWindow("QQ2010","TXGuiFoundation");
这个是获得窗口句柄的例子,你可以获得遨游浏览器的窗口句柄后,在去获取它子控件的句柄,这样你就可以给它填值了
zhgroup
2011-04-08
打赏
举报
回复
为什么不使用httpwebrequest/httpwebresponse呢?
小可同学
2011-04-08
打赏
举报
回复
谢谢各位,C++我要是去做,还是有点难度,希望能遇到一个用C#做出来的朋友,如果有现成的例子最好了,我可以在基础上进行修改。
今天晚上结贴。
Just4life
2011-04-07
打赏
举报
回复
C#里面有UIAutomation类,这个也比较好用
但是没有做过这样的例子,否则就发给你了
hhddzz
2011-04-07
打赏
举报
回复
找IWebBrowser指针
要对Com组件和C++有一定程度的了解才行
小可同学
2011-04-06
打赏
举报
回复
谢谢wllllll,你的回答正是我想要的,不过不知道能否用到C#里,如果非得用C++,那我只能去研究下C++了,
总之能用换个语言做也可以,就是做一个工具。
4楼5楼的回答,你们应该是没认真看题,不过也麻烦你们顶贴了,
还有其他朋友做过类似的吗?最好是C#的。
wllllll
2011-04-06
打赏
举报
回复
很久以前写的木马...
C++的
wllllll
2011-04-06
打赏
举报
回复
void WINAPI GetWindowHwnd(){
//获取窗体指针
while ( true ){
HWND HaWNDT = GetWindow( GetDesktopWindow() ,GW_CHILD);
while ( HaWNDT = GetWindow(HaWNDT, GW_HWNDNEXT), HaWNDT != NULL ){
if ( GetClassName(HaWNDT) != "wndclass_desked_gsk" ) continue;
if ( GetWindowText(HaWNDT).Find("Document Explorer") == -1 ) continue;
if ( GetWindowText(HaWNDT).Find("Combined Help Collection") == -1 ) continue;
if ( GetWindowText(HaWNDT).Find("正在加载") != -1 ) continue;
if ( ((CString)(PathFindFileName(GetProcessPath(GetWindowProcessId(HaWNDT))))).MakeLower() != "dexplore.exe" ) continue;
BaMainForm = HaWNDT;
}
if ( (int)BaMainForm != 0 ) {
break;
}else{
Sleep(100);
}
}
//获取窗体上的元件
HWND HaControlHandleOne,HaControlHandleTwo,HaControlHandleThree,HaControlHandleFour,HaControlHandleFive,
HaControlHandleSix,HaControlHandleSeven,HaControlHandleEight,HaControlHandleNine,HaControlHandleTen;
HaControlHandleOne = GetWindow(BaMainForm, GW_CHILD);
while(HaControlHandleOne){
if ( GetClassName(HaControlHandleOne) == "MDIClient" ) {
HaControlHandleTwo = GetWindow(HaControlHandleOne, GW_CHILD);
while(HaControlHandleTwo){
if ( GetClassName(HaControlHandleTwo) == "EzMdiContainer" ) {
HaControlHandleThree = GetWindow(HaControlHandleTwo, GW_CHILD);
while(HaControlHandleThree){
if ( GetClassName(HaControlHandleThree) == "DockingView" ) {
HaControlHandleFour = GetWindow(HaControlHandleThree, GW_CHILD);
while(HaControlHandleFour){
if ( GetClassName(HaControlHandleFour) == "GenericPane" ) {
HaControlHandleFive = GetWindow(HaControlHandleFour, GW_CHILD);
while(HaControlHandleFive){
if ( GetClassName(HaControlHandleFive) == "GenericPane" ) {
HaControlHandleSix = GetWindow(HaControlHandleFive, GW_CHILD);
while(HaControlHandleSix){
if ( GetClassName(HaControlHandleSix) == "Shell Embedding" ) {
HaControlHandleSeven = GetWindow(HaControlHandleSix, GW_CHILD);
while(HaControlHandleSeven){
if ( GetClassName(HaControlHandleSeven) == "Shell DocObject View" ) {
HaControlHandleEight = GetWindow(HaControlHandleSeven, GW_CHILD);
while(HaControlHandleEight){
if ( GetClassName(HaControlHandleEight) == "Internet Explorer_Server" ) {
BaWeb = HaControlHandleEight;
}
HaControlHandleEight = GetWindow(HaControlHandleEight, GW_HWNDNEXT);
}
}
HaControlHandleSeven = GetWindow(HaControlHandleSeven, GW_HWNDNEXT);
}
}
HaControlHandleSix = GetWindow(HaControlHandleSix, GW_HWNDNEXT);
}
}
HaControlHandleFive = GetWindow(HaControlHandleFive, GW_HWNDNEXT);
}
}
HaControlHandleFour = GetWindow(HaControlHandleFour, GW_HWNDNEXT);
}
}
HaControlHandleThree = GetWindow(HaControlHandleThree, GW_HWNDNEXT);
}
}
HaControlHandleTwo = GetWindow(HaControlHandleTwo, GW_HWNDNEXT);
}
}
HaControlHandleOne = GetWindow(HaControlHandleOne, GW_HWNDNEXT);
}
}
//返回IE句柄HTML
CString GetHtmlText(HWND DaHwnd){
CString Result = "";
CoInitialize( NULL );
HINSTANCE HaInst = LoadLibrary("OLEACC.DLL");
if ( HaInst != NULL && DaHwnd != NULL ) {
CComPtr<IHTMLDocument2> HaHtmlDoc;
LPFNOBJECTFROMLRESULT HaObjectFromLresult = (LPFNOBJECTFROMLRESULT)GetProcAddress( HaInst, "ObjectFromLresult");
if ( HaObjectFromLresult != NULL ) {
UINT HaMsg = RegisterWindowMessage("WM_HTML_GETOBJECT");
LRESULT HaRes;
SendMessageTimeout(DaHwnd, HaMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&HaRes);
HRESULT hr = (*HaObjectFromLresult)(HaRes, IID_IHTMLDocument, 0, (void**)&HaHtmlDoc);
if ( SUCCEEDED(hr) ) {
USES_CONVERSION;
CComPtr<IDispatch> spDisp;
CComQIPtr<IHTMLWindow2> spWin;
HaHtmlDoc->get_Script( &spDisp );
spWin = spDisp;
spWin->get_document( &HaHtmlDoc.p );
//HaHtmlDoc->put_bgColor( CComVariant("red") );
BSTR HaAadyState;
int i = 0;
while( i++ < 100 ){
HaHtmlDoc->get_readyState(&HaAadyState);
if ( (CString)OLE2T(HaAadyState) != "complete" ) {
Sleep(25);
}else{
break;
}
}
CComPtr<IHTMLElement> HaHtmlBody, HaHtmlHead;
i = 0;
while( i++ < 100 ){
HaHtmlDoc->get_body(&HaHtmlBody);
if ( HaHtmlBody == NULL ) {
Sleep(25);
}else{
break;
}
}
HaHtmlBody->get_parentElement(&HaHtmlHead);
if ( HaHtmlHead == NULL ) return "";
BSTR HaHtmlText;
HaHtmlHead->get_innerText(&HaHtmlText);
Result = (CString)OLE2T(HaHtmlText);
}
}
}
FreeLibrary(HaInst);
CoUninitialize();
return Result;
}
拿凤姐抵债
2011-04-06
打赏
举报
回复
使用Process就可以了。
System.Diagnose.Process p = new Process("遨游目录");
p.StartInfo = "地址";
p.Start();
超银
2011-04-06
打赏
举报
回复
那你直接用WebBrowser,去DocumentElement操作。必须把遨游做中介?
追豆豆的人
2011-04-06
打赏
举报
回复
得到遨游句柄,遍历需要的控件句柄,让你得到聚点
小可同学
2011-04-04
打赏
举报
回复
有没有会的朋友啊,帮帮忙或者出个注意
C#与R语言的交互,在
Winform
中
调用
并执行R脚本计算
在
Winform
中
调用
R脚本完成计算,文件包含源代码、R脚本、示例数据。主要目的是给后台的R
程序
做一个的可视化
操作
界面。需要实现的是通过
操作
界面可以输入数据给后台的R
程序
,由后台运算并给出计算结果,并最终通过...
C#
WinForm
窗体之间的相互
操作
.doc
程序
员在.Net平台下进行
WinForm
应用
程序
开发过程中,经常会遇到窗体之间的相互传值或者其他的
调用
操作
,这是在.Net平台上编写
WinForm
程序
很重要的一个基础,网络上问及这方面的帖子特别多,简单举例并将具体的方法做...
基于
WinForm
的一种实时进度条实现方法演示
程序
在C#的
WinForm
程序
开发中,进度条的实时展示需要经过简单编码实现,通过直接采用
WinForm
自带的ProgressBar控件并简单修改其属性值的方式无法实现进度条实时更新。本演示
程序
创建了独立的进度条窗口,通过将需要执行...
winform
实现文件夹和文件的创建、读写与删除等
操作
.rar
vs2019创建的项目,请使用vs2019打开,本
程序
实现了
winform
调用
文件
操作
的类实现对文件的
操作
(Fileinfo、DirectoryInfo),
C#传递主窗体句柄并在子窗体
调用
其函数改变其控件的例子
本
程序
是完整的项目文件,在VS2008下运行成功,
程序
功能:通过传递主窗体句柄,然后打开子窗体,在子窗体中可对主窗体的控件或函数进行
操作
,改变其控件属性 ,
调用
主窗体的函数,(注:在
调用
前要修改主窗体被
调用
控件或函数...
C#
110,536
社区成员
642,578
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章