自己动手编写一个VS插件(一)

作者:朱金灿

来源:http://blog.csdn.net/clever101

 

         最近计划开发一个VS插件来帮助自己加快开发速度,研究了一下VS的插件开发。下面配合插图说明一下如何开发一个VS插件。

 

 第一步:创建插件工程,具体如下图:

           第二步不用干啥,如下图:

       第三步:选择开发语言,这里我选的是C++/ATL,因为这是我最拿手的,当然你也可以选择C#,这里不建议你选择C++/CLR,因为这个几乎冷僻得没人用,一般网上也找不到相关的例程,如下图:

        第四步选择调用程序,第一个是必选的,第二个可选可不选,选上也无妨,如下图:

第五步输入插件名称和说明,如下图:

第六步设置用户界面的调用方式,这里简单设置为在宿主应用程序启动时加载,如下图:

第七步是填写关于信息,如下图:

第八步是单击完成,如下图:

        由于所生成的插件是一个com组件,需要注册才能使用,因此需要设置一个生成后事件:regsvr32$(OutDir)/$(ProjectName).dll,具体如下图:































### 如何通过 Chrome 插件实现对特定页面的持续监控 要实现对特定页面(如编制办公室网页或表单)的持续监控,可以利用现有的功能强大的 Chrome 扩展工具,或者自行开发定制化的插件来满足需求。 #### 使用现有扩展工具 种简单的方式是借助已有的 Chrome 插件完成此任务。例如,“Page Monitor” 是款专门用于监控网页内容变化的扩展[^2]。安装并配置该插件后,可以通过设置目标 URL 和指定需要检测的变化区域,让其定期检查所关注的网页是否有任何改动。旦发现变动,它会在浏览器的通知栏发出提示消息,这对于跟踪诸如价格波动、公告发布或是职位状态更新等情况特别适用。 #### 自定义开发解决方案 如果现成的插件无法完全匹配具体的需求,则可以选择自定义开发一个专属的 Chrome 插件。以下是构建此类应用的些关键技术要点: 1. **权限声明** 需要在 `manifest.json` 文件中请求必要的权限以便访问目标站点以及执行脚本注入等功能。这通常涉及 `"activeTab"` 或者更具体的网址模式匹配规则。 ```json { "name": "Custom Page Watcher", "version": "1.0", "description": "Monitors specific webpages for changes.", "permissions": ["tabs", "<all_urls>"], "background": { "scripts": ["background.js"] }, "content_scripts": [ { "matches": ["*://example.com/*"], // 替换为目标网站的实际地址 "js": ["contentScript.js"] } ], "browser_action": { "default_popup": "popup.html" }, "manifest_version": 2 } ``` 2. **后台逻辑编写 (Background Script)** 背景脚本负责定时触发刷新机制,并调用内容脚本来抓取最新的 DOM 结构进行比较分析。下面是一个简单的伪代码示例展示如何安排周期性的 HTTP 请求去获取远程资源的状态码和主体部分。 ```javascript chrome.alarms.create('checkForUpdates', { periodInMinutes: 5 }); chrome.alarms.onAlarm.addListener((alarm) => { if(alarm.name === 'checkForUpdates'){ fetch('http://target-site-url') .then(response => response.text()) .then(htmlContent => compareWithPreviousVersion(htmlContent)); } }); function compareWithPreviousVersion(newHtml){ let oldData = localStorage.getItem('lastKnownState'); if(oldData !== newHtml){ notifyUser(); localStorage.setItem('lastKnownState',newHtml); } } function notifyUser(){ console.log("Website has been updated!"); // 可在此处添加更多通知方式比如弹窗显示等 } ``` 3. **前端交互界面设计(Popup UI)** 提供给用户友好的图形化控制面板允许他们输入待监视的目标链接以及其他偏好选项。这部分可以用 HTML/CSS/JS 来制作静态布局再嵌入到 manifest 中作为 popup 的入口文件路径。 4. **数据存储与持久化处理(Local Storage / IndexedDB)** 对于那些希望保存历史记录或者长期对比差异的情况来说,在本地数据库里维护份副本显得尤为重要。这里推荐采用 WebStorage API 下面的 LocalStorage 方法来进行轻量级的数据缓存操作。 以上方法提供了两种途径——即选用成熟的第三方应用程序或者是自己动手打造个性化的监测方案——帮助达成针对特殊场合下的自动化监督目的。无论是哪条路线都离不开扎实的技术基础支持,因此建议开发者们不断积累经验并通过实践提高技能水平[^4]。 ```python import requests from bs4 import BeautifulSoup def check_webpage_changes(url, previous_content=None): try: res = requests.get(url) soup = BeautifulSoup(res.content,'html.parser') current_page_text=soup.body.getText().strip() if not previous_content or previous_content !=current_page_text : return True ,current_page_text else: return False,None except Exception as e: print(f"Error occurred while checking webpage:{e}") return None,None if __name__ == "__main__": url="https://www.example-official-office.gov/" changed,new_data=check_webpage_changes(url) if changed is not None and changed==True: with open('./webpage_snapshot.txt','w')as f: f.write(new_data) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clever101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值