MsOUnprotect C# Quellcode
Der Quellcode musste etwas angepasst werden, dass er auf der Homepage richtig angezeigt und eingebunden werden kann.
Er kann somit nicht 1 zu 1 in Visual Studio übernommen werden (Zusätzliche Zeilenumbrüche).
Es fehlen auch sämtliche Objekte, die zum Ausführen des Quellcodes erforderlich sind.
Gerne kann ich euch das Original zukommen lassen. Schreibt mir hierzu einfach über das Kontaktformular.
using UnprotectMsOFiles.Properties;
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Windows.Forms;
namespace ExcelUnprotect
{
public partial class Form1 : Form
{
#region Init
DragDropClass DragDropFile = new DragDropClass();
public Form1(){
InitializeComponent();
this.pnl_DragDrop.DragDrop += new DragEventHandler(this.pnl_DragDrop_DragDrop);
this.pnl_DragDrop.DragEnter += new DragEventHandler(this.pnl_DragDrop_DragEnter);
}
#endregion
#region FileInput
private void pnl_DragDrop_DragEnter(object sender, DragEventArgs e){
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.All;
else
e.Effect = DragDropEffects.None;
}
private void pnl_DragDrop_DragDrop(object sender, DragEventArgs e){
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files){
FileReadDone(file);
}
}
private void pnl_DragDrop_Click(object sender, EventArgs e){
if (openFileDialog.ShowDialog() == DialogResult.OK){
FileReadDone(openFileDialog.FileName);
}
}
#endregion
#region Processing
private void FileReadDone(string file){
Reset_Form(null, null);
//Get the file info
DragDropFile.FileName = Path.GetFileNameWithoutExtension(file);
DragDropFile.FilePath = Path.GetDirectoryName(file);
DragDropFile.FileExtension = Path.GetExtension(file);
String timeStamp = DateTime.Now.ToString("HHmmssddMMyy");
DragDropFile.FileTempPath = DragDropFile.FilePath + @"\UMOF_" + timeStamp + ¶
"_" + DragDropFile.FileName;
DragDropFile.FileTempZip = DragDropFile.FileTempPath + @"\" + ¶
DragDropFile.FileName + ".zip";
lbl_DragDropFile.Text = file;
//Lokale Variablen
int countfoundprotect = 0;
string xmlcontent = "";
String[] arrexcel = { ".xlsx", ".xlsm", ".xltx", ".xltm" };
String[] arrword = { ".docx", ".docm", ".odt", ".dotx" };
if (arrexcel.Contains(DragDropFile.FileExtension)){
DragDropFile.arr_excelword[0] = true;
picbox1.Image = Resources.excel;
}else if (arrword.Contains(DragDropFile.FileExtension)){
DragDropFile.arr_excelword[1] = true;
picbox1.Image = Resources.word;
}
//Fehlerausgabe
lbl_infosheetcount.Text = "Keine geschützten Blätter oder Datei gefunden";
lbl_infosheetcount.BackColor = Color.Yellow;
//Wenn Excel Datei
if (DragDropFile.arr_excelword[0] == true){
copytozip(file);
//xml_Dateischutz prüfen
if (File.Exists(DragDropFile.FileTempPath + @"\xl\workbook.xml")){
xmlcontent = File.ReadAllText(DragDropFile.FileTempPath + @"\xl\workbook.xml");
if (xmlcontent.Contains("workbookProtection")){
clb_xmlfiles.Items.Add(Path.GetFileNameWithoutExtension("Arbeitsmappenschutz ¶
von '" + DragDropFile.FileName + "' aufheben?"));
clb_xmlfiles.SetItemCheckState((0), CheckState.Checked);
DragDropFile.arr_xmlfiles[0] = true;
countfoundprotect++;
}else{
clb_xmlfiles.Items.Add(Path.GetFileNameWithoutExtension("Arbeitsmappenschutz ¶
von '" + DragDropFile.FileName + "' nicht vorhanden."));
clb_xmlfiles.SetItemCheckState((0), CheckState.Unchecked);
DragDropFile.arr_xmlfiles[0] = false;
}
}
//xml_Arbeitsblätter einlesen
int intwhile_i = 1;
while (intwhile_i < 501){
if (File.Exists(DragDropFile.FileTempPath + @"\xl\worksheets\sheet" + ¶
intwhile_i + ".xml")){
xmlcontent = File.ReadAllText(DragDropFile.FileTempPath + ¶
@"\xl\worksheets\sheet" + intwhile_i + ".xml");
if (xmlcontent.Contains("sheetProtection")){
clb_xmlfiles.Items.Add(Path.GetFileNameWithoutExtension ¶
("Blattschutz von 'sheet" + intwhile_i + "' aufheben?"));
clb_xmlfiles.SetItemCheckState((intwhile_i), CheckState.Checked);
DragDropFile.arr_xmlfiles[intwhile_i] = true;
countfoundprotect++;
}else{
clb_xmlfiles.Items.Add(Path.GetFileNameWithoutExtension("Blattschutz von ¶
'sheet" + intwhile_i + "' nicht vorhanden."));
clb_xmlfiles.SetItemCheckState((intwhile_i), CheckState.Unchecked);
DragDropFile.arr_xmlfiles[intwhile_i] = false;
}
intwhile_i++;
}else{
intwhile_i = 501;
}
}
}else if (DragDropFile.arr_excelword[1] == true){
copytozip(file);
//xml_Dateischutz prüfen
if (File.Exists(DragDropFile.FileTempPath + @"\word\settings.xml")){
xmlcontent = File.ReadAllText(DragDropFile.FileTempPath + @"\word\settings.xml");
if (xmlcontent.Contains("w:documentProtection")){
clb_xmlfiles.Items.Add(Path.GetFileNameWithoutExtension("Dokumentenschutz ¶
von '" + DragDropFile.FileName + "' aufheben?"));
clb_xmlfiles.SetItemCheckState((0), CheckState.Checked);
DragDropFile.arr_xmlfiles[0] = true;
countfoundprotect++;
}else{
clb_xmlfiles.Items.Add(Path.GetFileNameWithoutExtension("Dokumentenschutz ¶
von '" + DragDropFile.FileName + "' nicht vorhanden."));
clb_xmlfiles.SetItemCheckState((0), CheckState.Unchecked);
DragDropFile.arr_xmlfiles[0] = false;
}
}
}else{
lbl_infosheetcount.Text = "Dateiendung '" + DragDropFile.FileExtension + "' ¶
wird nicht unterstützt";
lbl_infosheetcount.BackColor = Color.IndianRed;
}
if (countfoundprotect != 0){
cmd_run.Enabled = true;
lbl_infosheetcount.Text = countfoundprotect.ToString() + " geschützte(s) ¶
Blätter oder Datei gefunden.";
lbl_infosheetcount.BackColor = Color.Green;
lbl_processinfo.Visible = true;
}
}
private void cmd_run_Click(object sender, EventArgs e){
Cursor = Cursors.WaitCursor;
clb_xmlfiles_SelectedIndexChanged(sender, e);
if (DragDropFile.arr_excelword[0] == true){
//excel_xml_Dateischutz aufheben
if (clb_xmlfiles.GetItemChecked(0)){
update_xmlfile(DragDropFile.FileTempPath + @"\xl\workbook.xml", ¶
"workbookProtection");
}
//excel_xml_Arbeitsblätter Schutz aufheben
int i = 1;
while (i < clb_xmlfiles.Items.Count){
if (clb_xmlfiles.GetItemChecked(i)){
update_xmlfile(DragDropFile.FileTempPath + @"\xl\worksheets\sheet" + ¶
(i) + ".xml", "sheetProtection");
}
i++;
}
}else if (DragDropFile.arr_excelword[1] == true){
//word_xml_Dateischutz aufheben
if (clb_xmlfiles.GetItemChecked(0)){
update_xmlfile(DragDropFile.FileTempPath + @"\word\settings.xml", ¶
"w:documentProtection");
}
}
ZipFile.CreateFromDirectory(DragDropFile.FileTempPath, ¶
DragDropFile.FileTempPath + ".zip");
File.Copy(DragDropFile.FileTempPath + ".zip", DragDropFile.FileTempPath + ¶
DragDropFile.FileExtension);
File.Delete(DragDropFile.FileTempPath + ".zip");
MessageBox.Show("Die Datei '" + DragDropFile.FileTempPath + ¶
DragDropFile.FileExtension + "' wurde erfolgreich abgelegt");
Reset_Form(null, null);
}
private void copytozip(string file){
// file copy
Directory.CreateDirectory(DragDropFile.FileTempPath);
File.Copy(file, DragDropFile.FileTempZip);
//Zip Entpacken und löschen
ZipFile.ExtractToDirectory(DragDropFile.FileTempZip, DragDropFile.FileTempPath);
File.Delete(DragDropFile.FileTempZip);
}
private void update_xmlfile(string filepath, string strkeyword){
string newxmlcontent = "";
string xmlcontent = "";
xmlcontent = File.ReadAllText(filepath);
if (xmlcontent.Contains(strkeyword)){
string[] xmlsubs = xmlcontent.Split('<');
foreach (string xmlsub in xmlsubs)
{
if ((!xmlsub.Contains(strkeyword)) && (xmlsub != ""))
{
newxmlcontent += "<" + xmlsub;
}
}
File.WriteAllText(filepath, newxmlcontent);
}
}
#endregion
#region Reset
private void Form1_FormClosing(object sender, FormClosingEventArgs e){
Reset_Form(null, null);
}
public void Reset_Form(object sender, EventArgs e){
if (Directory.Exists(DragDropFile.FileTempPath)){
Directory.Delete(DragDropFile.FileTempPath, true);
}
this.DragDropFile.clear();
lbl_DragDropFile.Text = "Selected File.: n/a";
clb_xmlfiles.Items.Clear();
lbl_infosheetcount.Text = "";
cmd_run.Enabled = false;
picbox1.Image = Resources.office;
Cursor = Cursors.Default;
lbl_processinfo.Visible = false;
}
#endregion
#region Service
private void clb_xmlfiles_SelectedIndexChanged(object sender, EventArgs e){
for (int i = 0; i < clb_xmlfiles.Items.Count; i++){
if (DragDropFile.arr_xmlfiles[i] == false){
clb_xmlfiles.SetItemCheckState(i, CheckState.Unchecked);
}
}
}
private void lnklbk_bug_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){
ProcessStartInfo sInfo = new ProcessStartInfo ¶
("https://ploesch.de/index.php?side=a-kontakt");
Process.Start(sInfo);
}
private void cmd_close_Click(object sender, EventArgs e){
Application.Exit();
}
#endregion
}
#region Class
public class DragDropClass{
public string FileExtension { get; set; }
public string FileName { get; set; }
public string FilePath { get; set; }
public string FileTempPath { get; set; }
public string FileTempZip { get; set; }
public bool[] arr_xmlfiles = new bool[501];
public bool[] arr_excelword = { false, false };
public void clear(){
FileExtension = "";
FileName = "";
FilePath = "";
FileTempPath = "";
FileTempZip = "";
arr_excelword[0] = false;
arr_excelword[1] = false;
}
}
#endregion
}