远程桌面快速访问
我们可能多台服务器需要远程访问,但我们很少能记住IP地址,那么我可以通过远程的桌面配置另存为放在桌面,直接进行访问即可,这样子我们就可以知道哪个是访问、
图片示例


这样子我们不用使用第三方软件,就可以很方便整理了。
远程桌面版本小技巧
服务器版本越高,远程用户体验越好,我之前用win7发现卡卡的,然后切换成2012发现速度会流畅很多,这是因为新版肯定加很多代码进行优化
技术,软件,生活
我们可能多台服务器需要远程访问,但我们很少能记住IP地址,那么我可以通过远程的桌面配置另存为放在桌面,直接进行访问即可,这样子我们就可以知道哪个是访问、
这样子我们不用使用第三方软件,就可以很方便整理了。
服务器版本越高,远程用户体验越好,我之前用win7发现卡卡的,然后切换成2012发现速度会流畅很多,这是因为新版肯定加很多代码进行优化
public class WebBrowserHostUIHandler : Native.IDocHostUIHandler
{
private const uint E_NOTIMPL = 0x80004001;
private const uint S_OK = 0;
private const uint S_FALSE = 1;
public WebBrowserHostUIHandler(WebBrowser browser)
{
if (browser == null)
throw new ArgumentNullException("browser");
Browser = browser;
browser.LoadCompleted += OnLoadCompleted;
browser.Navigated += OnNavigated;
IsWebBrowserContextMenuEnabled = true;
Flags |= HostUIFlags.ENABLE_REDIRECT_NOTIFICATION;
}
public WebBrowser Browser { get; private set; }
public HostUIFlags Flags { get; set; }
public bool IsWebBrowserContextMenuEnabled { get; set; }
public bool ScriptErrorsSuppressed { get; set; }
private void OnNavigated(object sender, NavigationEventArgs e)
{
SetSilent(Browser, ScriptErrorsSuppressed);
}
private void OnLoadCompleted(object sender, NavigationEventArgs e)
{
Native.ICustomDoc doc = Browser.Document as Native.ICustomDoc;
if (doc != null)
{
doc.SetUIHandler(this);
}
}
uint Native.IDocHostUIHandler.ShowContextMenu(int dwID, Native.POINT pt, object pcmdtReserved, object pdispReserved)
{
return IsWebBrowserContextMenuEnabled ? S_FALSE : S_OK;
}
uint Native.IDocHostUIHandler.GetHostInfo(ref Native.DOCHOSTUIINFO info)
{
info.dwFlags = (int)Flags;
info.dwDoubleClick = 0;
return S_OK;
}
uint Native.IDocHostUIHandler.ShowUI(int dwID, object activeObject, object commandTarget, object frame, object doc)
{
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.HideUI()
{
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.UpdateUI()
{
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.EnableModeless(bool fEnable)
{
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.OnDocWindowActivate(bool fActivate)
{
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.OnFrameWindowActivate(bool fActivate)
{
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.ResizeBorder(Native.COMRECT rect, object doc, bool fFrameWindow)
{
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.TranslateAccelerator(ref System.Windows.Forms.Message msg, ref Guid group, int nCmdID)
{
return S_FALSE;
}
uint Native.IDocHostUIHandler.GetOptionKeyPath(string[] pbstrKey, int dw)
{
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.GetDropTarget(object pDropTarget, out object ppDropTarget)
{
ppDropTarget = null;
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.GetExternal(out object ppDispatch)
{
ppDispatch = Browser.ObjectForScripting;
return S_OK;
}
uint Native.IDocHostUIHandler.TranslateUrl(int dwTranslate, string strURLIn, out string pstrURLOut)
{
pstrURLOut = null;
return E_NOTIMPL;
}
uint Native.IDocHostUIHandler.FilterDataObject(IDataObject pDO, out IDataObject ppDORet)
{
ppDORet = null;
return E_NOTIMPL;
}
public static void SetSilent(WebBrowser browser, bool silent)
{
Native.IOleServiceProvider sp = browser.Document as Native.IOleServiceProvider;
if (sp != null)
{
Guid IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E");
object webBrowser;
sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out webBrowser);
if (webBrowser != null)
{
webBrowser.GetType().InvokeMember("Silent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.PutDispProperty, null, webBrowser, new object[] { silent });
}
}
}
}
internal static class Native
{
[ComImport, Guid("BD3F23C0-D43E-11CF-893B-00AA00BDCE1A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IDocHostUIHandler
{
[PreserveSig]
uint ShowContextMenu(int dwID, POINT pt, [MarshalAs(UnmanagedType.Interface)] object pcmdtReserved, [MarshalAs(UnmanagedType.Interface)] object pdispReserved);
[PreserveSig]
uint GetHostInfo(ref DOCHOSTUIINFO info);
[PreserveSig]
uint ShowUI(int dwID, [MarshalAs(UnmanagedType.Interface)] object activeObject, [MarshalAs(UnmanagedType.Interface)] object commandTarget, [MarshalAs(UnmanagedType.Interface)] object frame, [MarshalAs(UnmanagedType.Interface)] object doc);
[PreserveSig]
uint HideUI();
[PreserveSig]
uint UpdateUI();
[PreserveSig]
uint EnableModeless(bool fEnable);
[PreserveSig]
uint OnDocWindowActivate(bool fActivate);
[PreserveSig]
uint OnFrameWindowActivate(bool fActivate);
[PreserveSig]
uint ResizeBorder(COMRECT rect, [MarshalAs(UnmanagedType.Interface)] object doc, bool fFrameWindow);
[PreserveSig]
uint TranslateAccelerator(ref System.Windows.Forms.Message msg, ref Guid group, int nCmdID);
[PreserveSig]
uint GetOptionKeyPath([Out, MarshalAs(UnmanagedType.LPArray)] string[] pbstrKey, int dw);
[PreserveSig]
uint GetDropTarget([In, MarshalAs(UnmanagedType.Interface)] object pDropTarget, [MarshalAs(UnmanagedType.Interface)] out object ppDropTarget);
[PreserveSig]
uint GetExternal([MarshalAs(UnmanagedType.IDispatch)] out object ppDispatch);
[PreserveSig]
uint TranslateUrl(int dwTranslate, [MarshalAs(UnmanagedType.LPWStr)] string strURLIn, [MarshalAs(UnmanagedType.LPWStr)] out string pstrURLOut);
[PreserveSig]
uint FilterDataObject(IDataObject pDO, out IDataObject ppDORet);
}
[StructLayout(LayoutKind.Sequential)]
internal struct DOCHOSTUIINFO
{
public int cbSize;
public int dwFlags;
public int dwDoubleClick;
public IntPtr dwReserved1;
public IntPtr dwReserved2;
}
[StructLayout(LayoutKind.Sequential)]
internal struct COMRECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential)]
internal class POINT
{
public int x;
public int y;
}
[ComImport, Guid("3050F3F0-98B5-11CF-BB82-00AA00BDCE0B"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface ICustomDoc
{
[PreserveSig]
int SetUIHandler(IDocHostUIHandler pUIHandler);
}
[ComImport, Guid("6D5140C1-7436-11CE-8034-00AA006009FA"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IOleServiceProvider
{
[PreserveSig]
uint QueryService([In] ref Guid guidService, [In] ref Guid riid, [MarshalAs(UnmanagedType.IDispatch)] out object ppvObject);
}
}
[Flags]
public enum HostUIFlags
{
DIALOG = 0x00000001,
DISABLE_HELP_MENU = 0x00000002,
NO3DBORDER = 0x00000004,
SCROLL_NO = 0x00000008,
DISABLE_SCRIPT_INACTIVE = 0x00000010,
OPENNEWWIN = 0x00000020,
DISABLE_OFFSCREEN = 0x00000040,
FLAT_SCROLLBAR = 0x00000080,
DIV_BLOCKDEFAULT = 0x00000100,
ACTIVATE_CLIENTHIT_ONLY = 0x00000200,
OVERRIDEBEHAVIORFACTORY = 0x00000400,
CODEPAGELINKEDFONTS = 0x00000800,
URL_ENCODING_DISABLE_UTF8 = 0x00001000,
URL_ENCODING_ENABLE_UTF8 = 0x00002000,
ENABLE_FORMS_AUTOCOMPLETE = 0x00004000,
ENABLE_INPLACE_NAVIGATION = 0x00010000,
IME_ENABLE_RECONVERSION = 0x00020000,
THEME = 0x00040000,
NOTHEME = 0x00080000,
NOPICS = 0x00100000,
NO3DOUTERBORDER = 0x00200000,
DISABLE_EDIT_NS_FIXUP = 0x00400000,
LOCAL_MACHINE_ACCESS_CHECK = 0x00800000,
DISABLE_UNTRUSTEDPROTOCOL = 0x01000000,
HOST_NAVIGATES = 0x02000000,
ENABLE_REDIRECT_NOTIFICATION = 0x04000000,
USE_WINDOWLESS_SELECTCONTROL = 0x08000000,
USE_WINDOWED_SELECTCONTROL = 0x10000000,
ENABLE_ACTIVEX_INACTIVATE_MODE = 0x20000000,
DPI_AWARE = 0x40000000
}
private WebBrowserHostUIHandler _wbHandler;
_wbHandler = new WebBrowserHostUIHandler(WebViewControl);
WebViewControl就是对应的WebView类名,c++ 也有类似方法。其实不用太关心代码细节,这个都是com接口,微软有一些文档介绍,我记得以前我用c++找到过,写过类似的代码,这份代码是从老外那里直接复制,这样子就不需要用winform webview了。后面我会介绍用js的方法屏蔽右键
我从网上下载了一个汉化版本,发现安装包安装后卸载程序会报毒,不知道为什么,于是我直接找到inno setup官网下载重新打包就不会报毒了.
下载官网版本不带中文简体,那么从官网下载语言包,然后放在目录,同时脚本也要指向这个语言包
语言包下载地址(百度网盘;提取码5wcp),因为官网有的时候打不开,你下载直接放在C:\Program Files (x86)\Inno Setup 6\Languages的目录
[Languages]
Name: "ChineseSimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
自己一直用阿里云ECS,认为就是一台可以远程的连接的电脑,但后面接触到网站,挂机宝,发现价格区别很大,所以对vps与云主机区别不是很清楚。
VPS: 一台真正电脑虚拟多台电脑,跟我们自己装虚拟机差不多,只是他们更加系统化,可以整体管理。那么其实所有资源都是共享这台的电脑,那么这台真正的物理电脑宕机,那么所有虚拟电脑都挂了,比喻8G的内存,用户买的2G,那么我卖4个,但一般有超卖。所以你购买他们产品都是有剩余个数,别人买了一个坑, 那么就少了一个坑。
云主机:整合各种资源,CPU,硬盘,内存,集成在一起,你可以理解多台电脑,为一群人服务,每个人资源通过前面你购买进行分配。VPS是一对多,云主机是多对多,这样子好处非常方便扩容,而且更加稳定,能更加合理利用资源。基本公司用都是云主机,个人挂软件和博客可能用vps偏多。
上面只是自己肤浅理解,但大概差不多这个意思,vps由于共享IP,IP可能被污染,比喻登录微信,那么可能这个IP挂了很多微信,你登录微信软件,可能就出现异常之类。云主机我们可以单独买IP地址,vps 没有看到这个买IP地址这个说法。vps价格要比云主机价格便宜很多,如果挂软件选择vps,如果希望更加稳定的话,我觉得云主机更好。
最近用网页比较多,本来一直想把前端学习,但总没有静下来学习。所以慢慢把一些认为重要的知识点记录下来,我不想学习什么框架,我只要本质的东西
我认为只是一个描述的数据结构,比纯文本更加丰富,下面一段话是维基百科里面,突然猜想word描述文字应该和html类似的技术,因为他word可以很方便转换html,只是描述方法不一样
超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被众多网站用于设计网页、网页应用程序以及移动应用程序的用户界面[3]。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。HTML描述了一个网站的结构语义随着线索的呈现,使之成为一种标记语言而非编程语言。
HTML元素是构建网站的基石。HTML允许嵌入图像与对象,并且可以用于创建交互式表单,它被用来结构化信息——例如标题、段落和列表等等,也可用来在一定程度上描述文档的外观和语义。HTML的语言形式为尖括号包围的HTML元素(如<html>
),浏览器使用HTML标签和脚本来诠释网页内容,但不会将它们显示在页面上。
HTML可以嵌入如JavaScript的脚本语言,它们会影响HTML网页的行为。网页浏览器也可以引用层叠样式表(CSS)来定义文本和其它元素的外观与布局。维护HTML和CSS标准的组织万维网联盟(W3C)鼓励人们使用CSS替代一些用于表现的HTML元素[4]。
我觉得html布局太过于复杂,因为我从windows或者android界面开发过来,突然去写html感觉不是很适应,找不到合适的布局标签来描述界面,比喻用wpf我默认用grid来简单描述大的界面很容易,然后填充控件就可以了,对其也没有那么复杂
。不过基本都是通用的知识,html貌似没有提供那么直接的东西,必须通过div 或者 table 结合 css 来实现,对于新手要做稍微复杂的界面有点绕。不过这是他强大的原因吧。
后续会慢慢补齐文章,布局和对齐,虽然我一直不是很喜欢写界面,更加喜欢业务逻辑代码,但是偶尔写一下也有点意思
我们开发内容经常会变动,界面模块经常会增加功能,这个时候就可以考虑用webview来开发,比喻常见音乐播放器,QQ音乐,酷狗音乐,网易云音乐等等 PC端开发都是基于webview开发的,你用类似查看窗口工具,就可以看到他们的窗口类名,要么就是基于ie weview控件的,要么基于chrome webview控件。
直接添加webview控件即可,控件宽度和高度就看你需求了,自己稍微研究一下就可以了。
我们肯定会用到js 调用c#代码,主要通过window.external 来访问c#方法,后面我在这块代码补充起来,现在写博客是在MAC,没法帖代码
记得最开始在深圳上班第一家公司是做在线教育,那个时候PC项目采用c++ 加 webview 来做PC端,从无到有自己摸索出来。想不到现在又用这个技术实现云插件。所以知识这个东西,只要明白本质就可以了,知道方案,用什么语音实现并重要。多看书,多积累一些知识点是不会错的。