Thinkai's Blog

Autohotkey|Python|php|aardio|VOIP|IT 爱好者

Stream和byte[]互转 C# 2109

作者为 发表

编程

/// 将 Stream 转成 byte[]
public byte[] StreamToBytes(Stream stream)
{
    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes, 0, bytes.Length);
    // 设置当前流的位置为流的开始
    stream.Seek(0, SeekOrigin.Begin);
    return bytes;
}
/// 将 byte[] 转成 Stream

public Stream BytesToStream(byte[] bytes)
{
    Stream stream = new MemoryStream(bytes);
    return stream;
}


xml 序列化和反序列化 C# 2487

作者为 发表

编程

//把object序列化成xml字符串

public string Serialize(Type type,Object o)

{

    MemoryStream ms = new MemoryStream();

    XmlSerializer xmlserializer = new XmlSerializer(type);

    xmlserializer.Serialize(ms, o);

    StreamReader reader = new StreamReader(ms);

    return reader.ReadToEnd();

}


//把xml字符串反序列化成object

public Object Deserialize(Type type, string xmlstr)

{

    byte[] xmlArray = System.Text.Encoding.UTF8.GetBytes(xmlstr);

    MemoryStream ms = new MemoryStream(xmlArray);

    XmlSerializer xmlserializer = new XmlSerializer(type);

    return xmlserializer.Deserialize(ms);

}


xml、json互转 C# 2767

作者为 发表

编程

 using System;
 using System.Xml;
 using Newtonsoft.Json;
 

 public string xml2json(string xml)
 {
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(xml);
      return Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);
 }

 public string json2xml(string json)
 {
      XmlDocument doc = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(json);
      return doc.OuterXml;
 }


XML转数组Object 序列化和反序列化 AutoHotkey 2406

作者为 发表

Autohotkey

引用:[AHK_L] Save/Load Arrays

;示例
str =
(
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
)
xml_root_node := XA_LoadStr(str) ;从字符串加载xml 从文件用XA_Load(Path)
xml_obj := %xml_root_node% ;数组对象变量名是返回的根节点
MsgBox % xml_obj.to "`n" "<?xml version=""1.0"" encoding=""UTF-8""?>`n<" xml_root_node ">`n" . XA_ArrayToXML(xml_obj) . "`n</" xml_root_node ">"



XA_Save(Array, Path) {
FileDelete, % Path
FileAppend, % "<?xml version=""1.0"" encoding=""UTF-8""?>`n<" . Array . ">`n" . XA_ArrayToXML(Array) . "`n</" . Array . ">", % Path, UTF-8
If (ErrorLevel)
	Return 1
Return 0
}
XA_LoadStr(XMLText) {
  Local XMLObj, XMLRoot, Root1, Root2
  XMLObj    := XA_LoadXML(XMLText)
  XMLObj    := XMLObj.selectSingleNode("/*")
  XMLRoot   := XMLObj.nodeName
  %XMLRoot% := XA_XMLToArray(XMLObj.childNodes)

  Return XMLRoot
}

XA_Load(Path) {
  Local XMLText, XMLObj, XMLRoot, Root1, Root2

  If (!FileExist(Path))
	Return 1

  FileRead, XMLText, % Path

  XMLObj    := XA_LoadXML(XMLText)
  XMLObj    := XMLObj.selectSingleNode("/*")
  XMLRoot   := XMLObj.nodeName
  %XMLRoot% := XA_XMLToArray(XMLObj.childNodes)

  Return XMLRoot
}
XA_XMLToArray(nodes, NodeName="") {
   Obj := Object()

   for node in nodes
   {
      if (node.nodeName != "#text")  ;NAME
	  {
		If (node.nodeName == "Invalid_Name" && node.getAttribute("ahk") == "True")
		  NodeName := node.getAttribute("id")
		Else
		  NodeName := node.nodeName
	  }

      else ;VALUE
		  Obj := node.nodeValue

      if node.hasChildNodes
	  {
		;Same node name was used for multiple nodes
		If ((node.nextSibling.nodeName = node.nodeName || node.nodeName = node.previousSibling.nodeName) && node.nodeName != "Invalid_Name" && node.getAttribute("ahk") != "True")
		{
		  ;Create object
		  If (!node.previousSibling.nodeName)
		  {
			Obj[NodeName] := Object()
			ItemCount := 0
		  }

		  ItemCount++

		  ;Use the supplied ID if available
		  If (node.getAttribute("id") != "")
		    Obj[NodeName][node.getAttribute("id")] := XA_XMLToArray(node.childNodes, node.getAttribute("id"))

		  ;Use ItemCount if no ID was provided
		  Else
			Obj[NodeName][ItemCount] := XA_XMLToArray(node.childNodes, ItemCount)
	    }

		Else
		  Obj.Insert(NodeName, XA_XMLToArray(node.childNodes, NodeName))
	  }
   }

   return Obj
}
XA_LoadXML(ByRef data){
   o := ComObjCreate("MSXML2.DOMDocument.6.0")
   o.async := false
   o.LoadXML(data)
   return o
}
XA_ArrayToXML(theArray, tabCount=1, NodeName="") {
    Local tabSpace, extraTabSpace, tag, val, theXML, root
	tabCount++
    tabSpace := ""
    extraTabSpace := ""

	if (!IsObject(theArray)) {
	  root := theArray
	  theArray := %theArray%
    }

	While (A_Index < tabCount) {
        tabSpace .= "`t"
		extraTabSpace := tabSpace . "`t"
    }

	for tag, val in theArray {
        If (!IsObject(val))
		{
		  If (XA_InvalidTag(tag))
		    theXML .= "`n" . tabSpace . "<Invalid_Name id=""" . XA_XMLEncode(tag) . """ ahk=""True"">" . XA_XMLEncode(val) . "</Invalid_Name>"
		  Else
			theXML .= "`n" . tabSpace . "<" . tag . ">" . XA_XMLEncode(val) . "</" . tag . ">"
	    }

		Else
		{
		  If (XA_InvalidTag(tag))
		    theXML .= "`n" . tabSpace . "<Invalid_Name id=""" . XA_XMLEncode(tag) . """ ahk=""True"">" . "`n" . XA_ArrayToXML(val, tabCount, "") . "`n" . tabSpace . "</Invalid_Name>"
		  Else
		    theXML .= "`n" . tabSpace . "<" . tag . ">" . "`n" . XA_ArrayToXML(val, tabCount, "") . "`n" . tabSpace . "</" . tag . ">"
	    }
    }

	theXML := SubStr(theXML, 2)
	Return theXML
}
XA_InvalidTag(Tag) {
	Char1      := SubStr(Tag, 1, 1)
	Chars3     := SubStr(Tag, 1, 3)
	StartChars := "~``!@#$%^&*()_-+={[}]|\:;""'<,>.?/1234567890 	`n`r"
	Chars := """'<>=/ 	`n`r"

	Loop, Parse, StartChars
	{
		If (Char1 = A_LoopField)
		  Return 1
	}

	Loop, Parse, Chars
	{
		If (InStr(Tag, A_LoopField))
		  Return 1
	}

	If (Chars3 = "xml")
	  Return 1

	Return 0
}
XA_XMLEncode(Text) {
StringReplace, Text, Text, &, &, All
StringReplace, Text, Text, <, <, All
StringReplace, Text, Text, >, >, All
StringReplace, Text, Text, ", ", All
StringReplace, Text, Text, ', ', All
Return Text
}


首先项目按照用C#创建COM组件全过程等方法创建c#的类库项目,本项目需要引用System.Runtime.Serialization。

using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.IO;

namespace NBFS
{

    [Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]

    public interface NBFS_Interface
    {

        [DispId(1)]
        string DecodeBinaryXML(byte[] encodedXML);

        [DispId(2)]
        byte[] EncodeBinaryXML(string xml);

    }



    [Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),

    InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface NBFS_Events
    {



    }



    [Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),

      ClassInterface(ClassInterfaceType.None),
      ProgId("NBFS.BINXML"),
      ComSourceInterfaces(typeof(NBFS_Events))]

    public class BINXML : NBFS_Interface
    {
        private WcfBinaryCodec m_wcfBinaryCodec = new WcfBinaryCodec(Encoding.UTF8);

        public BINXML() { }

        public string DecodeBinaryXML(byte[] encodedXML)
        {
            if (encodedXML == null)
            {
                return "";
            }
            return m_wcfBinaryCodec.DecodeBinaryXML(encodedXML, false);
        }

        public byte[] EncodeBinaryXML(string xml)
        {
            if (String.IsNullOrEmpty(xml.Trim()))
            {
                return null;
            }
            return m_wcfBinaryCodec.EncodeBinaryXML(xml);
        }

    }




    public class WcfBinaryCodec
    {
        public WcfBinaryCodec()
        { }

        public WcfBinaryCodec(Encoding encoding)
        {
            m_encoding = encoding;
        }

        Encoding m_encoding = Encoding.UTF8;

        /// <summary>
        /// Decode a bytestream that was encoded by WCF's BinaryEncodingBindingElement.  Will throw if the bytestream does
        /// not decode properly or the result is not valid XML.  I/O streams are flushed but not closed.
        /// </summary>        
        /// <param name="explodeNewlines">if true, the returned string will be nicely indented according to 
        /// element depth, and each attribute will be placed on its own line</param>
        /// <returns></returns>
        public void DecodeBinaryXML(Stream binaryInput, Stream xmlOutput, bool? explodeNewlines)
        {
            // defaults
            var explode = explodeNewlines ?? false;

            // parse bytestream into the XML DOM
            var doc = new XmlDocument();
            using (var binaryReader = XmlDictionaryReader.CreateBinaryReader(binaryInput, WcfDictionaryBuilder.Dict, XmlDictionaryReaderQuotas.Max))
            {
                doc.Load(binaryReader);
            }

            // write document to the output stream with customized settings
            var settings = new XmlWriterSettings()
            {
                CheckCharacters = false,
                CloseOutput = false,
                ConformanceLevel = ConformanceLevel.Auto,
                Encoding = m_encoding,
                Indent = explode,
                IndentChars = "\t",
                NewLineChars = Environment.NewLine,
                NewLineHandling = explode ? NewLineHandling.Replace : NewLineHandling.None,
                NewLineOnAttributes = explode
            };
            using (var writer = XmlWriter.Create(xmlOutput, settings))
            {
                doc.Save(writer);
                writer.Flush();
                xmlOutput.Flush();
            }
        }

        public string DecodeBinaryXML(byte[] binaryInput, bool? explodeNewLines)
        {
            var input = new MemoryStream(binaryInput);
            var output = new MemoryStream();
            DecodeBinaryXML(input, output, explodeNewLines);
            output.Seek(0, SeekOrigin.Begin);
            return new StreamReader(output, m_encoding).ReadToEnd();
        }

        /// <summary>
        /// Encode a text stream into a binary XML stream compatible with WCF's BinaryEncodingBindingElement.  Will throw if 
        /// the input stream cannot be parsed into an XML document.  I/O streams are flushed but not closed.
        /// </summary>
        /// <param name="xmlInput"></param>
        /// <param name="binaryOutput"></param>
        public void EncodeBinaryXML(Stream xmlInput, Stream binaryOutput)
        {
            // parse string into the XML DOM
            var doc = new XmlDocument();
            doc.Load(xmlInput);

            // write bytestream
            using (var binaryWriter = XmlDictionaryWriter.CreateBinaryWriter(binaryOutput, WcfDictionaryBuilder.Dict, null, false))
            {
                doc.Save(binaryWriter);
                binaryWriter.Flush();
                binaryOutput.Flush();
            }
        }

        public byte[] EncodeBinaryXML(string xmlInput)
        {
            var input = new MemoryStream(m_encoding.GetBytes(xmlInput));
            var output = new MemoryStream();
            EncodeBinaryXML(input, output);
            return output.ToArray();
        }
    }

    public static class WcfDictionaryBuilder
    {
        private static XmlDictionary dict;

        public static XmlDictionary Dict
        {
            get { return dict; }
        }

        static WcfDictionaryBuilder()
        {
            dict = new XmlDictionary();
            dict.Add("mustUnderstand");
            dict.Add("Envelope");
            dict.Add("http://www.w3.org/2003/05/soap-envelope");
            dict.Add("http://www.w3.org/2005/08/addressing");
            dict.Add("Header");
            dict.Add("Action");
            dict.Add("To");
            dict.Add("Body");
            dict.Add("Algorithm");
            dict.Add("RelatesTo");
            dict.Add("http://www.w3.org/2005/08/addressing/anonymous");
            dict.Add("URI");
            dict.Add("Reference");
            dict.Add("MessageID");
            dict.Add("Id");
            dict.Add("Identifier");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/rm");
            dict.Add("Transforms");
            dict.Add("Transform");
            dict.Add("DigestMethod");
            dict.Add("Address");
            dict.Add("ReplyTo");
            dict.Add("SequenceAcknowledgement");
            dict.Add("AcknowledgementRange");
            dict.Add("Upper");
            dict.Add("Lower");
            dict.Add("BufferRemaining");
            dict.Add("http://schemas.microsoft.com/ws/2006/05/rm");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement");
            dict.Add("SecurityTokenReference");
            dict.Add("Sequence");
            dict.Add("MessageNumber");
            dict.Add("http://www.w3.org/2000/09/xmldsig#");
            dict.Add("http://www.w3.org/2000/09/xmldsig#enveloped-signature");
            dict.Add("KeyInfo");
            dict.Add("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
            dict.Add("http://www.w3.org/2001/04/xmlenc#");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/sc");
            dict.Add("DerivedKeyToken");
            dict.Add("Nonce");
            dict.Add("Signature");
            dict.Add("SignedInfo");
            dict.Add("CanonicalizationMethod");
            dict.Add("SignatureMethod");
            dict.Add("SignatureValue");
            dict.Add("DataReference");
            dict.Add("EncryptedData");
            dict.Add("EncryptionMethod");
            dict.Add("CipherData");
            dict.Add("CipherValue");
            dict.Add("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
            dict.Add("Security");
            dict.Add("Timestamp");
            dict.Add("Created");
            dict.Add("Expires");
            dict.Add("Length");
            dict.Add("ReferenceList");
            dict.Add("ValueType");
            dict.Add("Type");
            dict.Add("EncryptedHeader");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd");
            dict.Add("RequestSecurityTokenResponseCollection");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust#BinarySecret");
            dict.Add("http://schemas.microsoft.com/ws/2006/02/transactions");
            dict.Add("s");
            dict.Add("Fault");
            dict.Add("MustUnderstand");
            dict.Add("role");
            dict.Add("relay");
            dict.Add("Code");
            dict.Add("Reason");
            dict.Add("Text");
            dict.Add("Node");
            dict.Add("Role");
            dict.Add("Detail");
            dict.Add("Value");
            dict.Add("Subcode");
            dict.Add("NotUnderstood");
            dict.Add("qname");
            dict.Add("");
            dict.Add("From");
            dict.Add("FaultTo");
            dict.Add("EndpointReference");
            dict.Add("PortType");
            dict.Add("ServiceName");
            dict.Add("PortName");
            dict.Add("ReferenceProperties");
            dict.Add("RelationshipType");
            dict.Add("Reply");
            dict.Add("a");
            dict.Add("http://schemas.xmlsoap.org/ws/2006/02/addressingidentity");
            dict.Add("Identity");
            dict.Add("Spn");
            dict.Add("Upn");
            dict.Add("Rsa");
            dict.Add("Dns");
            dict.Add("X509v3Certificate");
            dict.Add("http://www.w3.org/2005/08/addressing/fault");
            dict.Add("ReferenceParameters");
            dict.Add("IsReferenceParameter");
            dict.Add("http://www.w3.org/2005/08/addressing/reply");
            dict.Add("http://www.w3.org/2005/08/addressing/none");
            dict.Add("Metadata");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/08/addressing");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/08/addressing/fault");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/06/addressingex");
            dict.Add("RedirectTo");
            dict.Add("Via");
            dict.Add("http://www.w3.org/2001/10/xml-exc-c14n#");
            dict.Add("PrefixList");
            dict.Add("InclusiveNamespaces");
            dict.Add("ec");
            dict.Add("SecurityContextToken");
            dict.Add("Generation");
            dict.Add("Label");
            dict.Add("Offset");
            dict.Add("Properties");
            dict.Add("Cookie");
            dict.Add("wsc");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/sc");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/sc/dk");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/sc/sct");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/trust/RST/SCT");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/trust/RSTR/SCT");
            dict.Add("RenewNeeded");
            dict.Add("BadContextToken");
            dict.Add("c");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/sc/dk");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/sc/sct");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/SCT");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT/Renew");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/SCT/Renew");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT/Cancel");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/SCT/Cancel");
            dict.Add("http://www.w3.org/2001/04/xmlenc#aes128-cbc");
            dict.Add("http://www.w3.org/2001/04/xmlenc#kw-aes128");
            dict.Add("http://www.w3.org/2001/04/xmlenc#aes192-cbc");
            dict.Add("http://www.w3.org/2001/04/xmlenc#kw-aes192");
            dict.Add("http://www.w3.org/2001/04/xmlenc#aes256-cbc");
            dict.Add("http://www.w3.org/2001/04/xmlenc#kw-aes256");
            dict.Add("http://www.w3.org/2001/04/xmlenc#des-cbc");
            dict.Add("http://www.w3.org/2000/09/xmldsig#dsa-sha1");
            dict.Add("http://www.w3.org/2001/10/xml-exc-c14n#WithComments");
            dict.Add("http://www.w3.org/2000/09/xmldsig#hmac-sha1");
            dict.Add("http://www.w3.org/2001/04/xmldsig-more#hmac-sha256");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/sc/dk/p_sha1");
            dict.Add("http://www.w3.org/2001/04/xmlenc#ripemd160");
            dict.Add("http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p");
            dict.Add("http://www.w3.org/2000/09/xmldsig#rsa-sha1");
            dict.Add("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
            dict.Add("http://www.w3.org/2001/04/xmlenc#rsa-1_5");
            dict.Add("http://www.w3.org/2000/09/xmldsig#sha1");
            dict.Add("http://www.w3.org/2001/04/xmlenc#sha256");
            dict.Add("http://www.w3.org/2001/04/xmlenc#sha512");
            dict.Add("http://www.w3.org/2001/04/xmlenc#tripledes-cbc");
            dict.Add("http://www.w3.org/2001/04/xmlenc#kw-tripledes");
            dict.Add("http://schemas.xmlsoap.org/2005/02/trust/tlsnego#TLS_Wrap");
            dict.Add("http://schemas.xmlsoap.org/2005/02/trust/spnego#GSS_Wrap");
            dict.Add("http://schemas.microsoft.com/ws/2006/05/security");
            dict.Add("dnse");
            dict.Add("o");
            dict.Add("Password");
            dict.Add("PasswordText");
            dict.Add("Username");
            dict.Add("UsernameToken");
            dict.Add("BinarySecurityToken");
            dict.Add("EncodingType");
            dict.Add("KeyIdentifier");
            dict.Add("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
            dict.Add("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#HexBinary");
            dict.Add("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Text");
            dict.Add("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#GSS_Kerberosv5_AP_REQ");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#GSS_Kerberosv5_AP_REQ1510");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID");
            dict.Add("Assertion");
            dict.Add("urn:oasis:names:tc:SAML:1.0:assertion");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-rel-token-profile-1.0.pdf#license");
            dict.Add("FailedAuthentication");
            dict.Add("InvalidSecurityToken");
            dict.Add("InvalidSecurity");
            dict.Add("k");
            dict.Add("SignatureConfirmation");
            dict.Add("TokenType");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#ThumbprintSHA1");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKey");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#EncryptedKeySHA1");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLID");
            dict.Add("AUTH-HASH");
            dict.Add("RequestSecurityTokenResponse");
            dict.Add("KeySize");
            dict.Add("RequestedTokenReference");
            dict.Add("AppliesTo");
            dict.Add("Authenticator");
            dict.Add("CombinedHash");
            dict.Add("BinaryExchange");
            dict.Add("Lifetime");
            dict.Add("RequestedSecurityToken");
            dict.Add("Entropy");
            dict.Add("RequestedProofToken");
            dict.Add("ComputedKey");
            dict.Add("RequestSecurityToken");
            dict.Add("RequestType");
            dict.Add("Context");
            dict.Add("BinarySecret");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/spnego");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/tlsnego");
            dict.Add("wst");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/trust");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/trust/RST/Issue");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/trust/RSTR/Issue");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/trust/CK/PSHA1");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/trust/SymmetricKey");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/security/trust/Nonce");
            dict.Add("KeyType");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/trust/SymmetricKey");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/04/trust/PublicKey");
            dict.Add("Claims");
            dict.Add("InvalidRequest");
            dict.Add("RequestFailed");
            dict.Add("SignWith");
            dict.Add("EncryptWith");
            dict.Add("EncryptionAlgorithm");
            dict.Add("CanonicalizationAlgorithm");
            dict.Add("ComputedKeyAlgorithm");
            dict.Add("UseKey");
            dict.Add("http://schemas.microsoft.com/net/2004/07/secext/WS-SPNego");
            dict.Add("http://schemas.microsoft.com/net/2004/07/secext/TLSNego");
            dict.Add("t");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/Issue");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/Issue");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/SymmetricKey");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/CK/PSHA1");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/Nonce");
            dict.Add("RenewTarget");
            dict.Add("CancelTarget");
            dict.Add("RequestedTokenCancelled");
            dict.Add("RequestedAttachedReference");
            dict.Add("RequestedUnattachedReference");
            dict.Add("IssuedTokens");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/Renew");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/Cancel");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/trust/PublicKey");
            dict.Add("Access");
            dict.Add("AccessDecision");
            dict.Add("Advice");
            dict.Add("AssertionID");
            dict.Add("AssertionIDReference");
            dict.Add("Attribute");
            dict.Add("AttributeName");
            dict.Add("AttributeNamespace");
            dict.Add("AttributeStatement");
            dict.Add("AttributeValue");
            dict.Add("Audience");
            dict.Add("AudienceRestrictionCondition");
            dict.Add("AuthenticationInstant");
            dict.Add("AuthenticationMethod");
            dict.Add("AuthenticationStatement");
            dict.Add("AuthorityBinding");
            dict.Add("AuthorityKind");
            dict.Add("AuthorizationDecisionStatement");
            dict.Add("Binding");
            dict.Add("Condition");
            dict.Add("Conditions");
            dict.Add("Decision");
            dict.Add("DoNotCacheCondition");
            dict.Add("Evidence");
            dict.Add("IssueInstant");
            dict.Add("Issuer");
            dict.Add("Location");
            dict.Add("MajorVersion");
            dict.Add("MinorVersion");
            dict.Add("NameIdentifier");
            dict.Add("Format");
            dict.Add("NameQualifier");
            dict.Add("Namespace");
            dict.Add("NotBefore");
            dict.Add("NotOnOrAfter");
            dict.Add("saml");
            dict.Add("Statement");
            dict.Add("Subject");
            dict.Add("SubjectConfirmation");
            dict.Add("SubjectConfirmationData");
            dict.Add("ConfirmationMethod");
            dict.Add("urn:oasis:names:tc:SAML:1.0:cm:holder-of-key");
            dict.Add("urn:oasis:names:tc:SAML:1.0:cm:sender-vouches");
            dict.Add("SubjectLocality");
            dict.Add("DNSAddress");
            dict.Add("IPAddress");
            dict.Add("SubjectStatement");
            dict.Add("urn:oasis:names:tc:SAML:1.0:am:unspecified");
            dict.Add("xmlns");
            dict.Add("Resource");
            dict.Add("UserName");
            dict.Add("urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName");
            dict.Add("EmailName");
            dict.Add("urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress");
            dict.Add("u");
            dict.Add("ChannelInstance");
            dict.Add("http://schemas.microsoft.com/ws/2005/02/duplex");
            dict.Add("Encoding");
            dict.Add("MimeType");
            dict.Add("CarriedKeyName");
            dict.Add("Recipient");
            dict.Add("EncryptedKey");
            dict.Add("KeyReference");
            dict.Add("e");
            dict.Add("http://www.w3.org/2001/04/xmlenc#Element");
            dict.Add("http://www.w3.org/2001/04/xmlenc#Content");
            dict.Add("KeyName");
            dict.Add("MgmtData");
            dict.Add("KeyValue");
            dict.Add("RSAKeyValue");
            dict.Add("Modulus");
            dict.Add("Exponent");
            dict.Add("X509Data");
            dict.Add("X509IssuerSerial");
            dict.Add("X509IssuerName");
            dict.Add("X509SerialNumber");
            dict.Add("X509Certificate");
            dict.Add("AckRequested");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/rm/AckRequested");
            dict.Add("AcksTo");
            dict.Add("Accept");
            dict.Add("CreateSequence");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence");
            dict.Add("CreateSequenceRefused");
            dict.Add("CreateSequenceResponse");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponse");
            dict.Add("FaultCode");
            dict.Add("InvalidAcknowledgement");
            dict.Add("LastMessage");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage");
            dict.Add("LastMessageNumberExceeded");
            dict.Add("MessageNumberRollover");
            dict.Add("Nack");
            dict.Add("netrm");
            dict.Add("Offer");
            dict.Add("r");
            dict.Add("SequenceFault");
            dict.Add("SequenceTerminated");
            dict.Add("TerminateSequence");
            dict.Add("http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence");
            dict.Add("UnknownSequence");
            dict.Add("http://schemas.microsoft.com/ws/2006/02/tx/oletx");
            dict.Add("oletx");
            dict.Add("OleTxTransaction");
            dict.Add("PropagationToken");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wscoor");
            dict.Add("wscoor");
            dict.Add("CreateCoordinationContext");
            dict.Add("CreateCoordinationContextResponse");
            dict.Add("CoordinationContext");
            dict.Add("CurrentContext");
            dict.Add("CoordinationType");
            dict.Add("RegistrationService");
            dict.Add("Register");
            dict.Add("RegisterResponse");
            dict.Add("ProtocolIdentifier");
            dict.Add("CoordinatorProtocolService");
            dict.Add("ParticipantProtocolService");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wscoor/CreateCoordinationContext");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wscoor/CreateCoordinationContextResponse");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wscoor/Register");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wscoor/RegisterResponse");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wscoor/fault");
            dict.Add("ActivationCoordinatorPortType");
            dict.Add("RegistrationCoordinatorPortType");
            dict.Add("InvalidState");
            dict.Add("InvalidProtocol");
            dict.Add("InvalidParameters");
            dict.Add("NoActivity");
            dict.Add("ContextRefused");
            dict.Add("AlreadyRegistered");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat");
            dict.Add("wsat");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Completion");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Durable2PC");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Volatile2PC");
            dict.Add("Prepare");
            dict.Add("Prepared");
            dict.Add("ReadOnly");
            dict.Add("Commit");
            dict.Add("Rollback");
            dict.Add("Committed");
            dict.Add("Aborted");
            dict.Add("Replay");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Commit");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Rollback");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Committed");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Aborted");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Prepare");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Prepared");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/ReadOnly");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/Replay");
            dict.Add("http://schemas.xmlsoap.org/ws/2004/10/wsat/fault");
            dict.Add("CompletionCoordinatorPortType");
            dict.Add("CompletionParticipantPortType");
            dict.Add("CoordinatorPortType");
            dict.Add("ParticipantPortType");
            dict.Add("InconsistentInternalState");
            dict.Add("mstx");
            dict.Add("Enlistment");
            dict.Add("protocol");
            dict.Add("LocalTransactionId");
            dict.Add("IsolationLevel");
            dict.Add("IsolationFlags");
            dict.Add("Description");
            dict.Add("Loopback");
            dict.Add("RegisterInfo");
            dict.Add("ContextId");
            dict.Add("TokenId");
            dict.Add("AccessDenied");
            dict.Add("InvalidPolicy");
            dict.Add("CoordinatorRegistrationFailed");
            dict.Add("TooManyEnlistments");
            dict.Add("Disabled");
            dict.Add("ActivityId");
            dict.Add("http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics");
            dict.Add("http://docs.oasis-open.org/wss/oasis-wss-kerberos-token-profile-1.1#Kerberosv5APREQSHA1");
            dict.Add("http://schemas.xmlsoap.org/ws/2002/12/policy");
            dict.Add("FloodMessage");
            dict.Add("LinkUtility");
            dict.Add("Hops");
            dict.Add("http://schemas.microsoft.com/net/2006/05/peer/HopCount");
            dict.Add("PeerVia");
            dict.Add("http://schemas.microsoft.com/net/2006/05/peer");
            dict.Add("PeerFlooder");
            dict.Add("PeerTo");
            dict.Add("http://schemas.microsoft.com/ws/2005/05/routing");
            dict.Add("PacketRoutable");
            dict.Add("http://schemas.microsoft.com/ws/2005/05/addressing/none");
            dict.Add("http://schemas.microsoft.com/ws/2005/05/envelope/none");
            dict.Add("http://www.w3.org/2001/XMLSchema-instance");
            dict.Add("http://www.w3.org/2001/XMLSchema");
            dict.Add("nil");
            dict.Add("type");
            dict.Add("char");
            dict.Add("boolean");
            dict.Add("byte");
            dict.Add("unsignedByte");
            dict.Add("short");
            dict.Add("unsignedShort");
            dict.Add("int");
            dict.Add("unsignedInt");
            dict.Add("long");
            dict.Add("unsignedLong");
            dict.Add("float");
            dict.Add("double");
            dict.Add("decimal");
            dict.Add("dateTime");
            dict.Add("string");
            dict.Add("base64Binary");
            dict.Add("anyType");
            dict.Add("duration");
            dict.Add("guid");
            dict.Add("anyURI");
            dict.Add("QName");
            dict.Add("time");
            dict.Add("date");
            dict.Add("hexBinary");
            dict.Add("gYearMonth");
            dict.Add("gYear");
            dict.Add("gMonthDay");
            dict.Add("gDay");
            dict.Add("gMonth");
            dict.Add("integer");
            dict.Add("positiveInteger");
            dict.Add("negativeInteger");
            dict.Add("nonPositiveInteger");
            dict.Add("nonNegativeInteger");
            dict.Add("normalizedString");
            dict.Add("ConnectionLimitReached");
            dict.Add("http://schemas.xmlsoap.org/soap/envelope/");
            dict.Add("Actor");
            dict.Add("Faultcode");
            dict.Add("Faultstring");
            dict.Add("Faultactor");
            dict.Add("Detail");
        }
    }

}

然后生成解决方案,找到.net的命令行,用regasm.exe /codebase xxxxx.dll的方式注册com控件,就可以用其他语言调用了。


下面是ahk的使用示例:

;string DecodeBinaryXML(array encodedXML)
;array EncodeBinaryXML(string xml)
binarray := BinArr_FromFile("二进制.txt") ;从文件读取字节流
str := mycom.DecodeBinaryXML(binarray) ;转换成明文
binarray2 := mycom.EncodeBinaryXML(str) ;再编码回二进制
BinArr_ToFile(binarray2, "二进制2.txt")

MsgBox % str


 BinArr_FromString(str) {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 2 ; adTypeText
	oADO.Mode := 3 ; adModeReadWrite
	oADO.Open
	oADO.Charset := "UTF-8"
	oADO.WriteText(str)

	oADO.Position := 0
	oADO.Type := 1 ; adTypeBinary
	oADO.Position := 3 ; Skip UTF-8 BOM
	return oADO.Read, oADO.Close
}

BinArr_FromFile(FileName) {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 1 ; adTypeBinary
	oADO.Open
	oADO.LoadFromFile(FileName)
	return oADO.Read, oADO.Close
}

BinArr_Join(Arrays*) {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 1 ; adTypeBinary
	oADO.Mode := 3 ; adModeReadWrite
	oADO.Open
	For i, arr in Arrays
		oADO.Write(arr)
	oADO.Position := 0
	return oADO.Read, oADO.Close
}

BinArr_ToString(BinArr, Encoding := "UTF-8") {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 1 ; adTypeBinary
	oADO.Mode := 3 ; adModeReadWrite
	oADO.Open
	oADO.Write(BinArr)

	oADO.Position := 0
	oADO.Type := 2 ; adTypeText
	oADO.Charset  := Encoding
	return oADO.ReadText, oADO.Close
}

BinArr_ToFile(BinArr, FileName) {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 1 ; adTypeBinary
	oADO.Open
	oADO.Write(BinArr)
	oADO.SaveToFile(FileName, 2)
	oADO.Close
}


C#源码下载

2016年7月25日直播Autohotkey GUI部分视频 4939

作者为 发表

AHK直播录播

去年录的GUI部分的直播教程,抛砖引玉。当时念的单词parse,人懒就不后期修改了,见谅。

IE添加受信站点 Autohotkey 2383

作者为 发表

Autohotkey

i := 0
Loop, Reg, HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges, K
{
	ti := RegExReplace(A_LoopRegName,"Range","")
	if (ti>i)
		i := ti
}
list =
(
192.168.9.1
192.168.9.2
192.168.9.3
192.168.9.4
192.168.9.5
)
Loop, Parse, list, `n, `r
{
	if A_LoopField
	{
		i++
		RegWrite, REG_SZ, HKCU, % "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range" i, :Range, % A_LoopField
		RegWrite, REG_DWORD, HKCU, % "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range" i, http, 0x2
	}
}


通过文件对象复制二进制文件(读写) Autohotkey 9799

作者为 发表

Autohotkey

FileGetSize, size, 1.jpg
file := FileOpen("1.jpg","r")
readbytes := file.RawRead(buff,size)
file.close()
file2 := FileOpen("2.jpg","w")
writebytes := file2.RawWrite(&buff,readbytes)
file2.close()


兼容性仅测试通过在32位Autohotkey版本

GZIP_DecompressFile("test.txt", ret)
MsgBox % ret

GZIP_DecompressFile(file, ByRef ret, encoding:="utf-8"){
	body := BinArr_FromFile(file)
	VarSetCapacity(data, size := body.MaxIndex() + 1)
	DllCall("oleaut32\SafeArrayAccessData", "ptr", ComObjValue(body), "ptr*", pdata)
	DllCall("RtlMoveMemory", "ptr", &data, "ptr", pdata, "ptr", size)
	DllCall("oleaut32\SafeArrayUnaccessData", "ptr", ComObjValue(body))
	size := GZIP_DecompressBuffer(data, size)
	ret := StrGet(&data, size, encoding)
}


BinArr_FromFile(FileName) {
	oADO := ComObjCreate("ADODB.Stream")

	oADO.Type := 1 ; adTypeBinary
	oADO.Open
	oADO.LoadFromFile(FileName)
	return oADO.Read, oADO.Close
}

GZIP_DecompressBuffer( ByRef var, nSz ) { ; 'Microsoft GZIP Compression DLL' SKAN 20-Sep-2010
; Decompress routine for 'no-name single file GZIP', available in process memory.
; Forum post :  www.autohotkey.com/forum/viewtopic.php?p=384875#384875
; Modified by Lexikos 25-Apr-2015 to accept the data size as a parameter.

	; ---------- Added by tmplinshi ----------
	static hModule, _
	If !hModule {
		hModule := DllCall("LoadLibrary", "Str", "gzip.dll", "Ptr")
		_ := { base: {__Delete: "GZIP_DecompressBuffer"} }
	}
	If !_
		Return DllCall("FreeLibrary", "Ptr", hModule)
	; ---------- / Added by tmplinshi ----------

 vSz :=  NumGet( var,nsz-4 ), VarSetCapacity( out,vsz,0 )
 DllCall( "GZIP\InitDecompression" )
 DllCall( "GZIP\CreateDecompression", UIntP,CTX, UInt,1 )
 If ( DllCall( "GZIP\Decompress", UInt,CTX, UInt,&var, UInt,nsz, UInt,&Out, UInt,vsz
    , UIntP,input_used, UIntP,output_used ) = 0 && ( Ok := ( output_used = vsz ) ) )
      VarSetCapacity( var,64 ), VarSetCapacity( var,0 ), VarSetCapacity( var,vsz,32 )
    , DllCall( "RtlMoveMemory", UInt,&var, UInt,&out, UInt,vsz )
 DllCall( "GZIP\DestroyDecompression", UInt,CTX ),  DllCall( "GZIP\DeInitDecompression" )
Return Ok ? vsz : 0
}

GZIP_CompressBuffer(ByRef var, nSz ){
    static hModule, _
    If !hModule {
        hModule := DllCall("LoadLibrary", "Str", "gzip.dll", "Ptr")
        _ := { base: {__Delete: "GZIP_CompressBuffer"} }
    }
    If !_
        Return DllCall("FreeLibrary", "Ptr", hModule)
 vSz :=  NumGet( var,nsz-4 ), VarSetCapacity( out,vsz,0 )
 DllCall( "GZIP\InitCompression" )
 DllCall( "GZIP\CreateCompression", UIntP,CTX, UInt,1 )
 If ( DllCall( "GZIP\Compress", UInt,CTX, UInt,&var, UInt,nsz, UInt,&Out, UInt,vsz
    , UIntP,input_used, UIntP,output_used ) = 0 && ( Ok := ( output_used = vsz ) ) )
      VarSetCapacity( var,64 ), VarSetCapacity( var,0 ), VarSetCapacity( var,vsz,32 )
    , DllCall( "RtlMoveMemory", UInt,&var, UInt,&out, UInt,vsz )
 DllCall( "GZIP\DestroyCompression", UInt,CTX ),  DllCall( "GZIP\DeInitCompression" )
Return Ok ? vsz : 0
}


Excel简单一键求和 Autohotkey 5032

作者为 发表

Autohotkey

MButton::
xl := ComObjActive("Excel.Application")
col := xl.Selection.Address ;选择的单元格
RegExMatch(col,"\$(\w+)\$(\d*)", m)
xl.Selection.Value := "=SUM($" m1 "$1:$" m1 "$" m2-1 ")"
return



友情链接:Autohotkey中文帮助Autohotkey官网Autohotkey中文网联系作者免GooglePlay APK下载

 主题设计 • skyfrit.com  Thinkai's Blog | 保留所有权利

43 queries in 1.340 seconds |