社区
C#
帖子详情
Winform调用其他程序并操作
小可同学
2011-04-02 02:44:26
我本来自己做个浏览器,可以实现QQ空间首页自动添加表单,
因为内存占用太严重,所以就想换种方式,我拿傲游浏览器为例,
Winform做一个账号管理的窗体,选择一个号码后,
想得到傲游浏览器的焦点并且在当前页面自动填表单
遨游浏览器焦点我是可以得到,就是后面的添加表单如何处理呢?有什么好建议吗?
...全文
259
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
程序
,由后台运算并给出计算结果,并最终通过
操作
界面返回计算结果。1. 导入数据后,弹出一个文本框用来预览导入的数据。 所有的列都需要包括但是可以只显示前50行。 文本框里从第二行开始是导入的数据(包括列的名称), 而第一行的每一列都是一个下拉菜单。每一个下拉菜单里面都有我们在后台R
程序
里面所有的默认变量名X_1-X_30,以及一个Null变量以供选择。这样我们就知道导入的是有哪些变量了。 2. 还想要实现的一个功能就是能否在第一行进行自动搜索,如果有变量名和第二行里面的名称相同,或相似,不区分大小写,则在第一行里面直接显示相应的变量名,这样就不用我们一个一个点了。如果没有相同的名称,则默认为Null,由用户决定名称。3. 文本框右上角有两个图标,一个是确定,一个是取消。如果点击取消则取消这次导入,如果选择确定则生成一个名为input.csv的文件,存储于特定的一个路径。(请注意导出文件的第一行是下拉菜单里面的名称。
C#
WinForm
窗体之间的相互
操作
.doc
程序
员在.Net平台下进行
WinForm
应用
程序
开发过程中,经常会遇到窗体之间的相互传值或者其他的
调用
操作
,这是在.Net平台上编写
WinForm
程序
很重要的一个基础,网络上问及这方面的帖子特别多,简单举例并将具体的方法做了一个总结
基于
WinForm
的一种实时进度条实现方法演示
程序
在C#的
WinForm
程序
开发中,进度条的实时展示需要经过简单编码实现,通过直接采用
WinForm
自带的ProgressBar控件并简单修改其属性值的方式无法实现进度条实时更新。本演示
程序
创建了独立的进度条窗口,通过将需要执行的
操作
与进度条刷新放到单独的线程中
操作
,实现进度条实时刷新。 本演示
程序
把进度条窗口与
调用
程序
分开,根据需要,通过对本演示
程序
调用
部分的数据处理
程序
修改即可满足实际使用。
winform
实现文件夹和文件的创建、读写与删除等
操作
.rar
vs2019创建的项目,请使用vs2019打开,本
程序
实现了
winform
调用
文件
操作
的类实现对文件的
操作
(Fileinfo、DirectoryInfo),
C#传递主窗体句柄并在子窗体
调用
其函数改变其控件的例子
本
程序
是完整的项目文件,在VS2008下运行成功,
程序
功能:通过传递主窗体句柄,然后打开子窗体,在子窗体中可对主窗体的控件或函数进行
操作
,改变其控件属性 ,
调用
主窗体的函数,(注:在
调用
前要修改主窗体被
调用
控件或函数的属性为PUBLIC)
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章