首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#.NET Winform -获取当前的Chrome URL需要很长时间

C#.NET Winform是一种用于开发Windows桌面应用程序的编程语言和框架。获取当前的Chrome URL是指获取正在运行的Chrome浏览器的当前网页地址。

在C#.NET Winform中,可以使用一些方法来获取当前的Chrome URL。以下是一个示例代码:

代码语言:txt
复制
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace ChromeURLGetter
{
    public class ChromeURL
    {
        [DllImport("user32.dll", SetLastError = true)]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern int GetWindowText(IntPtr hWnd, string lpString, int nMaxCount);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern int GetWindowTextLength(IntPtr hWnd);

        [DllImport("user32.dll", SetLastError = true)]
        private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern bool CloseHandle(IntPtr hObject);

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, uint nSize, out int lpNumberOfBytesRead);

        private const int PROCESS_VM_READ = 0x0010;
        private const int MAX_WINDOW_TITLE_LENGTH = 256;

        public static string GetCurrentChromeURL()
        {
            IntPtr chromeMainWindowHandle = FindWindow("Chrome_WidgetWin_1", null);
            if (chromeMainWindowHandle == IntPtr.Zero)
            {
                return null; // Chrome窗口未找到
            }

            uint chromeProcessId;
            GetWindowThreadProcessId(chromeMainWindowHandle, out chromeProcessId);
            if (chromeProcessId == 0)
            {
                return null; // 无法获取Chrome进程ID
            }

            IntPtr chromeProcessHandle = OpenProcess(PROCESS_VM_READ, false, chromeProcessId);
            if (chromeProcessHandle == IntPtr.Zero)
            {
                return null; // 无法打开Chrome进程
            }

            IntPtr chromeUrlPointer;
            byte[] buffer = new byte[MAX_WINDOW_TITLE_LENGTH * 2];
            int bytesRead;
            bool success = ReadProcessMemory(chromeProcessHandle, chromeMainWindowHandle + 0x010F, buffer, (uint)buffer.Length, out bytesRead);
            if (!success || bytesRead == 0)
            {
                CloseHandle(chromeProcessHandle);
                return null; // 读取Chrome URL失败
            }

            string chromeUrl = System.Text.Encoding.Unicode.GetString(buffer, 0, bytesRead);
            chromeUrl = chromeUrl.Substring(0, chromeUrl.IndexOf('\0')); // 移除字符串中的空字符

            CloseHandle(chromeProcessHandle);
            return chromeUrl;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string currentURL = ChromeURL.GetCurrentChromeURL();
            Console.WriteLine("当前的Chrome URL是:" + currentURL);
        }
    }
}

这段代码通过调用Windows API来获取Chrome浏览器的主窗口句柄,然后获取Chrome进程ID,并打开该进程。接着,通过读取Chrome进程的内存,获取到当前网页的URL。

这是一个简单的示例,你可以根据实际需求进行修改和扩展。注意,这种方法可能会受到Chrome版本的影响,需要根据实际情况进行调整。

推荐的腾讯云相关产品:腾讯云服务器(CVM),腾讯云数据库(TencentDB),腾讯云函数计算(SCF),腾讯云容器服务(TKE),腾讯云人工智能(AI)等。你可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息和使用指南。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#.Net与MATLAB集成

、系统软件集成等方面略逊,因此将C# WinForm等与MATLAB结合起来,实现高效、便捷、集成数学分析是一个很好解决方案,而MATLAB混合编程则可以支持该方案实现。...MATLAB与C#.Net实现混合编程方式有两种,一种是将MATLAB脚本编译为.Net程序集(dll),然后C#.Net引用该程序集实现数据分析;另一种是C#调用MATLAB执行MATLAB脚本(m...两种集成方式各有优缺点,例如编译为.Net程序集,受限于.Net程序集版本等,且需要编译后使用,不利于版本更新;直接调用MATLAB引擎,则需要安装MATLAB软件。...方法执行代码,并可以获取到返回值。...,当MATLAB执行耗时或者出错时,不易排查,因为调用者仅能获取到执行结果,无法获取到MATLAB脚本中debug、info等信息,因此适用于算法成熟、固定场景。

1.5K70

CefSharp中c#和JavaScript交互读取电脑信息

与主要关注谷歌Chrome应用程序开发Chromium项目本身不同,CEF专注于在第三方应用程序中促进嵌入式浏览器用例。...CEF中大多数功能都具有默认实现,这些实现提供丰富功能,同时几乎不需要用户进行集成工作。目前,全球已有超过1亿个CEF安装实例嵌入到来自各种公司和行业产品中。...前言 有时我们在winform与wpf中嵌入浏览器,需要在页面上读取电脑上一些信息,这个时候就需要用到CefSharpRegisterJsObject进行注册方法然后供js进行调用了。...简单实例 我们在winform中嵌入页面中,显示电脑信息,电脑信息通过winform进行读取,js调用获取电脑信息方法,并将最终结果以json字符串形式传递到js端,js获取到这些信息并在页面上进行显示... 单击按钮,在Web页面上显示当前电脑信息 winform窗体代码 /// /

5.2K20
  • eml文件解析实例,简历信息抓取工具

    冲突 公司HR文职人员需要联系应聘者,并询问详细情况等,因此需要查看应聘者联系电话。...依次点击打开邮件来查看”手机号码“,操作费时,HR人员希望能够快速获取各应聘人员关键信息,例如应聘职位、工作地区、期望薪资等,并列出联系方式,可以对信息进行快速排序选择等,并方便电话联系应聘人员。...解决方案 该工具使用C#.Net开发,界面使用Winform来绘制。 HR将邮件批量导出为eml文件,并保存到一目录下,使用该工具对指定目录下eml文件进行解析,并列出关键信息。...此外可以查看选择邮件记录详细信息(类似邮件客户端阅读邮件),并可以导出到Excel文件中。...另, 有需要办公辅助工具开发朋友,可以联系我,探讨工作中遇到问题解决方案。

    2.4K70

    Windows桌面程序开发

    api实现(需要借助node-ffi调用dll解决),所以就对各个方案做对比做最后决策(其实还是在纠结用C#.net还是Electron,其它方案并不考虑)。...WPF和Winform最大区别在于WPF底层使用DirectX,Winform底层使用是GDI+,所以WPF图形界面上更胜一筹 GDI+(Graphics Device Interface)图形设备接口....NET Framework 优点 如果你是一位传统 .NET 开发者,希望快速构建和发布应用,没有时间学习.NET Core,那么 .NET Framework 对你来说是一个不错选择,.NET...这就是 .NET Framework 现状。当前版本.NET Framework 4.8 应该是.NET Framework最新版本。 将来不会再计划新版本.NET Framework。...结论 对C++开发不熟 所以C++方案就不考虑了 Java并不适合桌面开发,其它语言没用过也暂不考虑 C#Winform、WPF要想操作其它程序也需要调用DLL 和 用Electron区别不大,所以还是用

    10.8K10

    【愚公系列】2023年11月 Winform控件专题 Label控件详解

    展示如何在Label控件中使用AutoEllipsis属性:label1.Text = "这是一段很长很长文本,它将会超出Label控件显示区域,使用AutoEllipsis可以自动添加省略号。"...使用方式示例:this.BackColor = Color.Yellow;//创建一个Label控件Label lbl = new Label();lbl.Text = "这是一段很长很长文本,它将会超出...Cursor类有很多预定义光标类型,比如箭头、手型、光标等等。除此之外,也可以使用自定义光标。以下是一些常用Cursor类方法和属性:Current:获取或设置当前光标。...// 设置光标Cursor.Current = Cursors.WaitCursor;// 隐藏光标Cursor.Hide();// 显示光标Cursor.Show();// 获取当前光标的坐标Point...最后,将该控件添加到当前窗体中。感谢:给读者一封信我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    78911

    .NET桌面程序集成Web网页开发十种解决方案

    介绍 WinForm、WPF 集成 Web 网页多种技术方案之前,先了解一下浏览器内核。   ...不同浏览器内核对网页编写语法解释也有不同,因此同一网页在不同内核浏览器里渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核浏览器中测试网页显示效果原因。...支持获取Cookies较全面。 通过NeGet安装SDK时,运行时环境会被自动下载到当前项目的bin\debug 或者 bin\Release目录下。导致整个项目非常大,大约110M左右。...网页设计师和开发人员可以在创建外观现代桌面应用程序时重用他们经验和专业技能。 Sciter允许使用经过时间验证、健壮且灵活HTML和CSS来定义GUI,并使用GPU加速渲染。...而且在网页中调用本地接口、以及 aardio 与浏览器交互极其方便,例如直接调用 Javascript 函数,并且在 Javascript 中直接回调 aardio 函数,不需要任何复杂封装和中间件

    2.8K11

    C#开发BIMFACE系列52 CS客户端集成BIMFACE应用技术方案

    不同浏览器内核对网页编写语法解释也有不同,因此同一网页在不同内核浏览器里渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核浏览器中测试网页显示效果原因。...Webkit(Safari内核,Chrome内核原型,开源)  WebKit内核常见浏览器:Chrome、傲游浏览器3、Apple Safari (Win/Mac/iPhone/iPad)、Symbian...支持获取Cookies较全面。 通过NeGet安装SDK时,运行时环境会被自动下载到当前项目的bin\debug 或者 bin\Release目录下。导致整个项目非常大,大约110M左右。...运行WebView2时,首先需要下载并 WebView2 运行时安装程序。...WebView2 Runtime x86,x64自动识别,不需要手动设置。 WinForm、WPF、.NET Core 都可以用一个统一包。 实际项目应用效果如下图。

    4.6K10

    原来浏览器插件有这么多风险?

    ()会静默将用户当前正在查看页面截图,并以data URL形式返回。...但如果「被注入脚本网站」已经获得用户地理位置授权,插件不需要授权就能静默使用对应功能。 举个例子,如果百度地图向你请求「获取地理位置」授权,这很合理,你也大概率会同意。...那插件是否能不被察觉直接打开恶意网站呢? 答案是 —— 可以,我愿称其为「借尸还魂」之法。 很多朋友都会打开多个浏览器Tab,但常用可能就是其中几个,剩下Tab会闲置很长时间。...经常打开很多Tab 首先,插件通过以下代码筛选出闲置Tab: const tabs = await chrome.tabs.query({ // 筛选用户当前没使用Tab active: false...: await chrome.tabs.update(idleTab.id, { url, active: false, }); 恶意网站只需要在「做完坏事后」或「用户重新点击 闲置Tab 时

    16810

    WPFWinForm中加载网页几种方式及如何加载Flash库(WebBrowserCEF)

    windows 更新肯定会以Edge chromium内核代替IE内核,并且不需要重新下载Chrome浏览器,使用Edge也会有一样浏览体验。...DLL是不同 Windows Chrome FireFox 所以我们可以根据自己需求去安装,不用全部安装到PC上。...Registry.SetValue方法会自动创建不存在路径和值。 WebBrowser WPF下WebBrowser存在内存泄漏问题,所以这里用WinForm实现。...默认WebBrowser新打开窗口会用系统默认IE打开,并且我们也没法获取新窗口地址自行处理。 所以我们自定义WebBrowser保证能获取新窗口地址。...= eventArgs.Url; form1.Show(); } WinForm显示模糊解决办法 WinForm 对高分辨率屏幕适配并不是很好,当分辨率较高时,Windows 系统会将程序里面的字体进行缩放

    3.9K40

    WinForm嵌入Web网页解决方案

    如果未启动,则弹出提示信息告知用户需要打开客户端程序进行下载。这就是一个典型Web网页中启动客户端程序场景。...WinForm程序中集成网页基本原理就是通过一个包含类似浏览器功能控件,将Web网页载入并解析渲染出来。下面主要介绍 WinForm 集成 Web 网页几种实现方式。   ...不同浏览器内核对网页编写语法解释也有不同,因此同一网页在不同内核浏览器里渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核浏览器中测试网页显示效果原因。...Webkit(Safari内核,Chrome内核原型,开源)  WebKit内核常见浏览器:Chrome、傲游浏览器3、Apple Safari (Win/Mac/iPhone/iPad)、Symbian...支持获取Cookies较全面。 实际项目应用效果如下图。 呈现模型是三维BIM模型,里面用到了HTML5、CSS3、WebGL等新技术。

    4.5K11

    异步编程 In .NET

    IIS IO线程从上一步队列中获取请求,如果是需要ASP.NET处理,就会转交给CLR 线程池Worker 线程,IISIO线程继续返回重复做该步骤。...在上面的例子中80ms读取web service时间,大部份时间都是不需要cpu操作,这样cpu才可以被其它线程利用,如果不是一个读取web service操作,而是一个复杂计算操作,那你就等着...既然WinForm在性能上有这么大优势,那它还需要异步吗?   我们上面说是中小型WinForm,如果是大型系统呢?...WaitHanlde通常作为同步对象基类,并且可以利用它来阻塞线程,更多信息可以参考MSDN 。 借助于IAsyncResult帮助,我们就可以通过以下几种方式去获取当前所执行操作结果。...获取当前线程同步上下文对象可以使用SynchronizationContext.Current。

    1.3K81

    我攻克技术难题: 我是如何解决开发中Chrome插件问题

    大概有这样需求。 在搜索资源,或者查找解决棘手bug方法时候,会经历很长时间来回不断地翻阅一些网站,有的问题甚至半年后还需要重新来过。...那些曾经访问过且证明没有任何意义网页,会因为一个“优秀”标题而导致再次浪费我们时间。所以为什么我们不能拉黑它们呢?...市面上Chrome网站黑名单不少,比如有 UblackList,这个网站只能解决在搜索过程中不被检索到黑名单。而且如果是想屏蔽某一个具体网页,而不是整个网站,则需要单独加到黑名单。...于是就想能不能自己也开发一款自己Chrome插件 作为一名后端工程师,距离上次写前端代码还是刚毕业时候,时间成本也有限。不太可能为了写一款插件而去刻意去学前端代码。...function checkURL(url) { // 获取扩展目录中文件路径 var fileUrl = chrome.runtime.getURL('file.txt'); // 使用

    1.9K51

    我是如何开发一款属于自己chrome网站黑名单插件

    大概有这样需求。 在搜索资源,或者查找解决棘手bug方法时候,会经历很长时间来回不断地翻阅一些网站,有的问题甚至半年后还需要重新来过。...那些曾经访问过且证明没有任何意义网页,会因为一个“优秀”标题而导致再次浪费我们时间。所以为什么我们不能拉黑它们呢?...市面上Chrome网站黑名单不少,比如有 UblackList,这个网站只能解决在搜索过程中不被检索到黑名单。而且如果是想屏蔽某一个具体网页,而不是整个网站,则需要单独加到黑名单。...于是就想能不能自己也开发一款自己Chrome插件 作为一名后端工程师,距离上次写前端代码还是刚毕业时候,时间成本也有限。不太可能为了写一款插件而去刻意去学前端代码。...function checkURL(url) { // 获取扩展目录中文件路径 var fileUrl = chrome.runtime.getURL('file.txt'); // 使用

    94621

    【工具篇】在.Net中实现HTML生成图片或PDF几种方式

    前段时间由于项目上需求,要在.Net平台下实现把HTML内容生成图片或PDF文件功能,特意在网上研究了几种方案,这里记录一下以备日后再次使用。...WebBrowser 这种方案在开发时不依赖任务外部程序集和nuget包,部署时也不需要安装额外工具和服务,可以说是非常清爽了。...它借助了WinFormWebBrowser控件实现HTML内容渲染,并把渲染结果绘制在Bitmap中,进而保存成图片或PDF文件。...WebBrowser是Winform一个组件,在非Winform项目中运行会出现不可知异常,即使在Winform项目中,数据量比较大时候依然会出现卡死情况。...Puppeteer是由谷歌开源一个Node项目,它提供了和Chrome DevTools通信能力,基本上我们能在Chrome实现操作通过它API都可以实现,强大到让你不敢相信。

    2.7K30

    快手(AAU)更新记录v2.9.2.01

    web.rest.xmlClient com.picture; gdip; gdip.bitmap; wsock; wsock.tcp.client; 新增以下函数: fsys.list() //列出当前目录下文件...com.picture.printWindow() //后台抓图 com.picture.printClient() //后台抓图客户区 web.rest.client().lastResponseHeaders() //用于head方法获取...wsock.tcp.client().readTo() //读取到指定字符 wsock.tcp.client().readAll() //读取所有字符 inet.url.encode, inet.url.stringifyParameters...//改进符合 RFC 3986标准 inet.url.stringifyParameters() //改进支持自动排序 新增以下库process.command //类似thread.command...,不同是可跨进程方便交互调用函数 web.multipartFormData //用于更方便构建上传文件数据包 win.taskScheduler //用于创建计划任务, fsys.partFile

    77340
    领券