|zyciis| 慕白兄以前教我的从网页调用WinFrom程序的例子,那个WinForm程序执行完后可不可以返回数据到那个页面呢
我现在在做发IC卡的程序在网页中添加一个ID,然后发卡
http://topic.csdn.net/u/20071217/18/420dd1f2-6f17-4854-a08b-1480928c4ea8.html
这个时候我就用
ICCard:|1|sdf5465sd1f213sd //前面的为用户户 后面的为验证MAC
传了一个用户ID过去
然后在客户端用程序给这个用户发一张VIP卡,并在客户端用WebService去更新数据库
当发完VIP卡后,网页是没有改变的,这个时候就要手动的刷新一下才能从数据库中取得VIP的卡号
现在问:
1:那个程序执行完可不可以将我的VIP卡号填到网页中的txtVIPNO.Text中呢
2:如果1不行的话,能不能在Winform执行完的时候自动刷新那个页面呢
--------------------编程问答-------------------- mark
--------------------编程问答-------------------- 极其强烈的关注! --------------------编程问答-------------------- 另外, 能否把慕白兄以前教咱的从网页调用WinFrom程序的例子的地址发一下,我也想知道这个如何实现的 --------------------编程问答-------------------- 1.当然可以!不过自动的可能不行,你要在网页上加一个按钮,然后点击按钮用Javascript来读取winform里的值 --------------------编程问答-------------------- 这个可以在页面定时用ajax刷新
现在问:
1:那个程序执行完可不可以将我的VIP卡号填到网页中的txtVIPNO.Text中呢
2:如果1不行的话,能不能在Winform执行完的时候自动刷新那个页面呢
这2种做法都是有难度的
方案1.你必须知道该ie的窗口句柄,然后取得ie的内容,更改ie的html
方案2.同样也要知道该ie的窗口句柄,然后发送命令来让ie刷新
具体的:你可以找找有关ie插件方面的资料
总体上说你的问题用异步的ajax就可以了,不需要动用那么麻烦技术 --------------------编程问答-------------------- 好复杂,基本没有遇见过这样的方式处理问题 --------------------编程问答-------------------- ^_^ up --------------------编程问答-------------------- 学习下 --------------------编程问答-------------------- 我现在是用XMLHTTP和数据库里面的一个操作字段有区分要更新页面的哪一个地方
但这样太麻烦了 ,要是能返回就好了
谢谢 --------------------编程问答-------------------- 要在winform中去捕获ie的窗口这比较困难.还有一个办法就是在winform中嵌入ie,这样可以做到交互。 --------------------编程问答-------------------- 如果用这种方法的话这里有篇文章。
http://www.jb51.net/html/200706/23/10455.htm --------------------编程问答-------------------- 开始走了变路,历时5个小时,终于解决了楼主的问题.
用ie打开aaa.html
运行 这个winform程序. 在winform的textbox里随便输入一串字符, 点击button, ie窗口中input id="t1" 的值被改为 winform中textbox的值.
增加引用dll:
mshtml
c:\windows\system32\SHDocVw.dll
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using mshtml;
namespace testWinIE
{
public partial class Form1 : Form
{
/*[DllImport("user32.dll")]
public static extern IntPtr FindWindow
(string sClassName,
string sWindowTitle);
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(
IntPtr hParent,
IntPtr hNext,
string sClassName,
string sWindowTitle);
[DllImport("user32.dll")]
public static extern int GetWindowTextLength(IntPtr hTxt); // handle to window or control with text
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, // handle to window or control with text
string lpString, // address of buffer for text
int nMaxCount // maximum number of characters to copy
);*/
/*开始我试图使用调用api的方式来使用c# winform程序与ie窗口进行通信, 是成功了,可以控制ie窗口和标准windows控件,
* 但是有个问题,控制不了文档区的元素,浪费了我好多时间。
* 我们做windows程序知道,windows下面都是窗口,一个文本框 classname为 Edit,一个button,等等等等.
* 而在ie的文档区,它却不是,害我用了很多方法浪费时间,包括把16进制编号都用上了,就是查不到。
* ie中的(准确地说,应该是web page中的htmlelement,比如input)它们不是标准windows控件
* 最后查资料到ms,得到了微软件的实现方法,走了弯路,历时近5个小时,解决了这个问题.
* fcuandy 2007-12-18
*/
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void test()
{
//IntPtr ieWin = FindWindow("IEFrame", "aaa - Microsoft Internet Explorer");
//IntPtr txtPtr = IntPtr.Zero;
//if (!ieWin.Equals(IntPtr.Zero))
//{
// MessageBox.Show("window has been found");
//txtPtr = FindWindowEx(ieWin, IntPtr.Zero, "IEFrame", null);
//txtPtr = FindWindowEx(ieWin,IntPtr.Zero, "Shell DocObject View", "");
//txtPtr = FindWindowEx(txtPtr,IntPtr.Zero , "Internet Explorer_Server", "");
//if (!txtPtr.Equals(IntPtr.Zero))
//{
/*
获得所有ie进程。因为windows下资源窗口使用ie内核,所以不光是我们通常指的web浏览器,它还包括你打开我的电脑这样的窗口
*/
SHDocVw.ShellWindows sws = new SHDocVw.ShellWindows();
//SHDocVw.InternetExplorer iw = SHDocVw. new SHDocVw.InternetExplorer();
/*遍历ie进程*/
foreach (SHDocVw.InternetExplorer iw in sws)
{
//MessageBox.Show(iw.LocationName);
/*
如果使用的窗口中正打开的是我的aaa.html
* 我这里就没有对窗口类型进行检测了,因为我的aaa.html它一定是ie打开的。
*/
if (iw.LocationName == "aaa.html")
{
//MessageBox.Show(iw.LocationName);
//HtmlDocument doc = iw.get (HtmlDocument)iw.Document;
//MessageBox.Show(doc.DomDocument.ToString());
mshtml.HTMLDocument doc = (mshtml.HTMLDocument)iw.Document;
//MessageBox.Show(((HTMLInputTextElement)doc.getElementById("t1")).value);
//ihtmldocument2接口.可以查看msdn6. 做法有点类似于js对页面htmlelement操作了。
((HTMLInputTextElement)doc.getElementById("t1")).value = textBox1.Text;
}
}
//int txtLen = GetWindowTextLength(txtPtr);
//MessageBox.Show(winTxt);
}
private void button1_Click(object sender, EventArgs e)
{
test();
}
}
}
aaa.html
<html id="aa">--------------------编程问答-------------------- 走了弯路,打错了.
<title>aaa</title>
<body>
<input id="t1" name="txtTest" />
</body>
</html>
回家吃饭了.楼主在使用这种方法时有问题可以post上来,大家一起参考.
补充:.NET技术 , ASP.NET