Browsing articles from "Juni, 2011"
Jun 30, 2011
12.560 Besuche

Accessing a WinForm/WPF control from another thread through invoke

A pretty common scenario: you have some time-consuming calculation to do (or some other requirements giving the necessity for multithreading), so from your main GUI, you start a worker thread (since then your GUI stays nice and responsive, even though now one of the problems you face is preventing your user from doing things he should not be doing while the thread runs). Since the procedure is so long, you maybe want to update a status label in the main window, or at least you want to set some result string when the thread is finished.

Good idea. But.. if you do it in a straightforward way (calling into your class with a static variable of sorts), your application will throw an exception in debug mode and might (very occasionally) cause trouble in release mode (if there are problems with concurrent access – since WinForms as well as WPF is not created for concurrency).

Fortunately, there is a solution.

Weiterlesen »

Jun 30, 2011
4.989 Besuche

Greg's XML Editor (minor fixes)

Looking for a decent free XML Editor, I stumbled upon Greg’s XML Editor. A nice, lightweight, free XML Editor that seems rather nice for the application I have.
It has, though, some minor faults, like the source does not compile (“text_replace.png” missing), and also the built application has a problem with always displaying 2 nodes (on the left side) for every file added, adding yet another node each time you work in the tree on the left.

So I fixed those (really minor) issues, included Rix’s patch for schemas.

Still, 99.5% of the work was done by Greg, with most of the rest probably done by Rix.

Weiterlesen »

Jun 28, 2011
7.980 Besuche

Mal schnell eine Android-App erstellen: die Installationsodyssee

Ich habe mich über den Wecker meines Motorola-Handies, das (obwohl es nur ein Jahr alt ist) keine Updates mehr erhält (danke Motorola!), geärgert. Dieser weckt mich jeden Morgen nämlich mit einem lauten Kiekeri-ki. Das ist sehr unsanft.

Jetzt bin ich der fatalen Annahme erlegen, ein Wecker, der auch .mp3 Dateien abspielen kann (wie fortschrittlich!) läßt sich auch schnell programmieren.

Nun ja.. schnell.. ich bin mal gespannt. die letzten zwei Tage habe ich an der Installation der Umgebung gesessen. Und festgestellt, daß Android Java-basiert ist. Nun ja, ich lebe hinter dem Mond.. hatte irgendetwas von C gehört.. aber das war wohl das IPhone.

Weiterlesen »

Jun 26, 2011
1.711 Besuche

How to disable an automatically generated Smiley in WordPress

If you have to write something, you might sometimes want to write something like

(2, 4, 8)

but in WordPress, it actually comes out as

(2, 4, 8)

This is a bit annoying but can be easily avoided by writing the following in your html code-editor:

(2, 4, 8)

where the ) is the ASCII-code representation of the ‘)’ character, which breaks the recognition of the wordpress-engine of 8) as 8) .

Html Codes

You can get a complete list of those on an AsciiTable (also more extensive in German on SelfHtml for ASCII and SelfHtml for Unicode).

Jun 26, 2011
11.031 Besuche

Generic Wrapper for SendMessage calls in C# through reflection

So.. tada.. my first English post on my blog. I always thought there would be a big need for German explanations in the programming world (and world in general) but.. some things should not be hidden from a wider public – which speaks (or reads) English.

I recently wrote a more or less generic wrapper for SendMessage calls to any windows and controls the heart desires (especially the ones in processes that are not your own) – as long as you have got a handle.

There is also a lot of fun stuff in here, like working with pointers (IntPtr), allocating memory in foreign processes, linking your own structures via pointers and filling them with values and a lot more to keep yourself busy for the day.

Weiterlesen »

Jun 23, 2011
4.662 Besuche

C#: Build Datum und Autoinkrement der Versionsnummer

Wer hat nicht noch ein paar Assemblies mit der Version 1.0.0.0 herumfliegen? Und hat auch schon ein paar Updates mit der gleichen Versionsnummer erzeugt bzw. sogar ausgeliefert? (Und verläßt sich z. B. auf Dateidatum oder -größe zur Identifizierung?) Dabei ist es einfach, ein Autoinkrement einzuführen. Und.. damit läßt sich auch direkt erklären, warum so manche Software direkt vielstellige Build- und Revisionsnummern anführt.

Weiterlesen »

Jun 21, 2011
1.648 Besuche

Der Verstand ist sein eigener Ort

Heute bin ich über ein wunderschönes Zitat gestolpert.

The mind is its own place and in itself, can make a Heaven of Hell, a Hell of Heaven.
~~John Milton

Viel profaner ausgedrückt: es sind nicht die äußeren Umstände so sehr, die uns beeinflussen, sondern wir selber sind es, die den äußeren Umständen eine Bedeutung geben. Es ist diese Bedeutung, die uns schließlich beeinflußt.

Denken ist immer eine Voraussetzung, jedem Gedanken etwas Positives abgewinnen ist die Kür.

Noch mehr Zitate von John Milton gibt es hier und viele davon sind bedenkenswert für eine ruhige Minute. Von dort ausgehend stößt man auf interessante Konzepte, wie etwa Solipismus und fragt sich evtl., warum Milton diesen Satz Satan in den Mund gelegt hat.

Jun 19, 2011
3.822 Besuche

Sicherheitsupdate für Microsoft .NET Framework 4 (KB2478663) benötigt länger

Wer das Sicherheitsupdate für Microsoft .NET Framework 4 (KB2478663) installiert sollte eingies an Ausdauer mitbringen. Und sich nicht wundern oder den Prozess fühzeitig abbrechen.

Typischerweise stagniert die Fortschrittsanzeige, ein Core arbeitet an seiner Grenze, und es erfolgen kaum Festplattenzugriffe (den arbeitenden Prozess sieht man nur, wenn man sich im TaskManager die Prozesse aller Benutzer anschaut). Grund ist die mscorsvw.exe, die alle wichtigen .net Assemblies neu compiliert, aufgrund der Tatsache, daß sich ja das Framework durch das Update geändert hat. So müssen auch die Assemblies an die Sicherheitsänderungen angepasst werden. (Typischerweise werden .net Assemblies bei der ersten Benutzung compiliert. Dies gilt nicht für eine Reihe von Basis-Assemblies, die praktisch immer verwendet werden, diese werden frühestmöglich compiliert.)

Machen kann man hier nicht viel, denn die Assemblies müssen geupdatet werden, um benutzbar zu bleiben. Der ganze Prozess dauert ca. 15-30 Minuten, je nach PC-Geschwindigkeit.

Abwarten und Tee trinken. Und hoffen, daß MS irgendwann auf die Idee kommt, zumindest eine ungefähre erwartete Installationsdauer anzugeben, so daß man sich nicht wundert, wenn ein Update 30 Minuten statt 30 Sekunden benötigt.

Jun 16, 2011
1.430 Besuche

Softwareabschätzung: Traum und Realität

Es gibt tatsächlich nach wie vor viele Leute – vor allem im Management – die glauben, die Entwicklungszeit von Software ließe sich abschätzen, vorhersagen, ja, irgendwie planen.

Die Realität spricht jedoch eine andere Sprache.

Weiterlesen »

Jun 15, 2011
3.706 Besuche

C#: Speicher in einem anderen Prozess befüllen lassen sowie checken, ob ein Button gedrückt ist (in einem fremden Prozess)

Alle naselang macht man als Programmierer eine besondere Erfahrung. Man hat über viele Stunden an einem Problem rumkniffelt. Sich zwischendurch schon gefragt, ob man an einer unlösbaren Aufgabe verzweifelt. Und schließlich – ganz wie Goethes Mathematiker – hat man das Problem bis zur Lösung gebracht.

Er ist ein Mathematiker und also hartnäckig.
~~Goethe

Das Gefühl, wenn dann alles funktioniert, ist ähnlich, wie es Cloud gegangen sein mag, nachdem er Sephirot besiegt hat, und auf Level 73 aufgestiegen ist. Wenn er denn Gefühle hätte. Oder wenn ein Yogi gerade eine Erscheinung hatte – oder seine Gedanken für eine Weile komplett ausgeschaltet hat. Oder so ähnlich.

Jedenfalls habe ich wieder eine Menge über p/invoke gelernt, wo man immer wieder gut auf der Pinvoke-Seite aufgehoben ist, und festgestellt, wie man per SendMessage Speicher in einem fremden Prozess befüllen lassen kann – das macht die SendMessage nämlich normalerweise automatisch (daher muß man nicht diesen Aufstand machen), allerdings wohl nur, wenn die Message < WM_USER ist. In diesem Fall sieht man dann also, was sonst alles gemacht werden muß, um Daten aus einem fremden Prozess abzuholen.

Weiterlesen »