Windows Mobile 6 Applikation als Anruf-"Firewall" in C# Teil 1/2

Windows Mobile 6 Applikation als Anruf-"Firewall" in C# Teil 1/2

Wie bereits erzählt hatte ich ja eine ganze Weile unter durchaus nicht gewollten Werbeanrufen gelitten. Nun, die Anrufe kommen nach wie vor, nur leide ich nicht mehr. Kraft der magischen Fähigkeiten, die jeder Programmierer verliehen bekommen hat, sich schnell ein Programm zu schreiben, das alle nur erdenklichen Wehwehchen beheben kann.

Das Programm Call Blocker soll später selbständig Anrufe bestimmter Nummern ablehnen, annehmen, sowie annehmen und nach einer bestimmten Zeit beenden können – z. B. um einen anrufenden Telefonspammer zu ärgern. Ferner habe ich das Programm bereits einmal mit einer englischen GUI implementiert (Ausgangsversion) und implementiere es hier erneut mit einer deutschen GUI. Beide Versionen werden sich später auch als Download zur direkten Installation auf dem Handy finden, sollte z. B. jemand ähnliche Probleme haben.

Schnell ist natürlich relativ, wenn man mit den Tücken von Windows Mobile 6 zu kämpfen hat, und dann auch noch ein Videotraining dazu machen möchte.

In diesem 1. Teil eines zweiteiligen Posts zeige ich die ersten 4 Videos, die Gesamtdauer der Videos liegt bei knapp unter einer Stunde.

Im 2. Teil wird es dann noch einmal die letzten 3 Videos geben, sowie einige Auszüge aus dem Code, ferner noch den Quellcode zum Runterladen.

Auch gibt es alle Videos nochmal zum Runterladen in Originalauflösung (1024×768) und -qualität auf Megaupload, einem Hoster, den ich als schnell und zuverlässig kennengelernt habe am Ende dieses Posts, hinter den Videos und dem Code.

Die Videos sollten am besten im Vollbild-Modus angeschaut werden – sonst wird man von dem Text nicht allzuviel erkennen können.

Zum Ansehen der Videos benötigt man Flash.

Windows Mobile 6 Call Blocker in C# – 1. Einführung

(3 Minuten)

Eine kurze Übersicht über die benötigte Software (Windows Mobile Professional SDK sowie Windows Mobile DDK (wenn man für 6.5 entwickeln möchte, wobei ich hier einige Probleme mit dem langsamen Emulator hatte, der auch mit dem Cellular Emulator nicht so recht zusammenarbeiten wollte), und natürlich Visual Studio 2008 (z. B. als Express Edition, z. B. hier auf ComputerBase in einer schönen Auflistung oder auch bei Microsoft)).

Auf blip.tv

und das Gleiche nochmal auf youtube (gleiches Video, vielleicht bevorzugt jemand youtube?) – hier sollte man unten auf 720p stellen und natürlich am besten im Vollbild Modus schaun

Leider hatte ich auf youtube mit den meisten Videos aufgrund der Länge Probleme. Unwichtige Informationen wie die Maximallänge der erlaubten hochzuladenden Videos finden sich teilweise gut versteckt auf den Webseiten der Anbieter. Daher sind alle Videos noch einmal auf blip.tv, wo sie ebenfalls in sehr guter Qualität, werbefrei, angeschaut werden können.

Windows Mobile 6 Call Blocker in C# – 2. Aufsetzen der Projekte

(20 Minuten)

Es gibt 2 Projekte, einmal eine GUI für die Konfiguration, sowie eine Konsolenapplikation, die dann den Call Handler beinhalten wird. Der Call Handler wird auf das Event einkommender Anrufe registriert und führt dann den gewünschten Code aus.
Ferner wird die GUI aufgesetzt und die erste Funktionalität implementiert.

Windows Mobile 6 Call Blocker in C# – 3. Hinzufügen zur Liste

(16 Minuten)

In der GUI: Es werden weitere Button-Events hinzugefügt. Insbesondere wird die Möglichkeit eingebaut, Telefonnummern in die Nummern/Aktions-Liste unten einzufügen. Mit dem Übersetzen der GUI Elemente wird angefangen.

Windows Mobile 6 Call Blocker in C# – 4. Weitere Funktionen auf Liste

(18 Minuten)

Die Übersetzung geht weiter. Ferner wird die Möglichkeit hinzugefügt, Nummern/Aktionen wieder aus der Liste zu löschen, sowie die Liste zu speichern und auch wieder zu laden. Insbesondere das Speichern ist wichtig, wird doch über diese Datei die Konsolenapplikation erfahren, bei welcher Nummer welche Aktion durchzuführen ist. Ferner wird bereits Code hinzugefügt, der das Registrieren/Deregistrieren des Call Handlers bewerkstelligen soll, sowie die Konsolenapplikation aufruft.


Der Code für die GUI Elemente (restlicher Code in Teil 2):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
namespace CallBlockerG
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        private System.Windows.Forms.MainMenu mainMenu1;
 
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Windows Form Designer generated code
 
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.mainMenu1 = new System.Windows.Forms.MainMenu();
            this.buttonHelp = new System.Windows.Forms.Button();
            this.radioButtonAcceptEnd = new System.Windows.Forms.RadioButton();
            this.buttonEnable = new System.Windows.Forms.Button();
            this.buttonDelete = new System.Windows.Forms.Button();
            this.buttonAdd = new System.Windows.Forms.Button();
            this.listBoxNumbers = new System.Windows.Forms.ListBox();
            this.label3 = new System.Windows.Forms.Label();
            this.textBoxSeconds = new System.Windows.Forms.TextBox();
            this.label2 = new System.Windows.Forms.Label();
            this.radioButtonReject = new System.Windows.Forms.RadioButton();
            this.radioButtonAccept = new System.Windows.Forms.RadioButton();
            this.label1 = new System.Windows.Forms.Label();
            this.buttonSave = new System.Windows.Forms.Button();
            this.buttonReload = new System.Windows.Forms.Button();
            this.buttonMinExit = new System.Windows.Forms.Button();
            this.textBoxNumber = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            //
            // buttonHelp
            //
            this.buttonHelp.Location = new System.Drawing.Point(203, 85);
            this.buttonHelp.Name = "buttonHelp";
            this.buttonHelp.Size = new System.Drawing.Size(17, 20);
            this.buttonHelp.TabIndex = 48;
            this.buttonHelp.Text = "?";
            this.buttonHelp.Click += new System.EventHandler(this.buttonHelp_Click);
            //
            // radioButtonAcceptEnd
            //
            this.radioButtonAcceptEnd.Location = new System.Drawing.Point(5, 98);
            this.radioButtonAcceptEnd.Name = "radioButtonAcceptEnd";
            this.radioButtonAcceptEnd.Size = new System.Drawing.Size(108, 20);
            this.radioButtonAcceptEnd.TabIndex = 47;
            this.radioButtonAcceptEnd.TabStop = false;
            this.radioButtonAcceptEnd.Text = "ann + beend";
            //
            // buttonEnable
            //
            this.buttonEnable.Location = new System.Drawing.Point(119, 85);
            this.buttonEnable.Name = "buttonEnable";
            this.buttonEnable.Size = new System.Drawing.Size(78, 20);
            this.buttonEnable.TabIndex = 46;
            this.buttonEnable.Text = "aktivieren";
            this.buttonEnable.Click += new System.EventHandler(this.buttonEnable_Click);
            //
            // buttonDelete
            //
            this.buttonDelete.Location = new System.Drawing.Point(187, 111);
            this.buttonDelete.Name = "buttonDelete";
            this.buttonDelete.Size = new System.Drawing.Size(33, 20);
            this.buttonDelete.TabIndex = 45;
            this.buttonDelete.Text = "-";
            this.buttonDelete.Click += new System.EventHandler(this.buttonDelete_Click);
            //
            // buttonAdd
            //
            this.buttonAdd.Location = new System.Drawing.Point(148, 111);
            this.buttonAdd.Name = "buttonAdd";
            this.buttonAdd.Size = new System.Drawing.Size(33, 20);
            this.buttonAdd.TabIndex = 44;
            this.buttonAdd.Text = "+";
            this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click);
            //
            // listBoxNumbers
            //
            this.listBoxNumbers.Location = new System.Drawing.Point(5, 152);
            this.listBoxNumbers.Name = "listBoxNumbers";
            this.listBoxNumbers.Size = new System.Drawing.Size(215, 114);
            this.listBoxNumbers.TabIndex = 43;
            //
            // label3
            //
            this.label3.Location = new System.Drawing.Point(68, 120);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(74, 20);
            this.label3.Text = "Sekunden";
            //
            // textBoxSeconds
            //
            this.textBoxSeconds.Location = new System.Drawing.Point(40, 118);
            this.textBoxSeconds.Name = "textBoxSeconds";
            this.textBoxSeconds.Size = new System.Drawing.Size(22, 21);
            this.textBoxSeconds.TabIndex = 42;
            this.textBoxSeconds.Text = "0";
            //
            // label2
            //
            this.label2.Location = new System.Drawing.Point(5, 120);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(32, 15);
            this.label2.Text = "nach";
            //
            // radioButtonReject
            //
            this.radioButtonReject.Location = new System.Drawing.Point(5, 79);
            this.radioButtonReject.Name = "radioButtonReject";
            this.radioButtonReject.Size = new System.Drawing.Size(90, 20);
            this.radioButtonReject.TabIndex = 41;
            this.radioButtonReject.TabStop = false;
            this.radioButtonReject.Text = "ablehnen";
            //
            // radioButtonAccept
            //
            this.radioButtonAccept.Checked = true;
            this.radioButtonAccept.Location = new System.Drawing.Point(5, 60);
            this.radioButtonAccept.Name = "radioButtonAccept";
            this.radioButtonAccept.Size = new System.Drawing.Size(90, 20);
            this.radioButtonAccept.TabIndex = 40;
            this.radioButtonAccept.Text = "annehmen";
            //
            // label1
            //
            this.label1.Location = new System.Drawing.Point(5, 15);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(57, 15);
            this.label1.Text = "Nummer";
            //
            // buttonSave
            //
            this.buttonSave.Location = new System.Drawing.Point(119, 59);
            this.buttonSave.Name = "buttonSave";
            this.buttonSave.Size = new System.Drawing.Size(101, 20);
            this.buttonSave.TabIndex = 39;
            this.buttonSave.Text = "speichern";
            this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click);
            //
            // buttonReload
            //
            this.buttonReload.Location = new System.Drawing.Point(119, 32);
            this.buttonReload.Name = "buttonReload";
            this.buttonReload.Size = new System.Drawing.Size(101, 20);
            this.buttonReload.TabIndex = 38;
            this.buttonReload.Text = "laden";
            this.buttonReload.Click += new System.EventHandler(this.buttonReload_Click);
            //
            // buttonMinExit
            //
            this.buttonMinExit.Location = new System.Drawing.Point(119, 6);
            this.buttonMinExit.Name = "buttonMinExit";
            this.buttonMinExit.Size = new System.Drawing.Size(101, 20);
            this.buttonMinExit.TabIndex = 37;
            this.buttonMinExit.Text = "x=minimieren";
            this.buttonMinExit.Click += new System.EventHandler(this.buttonMinExit_Click);
            //
            // textBoxNumber
            //
            this.textBoxNumber.Location = new System.Drawing.Point(5, 32);
            this.textBoxNumber.Name = "textBoxNumber";
            this.textBoxNumber.Size = new System.Drawing.Size(100, 21);
            this.textBoxNumber.TabIndex = 36;
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
            this.AutoScroll = true;
            this.ClientSize = new System.Drawing.Size(240, 268);
            this.Controls.Add(this.buttonHelp);
            this.Controls.Add(this.radioButtonAcceptEnd);
            this.Controls.Add(this.buttonEnable);
            this.Controls.Add(this.buttonDelete);
            this.Controls.Add(this.buttonAdd);
            this.Controls.Add(this.listBoxNumbers);
            this.Controls.Add(this.label3);
            this.Controls.Add(this.textBoxSeconds);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.radioButtonReject);
            this.Controls.Add(this.radioButtonAccept);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.buttonSave);
            this.Controls.Add(this.buttonReload);
            this.Controls.Add(this.buttonMinExit);
            this.Controls.Add(this.textBoxNumber);
            this.Menu = this.mainMenu1;
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
 
        }
 
        #endregion
 
        private System.Windows.Forms.Button buttonHelp;
        private System.Windows.Forms.RadioButton radioButtonAcceptEnd;
        private System.Windows.Forms.Button buttonEnable;
        private System.Windows.Forms.Button buttonDelete;
        private System.Windows.Forms.Button buttonAdd;
        private System.Windows.Forms.ListBox listBoxNumbers;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.TextBox textBoxSeconds;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.RadioButton radioButtonReject;
        private System.Windows.Forms.RadioButton radioButtonAccept;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Button buttonSave;
        private System.Windows.Forms.Button buttonReload;
        private System.Windows.Forms.Button buttonMinExit;
        private System.Windows.Forms.TextBox textBoxNumber;
    }
}



Download der Videos
Die ersten 4 Videos noch einmal auf megaupload. Zum Download läßt sich z. B. sehr gut JDownloader verwenden.
http://www.megaupload.com/?d=RCCZ4J1W
http://www.megaupload.com/?d=0JA7AZA3
http://www.megaupload.com/?d=5KGB3TSD
http://www.megaupload.com/?d=6NPMSWPG
Direkt auf der blip.tv Seite kann man sich die Videos auch anschaun:
http://blip.tv/file/4846322
http://blip.tv/file/4845881
http://blip.tv/file/4845895
http://blip.tv/file/4845940

Nachdem das Erstellen der Videos doch einiges an Zeit in Anspruch genommen hat, freue ich mich besonders über Kommentare und Hinweise, gerne auch zur Verständlichkeit, Qualität, sowie zu den Videohostern.
Vermutlich werden keine Windows Mobile 6 Videos mehr folgen, sondern eher Videos zu Silverlight oder anderen aktuelleren Themen.

One thought on “Windows Mobile 6 Applikation als Anruf-"Firewall" in C# Teil 1/2

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.