开机自启动
像咱们使用的软件都是可以实现开机自启动的,在咱们机房合作中也会有应用,不管你弄的是机房还是网吧,客户端和服务器端中的某一方必然是需要开机自启动的(要不然去上网还要打开软件再上,那网吧就赔死了),所以咱们只需要在自己的程序中添加几句代码就可以实现了。
将启动路径写入注册表
using System.Windows.Forms;
using Microsoft.Win32;
using System.IO;
public static void SetAutoStart()
{
try
{
string regPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
string path = Application.ExecutablePath; //将当前程序起动路径
string name = Path.GetFileName(path); //获得应用程序名称
var regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(regPath, true);
if (regKey == null) regKey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(regPath);
regKey.SetValue(name, path);
}
catch
{
}
}
写入注册表是需要系统管理员权限的,如果上面的方法不能使用,那么可以进行下面的操作:
1.在程序中添加程序清单文件:新建项->应用程序清单文件
2、打开刚刚新建的清单文件,按照下图修改UAC选项:
修改之后如果报错,那么就继续下面的操作:
3.在【解决方案资源管理器】中右键你的项目—>打开“属性”—>左边选择“安全性”—>把【启用ClickOnce安全设置】的对勾去掉:
之后就可以使用了
截图并分享
再说一个非常不错的功能,比如玩游戏啊什么的赢了,五杀了,超神了,我想截个图分享到qq空间啊,微信朋友圈啊,这个该怎么弄?一种是你需要去微信 公众号设置js借口安全域名,之后引入js文件。(如果页面启动的是http:那么要引用http://res.wx.qq.com/open/js/jweixin-1.0.0.js ,如果页面启用了https,务必要引入https://res.wx.qq.com/open/js/jweixin-1.0.0.js )
之后通过config接口注入权限验证配置:
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
然后通过ready接口处理成功验证,通过error接口处理失败:
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
分享接口:
wx.onMenuShareTimeline({
title: '', // 分享标题
link: '', // 分享链接
imgUrl: '', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
wx.onMenuShareAppMessage({
title: '', // 分享标题
desc: '', // 分享描述
link: '', // 分享链接
imgUrl: '', // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
页面源码:
<%--引入js文件--%>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<%--通过config接口注入权限验证配置--%>
<script>
wx.config({
debug: false,
appId: '${shakeMap.appId}',
timestamp: '${shakeMap.timestamp}',
nonceStr: '${shakeMap.nonceStr}',
signature: '${shakeMap.signature}',
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage'
]
});
wx.ready(function () {
<%--公共方法--%>
var shareData = {
title: '${title}',
desc: '${description}',
link: '${url}',
imgUrl: '${headImgUrl}',
success: function (res) {
//alert('已分享');
},
cancel: function (res) {
}
};
<%--分享给朋友接口--%>
wx.onMenuShareAppMessage({
title: '${title}',
desc: '${description}',
link: '${url}',
imgUrl: '${headImgUrl}',
trigger: function (res) {
// alert('用户点击发送给朋友');
},
success: function (res) {
//alert('已分享');
},
cancel: function (res) {
//alert('已取消');
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
<%--分享到朋友圈接口--%>
wx.onMenuShareTimeline(shareData);
});
<%--处理失败验证--%>
wx.error(function (res) {
alert("error: " + res.errMsg);
});
</script>
之后就可以实现分享到朋友圈了。这个还需要注册,稍微有些麻烦,那么我们可以使用第二种方法:引用一个插件:公子之物,这是b/s的插件,其中有一个html文件,这个就是我们需要的东西。但是怎么在c/s界面引用这个html文件呢?一开始我想的是创建一个webform窗体,让winform窗体引用webform窗体后将这个webform窗体show出来,但是这个方法不可行,后来又用了webBrowser控件(实现winform与webform交互的控件),但是还是不行,最后呢用了一句代码来解决了这个问题:
System.Diagnostics.Process.Start("explorer.exe", "http://localhost:49600/share.html")
这句话前一个参数是你默认的浏览器,后一个是你需要打开的网页(把文件夹中的html打开后会有一个网址,复制过来添加到这),之后就可以打开了。
那么怎么在winform中截屏呢?
//获得当前屏幕的大小
Rectangle rect = new Rectangle();
rect = Screen.GetWorkingArea(this);
//创建一个以当前屏幕为模板的图象
Graphics g1 = this.CreateGraphics();
//创建以屏幕大小为标准的位图
Image MyImage = new Bitmap(rect.Width, rect.Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
//得到屏幕的DC
IntPtr dc1 = g1.GetHdc();
//得到Bitmap的DC
IntPtr dc2 = g2.GetHdc();
//调用此API函数,实现屏幕捕获
BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);
//释放掉屏幕的DC
g1.ReleaseHdc(dc1);
//释放掉Bitmap的DC
g2.ReleaseHdc(dc2);
//以JPG文件格式来保存
MyImage.Save(@"Capture.jpg", ImageFormat.Jpeg);//写上自己存放的地方
MessageBox.Show("已经截屏!");
这个是截全屏,如果想按照自己想要的部分截屏,那么自己去找找代码,应该是不难写的,这里就不再写了。
那么怎么把图片放到浏览器中呢?我的想法是把图片先放到程序的某个文件夹中,每次分享之前先去判断文件夹中有没有图片,如果有就加载到html中,之后就可以将图片加载到浏览器中,之后就可以分享了。
还有其他一些功能:比如可以弄一个网吧/机房的全景图给顾客看(由于时间仓促,没有弄公子之物)这个只需要用几张图片就可以生成一个全景的图,不过唯一的缺点是有水印(因为没付费)。还有可以用gmap生成一个离线地图公子之物,这个本来是想弄一个定位并一键报警/警告 什么的,但是觉得作用也不大,而且也不是太好弄,就没弄,有兴趣的可以自己试着弄弄更好玩的功能。
机房合作的东西到此就介绍完了,通过三篇博客将机房合作创新点都写上了,希望这些能在机房合作中帮到你。
如果有用,请点个赞,不胜感激!