public static DOCXField[] GetSignatureFields(string DocxFile)
        {
            int rc;
            int NumOfFields = 0;

            SAPIContext ctxSigField = new SAPIContextClass();

            rc = SAPI.SignatureFieldEnumInit(
                hSession,
                ctxSigField,
                SAPI_ENUM_FILE_TYPE.SAPI_ENUM_FILE_OFFICE_XML_PACKAGE,
                DocxFile,
                0,
                ref NumOfFields);

            if (rc != 0)
            {
                throw new Exception("Failed in SAPISignatureFieldEnumInit (" + rc.ToString("X") + ")");
            }

            //There are no signature fields
            if (NumOfFields == 0)
            {
                return(null);
            }

            DOCXField[] Fields = new DOCXField[NumOfFields];

            for (int i = 0; i < NumOfFields; i++)
            {
                Fields[i] = new DOCXField();

                //Get Signature Field Handle
                rc = SAPI.SignatureFieldEnumCont(hSession, ctxSigField, out Fields[i].hSigField);
                if (rc != 0)
                {
                    throw new Exception("Failed in SignatureFieldEnumCont (" + rc.ToString("X") + ")");
                }


                //Get Signature Field Details
                rc = SAPI.SignatureFieldInfoGet(
                    hSession,
                    Fields[i].hSigField,
                    Fields[i].sSettings,
                    Fields[i].sInfo);

                if (rc != 0)
                {
                    throw new Exception("Failed in SignatureFieldInfoGet (" + rc.ToString("X") + ")");
                }
            }

            SAPI.ContextRelease(ctxSigField);

            return(Fields);
        }
        public static void SignField(DOCXField Field)
        {
            int rc = SAPI.SignatureFieldSign(hSession, Field.hSigField, 0);

            if (rc != 0)
            {
                throw new Exception("Failed in SignatureFieldSign (" + rc.ToString("X") + ")");
            }
        }
 private void lstFields_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (lstFields.SelectedIndex >= 0)
     {
         DOCXField fld = (DOCXField)lstFields.SelectedItem;
         if (fld.sInfo.IsSigned != 0)
         {
             btnSign.Enabled = false;
         }
         else
         {
             btnSign.Enabled = true;
         }
     }
     else
     {
         btnSign.Enabled = false;
     }
 }
 public static void SignField(DOCXField Field)
 {
     int rc = SAPI.SignatureFieldSign(hSession, Field.hSigField, 0);
     if (rc != 0) throw new Exception("Failed in SignatureFieldSign (" + rc.ToString("X") + ")");
 }
        public static DOCXField[] GetSignatureFields(string DocxFile)
        {
            int rc;
            int NumOfFields = 0;

            SAPIContext ctxSigField = new SAPIContextClass();

            rc = SAPI.SignatureFieldEnumInit(
                hSession,
                ctxSigField,
                SAPI_ENUM_FILE_TYPE.SAPI_ENUM_FILE_OFFICE_XML_PACKAGE,
                DocxFile,
                0,
                ref NumOfFields);

            if (rc != 0) throw new Exception("Failed in SAPISignatureFieldEnumInit (" + rc.ToString("X") + ")");

            //There are no signature fields
            if (NumOfFields == 0) return null;

            DOCXField[] Fields = new DOCXField[NumOfFields];

            for (int i = 0; i < NumOfFields; i++)
            {
                Fields[i] = new DOCXField();

                //Get Signature Field Handle
                rc = SAPI.SignatureFieldEnumCont(hSession, ctxSigField, out Fields[i].hSigField);
                if (rc != 0) throw new Exception("Failed in SignatureFieldEnumCont (" + rc.ToString("X") + ")");

                //Get Signature Field Details
                rc = SAPI.SignatureFieldInfoGet(
                    hSession,
                    Fields[i].hSigField,
                    Fields[i].sSettings,
                    Fields[i].sInfo);

                if (rc != 0) throw new Exception("Failed in SignatureFieldInfoGet (" + rc.ToString("X") + ")");

            }

            SAPI.ContextRelease(ctxSigField);

            return Fields;
        }