问题列表 - 第22985页

清除所有站点的WebBrowser控件的cookie,而不清除IE本身

编辑:据我所知,这个问题没有解决办法,这再次证明了一个人不应该使用C#的WebBrowser.我们在程序开始时发出警告标志,通知用户将清除IE的cookie.

我想要做的简短版本是标题.这是长版本.

我有一个复杂的问题,我相信我会收到很多猜测作为回应.为了将预期但不幸的无用猜测保持在最低限度,让我首先提一下这个问题的解决方案并不简单,所以简单的建议遗憾的是根本没有帮助,即使我很感激努力.

.NET WebBrowser组件基本上是IE本身,因此具有任何类型警告的解决方案几乎肯定不会起作用.我需要做的正是我正在做的事情,即使是一个看似微不足道的警告也会彻底打败这个目的.在探空傲慢的风险,我需要从别人谁真的有深入了解有关.NET web浏览器和/或WinInet的和/或如何使用Windows的底层系统从C#沟通...或如何封装C++代码帮助C#.

也就是说,我不希望有人为我这样做,我发现了一些有希望的提示,这些提示将在本期后面解释.

但首先......我想要实现的是这个.

我有一个Windows.Forms组件,其中包含一个WebBrowser控件.此控件需要:

  1. 清除所有网站的所有Cookie.
  2. 一个接一个地访问几个网站,并记录cookie并正确处理它们.这部分工作正常,所以我没有任何问题.
  3. 冲洗并重复...理论上永远.

现在,这是真正的问题.我需要清除所有这些cookie(对于任何和所有站点),但仅限于WebBrowser控件本身而不是IE正确使用的cookie.这种方法的根本原因当然是.NET WebBrowser控件 IE.但我是一个固执的年轻人,我坚持认为这是可能的,否则!;)

这就是我现在被困住的地方.

仅通过C#以编程方式清除WebBrowser控件的所有cookie是完全不可能的.必须使用DllImport和它附带的所有疯狂的东西.这个块可以用于此目的:

[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); 
Run Code Online (Sandbox Code Playgroud)

然后,在实际清除cookie的功能中:

InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);
Run Code Online (Sandbox Code Playgroud)

然后所有的cookie都被清除了,因此,我很高兴.该程序完全按照预期工作,除了它还清除IE的cookie,这是不允许发生的.

来自StackOverflower的一位同事(如果只是一句话),盛江在评论中提出了一个不同的问题,但没有进一步阐述:

"如果要隔离应用程序的cookie,则需要通过IDocHostUIHandler2 :: GetOverrideKeyPath覆盖Cache目录注册表设置"

我在互联网上浏览了IDocHostUIHandler2和GetOverrideKeyPath,但我不知道如何在C#中使用它们来将cookie与我的WebBrowser控件隔离开来.我对Windows注册表的体验仅限于RegEdit(所以我理解它是一个具有不同数据类型的树结构,但就此而言......例如,我没有深入了解注册表与IE的关系).

这是我在MSDN上挖掘的内容:

IDocHostUIHandler2 docs:http: //msdn.microsoft.com/en-us/library/aa753275%28VS.85%29.aspx

GetOverrideKeyPath docs:http: //msdn.microsoft.com/en-us/library/aa753274%28VS.85%29.aspx

我想我大致知道这些事情的作用,我只是不知道如何使用它们.

.net c# browser cookies internet-explorer

16
推荐指数
1
解决办法
9795
查看次数

椭圆绘制WPF动画

我正在开发一个矩形区域的控件,并在触发发生时在矩形区域中绘制一个椭圆.此控件将能够托管其他控件,如文本框,按钮等,以便在触发时围绕它们绘制圆圈.我希望将圆圈绘制为动画,就像用钢笔圈住内部控件一样.

我的问题是什么是实现这一目标的最佳方式.我一直在做一些研究,我可以使用WPF动画,或者我可以使用GDI +来完成任务.我是WPF动画的新手,所以这就是我提出这个问题的原因.

.net wpf animation drawing gdi+

5
推荐指数
1
解决办法
5339
查看次数

Form.Show() 不显示其子控件

我有一个表单,frmPleaseWait其中包含 aMarqueeProgressBar和 a Label,当 UI 在我们拥有的结构不良的应用程序中加载数据时,我想使用它们。

问题是frmPleaseWait.Show()显示表单但不显示其中的控件。它只是一个白色的矩形。现在frmPleaseWait.ShowDialog()显示子控件,但不允许 UI 加载其数据。

我缺少什么?下面是我正在尝试的代码片段。

        PleaseWait = new frmPleaseWait();
        PleaseWait.Show(this);

        // Set all available HUD values in HUD Object
        HUD.LastName = GetCurrentRowVal("LastName").Trim();
        HUD.FirstName = GetCurrentRowVal("FirstName").Trim();
        HUD.PersonId = Convert.ToInt32(GetCurrentRowVal("PersonID").Trim());
        HUD.SSn = GetCurrentRowVal("SSN").Trim();
        HUD.MiddleName = GetCurrentRowVal("MiddleName").Trim();
        HUD.MasterID = ConnectBLL.BLL.DriInterface.CheckForDriId(HUD.PersonId).ToString();

        // This loads numerous UserControls with data
        shellForm.FormPaint(HUD.PersonId);

        PleaseWait.Close();
Run Code Online (Sandbox Code Playgroud)

编辑

:

根据答案和我的尝试进行跟进。

这就是我所拥有的,但我得到了一个“Cross-Thread Exception如果pleaseWaitInstance.Location = parent.PointToScreen(Point.Empty); 我删除该行,它将运行,但它在我的屏幕的左上角运行并忽略应用程序的位置”。

    public partial class frmPleaseWait : XtraForm
{
    public frmPleaseWait() …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading winforms progress-bar

3
推荐指数
1
解决办法
6314
查看次数

如何验证网页是否被gzip压缩?

我计划配置weblogic的gzip servlet过滤器(使用weblogicx-gzip.jar)来gzip我的网页.

如何验证页面是否被发送到客户端gzip压缩?

gzip weblogic gzipstream

14
推荐指数
1
解决办法
7298
查看次数

尝试使用linq在第一次匹配后获取所有元素

如何在第一个没有"-"使用linq 开头的元素之后检索所有元素?

var arr = new[] {"-s1", "-s2", "va", "-s3", "va2", "va3"};
var allElementsAfterVA = from a in arr where ???? select a;
Run Code Online (Sandbox Code Playgroud)

我想allElementsAfterVA成为"-s3", "va2", "va3"

c# linq

10
推荐指数
1
解决办法
2824
查看次数

os.path.getmtime()不返回秒的分数

我为centos 5.3编译了python 2.6.4并发现了os.path.getmtime()或os.stat().m_time没有小数部分的问题.根据文档,如果os.stat_float_times()返回True,那么它应返回float值.在我的情况下,我确实看到它是浮动的,但没有分数部分(它是0).

In [3]: os.path.getmtime('/tmp') 
Out[3]: 1268339116.0

In [4]: os.stat('/tmp')
Out[4]: posix.stat_result(st_mode=17407, st_ino=508897L, st_dev=29952L, st_nlink=7, st_uid=0, st_gid=0, st_size=4096L, st_atime=1268101696, st_mtime=1268339116, st_ctime=1268339116)

In [5]: os.stat_float_times()
True

In [6]: os.stat('/tmp').st_mtime
Out[6]: 1268339116.0
Run Code Online (Sandbox Code Playgroud)

stat()输出看起来像一个int也很奇怪.在Windows上,我确实看到了一个具有相同python版本的小部分.我在colinux上运行centos,可能是扮演一个角色,还是一些python构建问题?我找不到任何针对通用colinux问题的点击.可能是colinux如何配置文件系统?在那种情况下我需要检查什么?

python linux centos

3
推荐指数
1
解决办法
1977
查看次数

简洁的getattr()方法,如果不是Python中的None,则使用它

我发现自己经常做以下事情:

attr = getattr(obj, 'attr', None)
if attr is not None:
    attr()
    # Do something, either attr(), or func(attr), or whatever
else:
    # Do something else
Run Code Online (Sandbox Code Playgroud)

有更多的pythonic写作方式吗?这是否更好?(至少没有表现,IMO.)

try:
    obj.attr() # or whatever
except AttributeError:
    # Do something else
Run Code Online (Sandbox Code Playgroud)

python

30
推荐指数
4
解决办法
2万
查看次数

我如何*阻止*Apache2设置Content-Type标头?

我有一个CGI脚本在stdout上打印以下内容:

print "Status: 302 Redirect\n";
print "Server: Apache-Coyote/1.1\n";
print "Location: $redirect\n";
print "Content-Length: 0\n";
print "Date: $date\n\n";
Run Code Online (Sandbox Code Playgroud)

$ redirect和$ date是合理的值.Apache2实际发送的内容还包括Content-Type:标头(text/plain).我已经在服务器配置文件中注释掉了DefaultType.

我正在尝试调试在没有发送Content-Type:标头时出现的下游问题.那么为了防止 Apache2添加内容类型标题,我必须执行什么神奇的咒语?

apache content-type header http

5
推荐指数
1
解决办法
4100
查看次数

ANTLR 歧义

我需要匹配ANTLR包含由 / 分隔的 2 个字段的消息,第一个字段可以有1..3数字,第二个字段可以有1..2数字,

这不起作用

msg: f1 '/' f2;

f1: DIGIT(DIGIT(DIGIT)?)? ;
f2: DIGIT(DIGIT)?
Run Code Online (Sandbox Code Playgroud)
  1. 在这种情况下,如何避免歧义?
  2. 有没有更优雅的方式来表达重复次数ANTLR

非常感谢克里斯

parsing antlr ambiguous-grammar

5
推荐指数
1
解决办法
553
查看次数

如何逃避单一报价?

如何'在JavaScript中逃避(单引号)?

这是我正在尝试使用它的地方:

<input type='text' id='abc' value='hel'lo'>
Run Code Online (Sandbox Code Playgroud)

上面代码的结果是在文本框中填充了"hel".我试图用'和'代替,但这就是我得到的.

<input type='text' id='abc' value='hel\'lo'>
Run Code Online (Sandbox Code Playgroud)

上面代码的结果是在文本框中填充了"hel \".

我怎样才能成功逃脱单引号?

html escaping

179
推荐指数
5
解决办法
29万
查看次数