Winform调用其他程序并操作

小可同学 2011-04-02 02:44:26
我本来自己做个浏览器,可以实现QQ空间首页自动添加表单,
因为内存占用太严重,所以就想换种方式,我拿傲游浏览器为例,
Winform做一个账号管理的窗体,选择一个号码后,
想得到傲游浏览器的焦点并且在当前页面自动填表单

遨游浏览器焦点我是可以得到,就是后面的添加表单如何处理呢?有什么好建议吗?
...全文
259 15 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
有没有会的朋友啊,帮帮忙或者出个注意

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧