WhatsApp Enchant
Erweitert den WhatsApp-Desktop Client um ein paar Funktionen:
- Symbol im Benachrichtigungsbereich
Das Symbol blinkt bei neuen ungelesenen Nachrichten und hört auf zu blinken, wenn das WA-Fenster per Klick aufs Symbol geöffnet wird oder die Nachricht am Handy gelesen wurde.
Beim Öffnen über das Symbol wird ausserdem direkt zum obersten Chat gesprungen (der Chat, der die ungelesene Nachricht beinhaltet).
Beim Kick aufs "X" (Fenster schließen) wird das Fenster in den Benachrichtigungsbereich minimiert.
- Fenster ist immer im Vordergrund
- Patcher für die Resourcen-Datei, um die Farben des Fensters zu modifizieren
Die Farben für die Titelleiste und die Farben für den Hover-Effekt auf Minimieren/Maximieren-Knöpfen sind konfigurierbar, ausserdem kann der Maximieren-Knopf ausgeblendet werden.
Wie funktioniert das?
Man muss einfach die WA-Enchant-Exe starten, diese prüft dann regelmäßig, ob es ein Fenster gibt, was zu WhatsApp gehört. Ist das Fenster gefunden wird mit SetWindowsHookEx() die
DLL in den Prozess geladen, die die Änderungen dann durchführt.
Neben dem Umbiegen der WndProc wird ein Hook für WriteFile() installiert. Dadurch kann erkannt werden, ob eine neue Nachricht eingetroffen ist (oder eine Nachricht am Handy gelesen wurde), indem beobachtet wird, was für Daten WhatsApp in die LevelDB-Datei schreibt.
Was ist nicht so schön?
- Ich habe nur Delphi XE - das Teil hier ist also nur für 32-Bit WhatsApp getestet. Würde mich freuen wenn jemand Lust hat, eine 64-Bit Version zu kompilieren.
Das Teil mit Lazarus zu bauen wäre natürlich auch toll. Ich weiß nicht, ob ich mir das irgendwann vornehme.
- Das Patchen der Resourcen-Datei dauert. In der großen ASAR-Resourcen-Datei wird (ineffizient) nach bestimmten Mustern gesucht, um dann Modifikationen vorzunehmen.
Das ASAR-Format ist allerdings gut dokumentiert, man sollte die Resourcen eher entpacken, modifizieren, und die ASAR-Datei dann neu aufbauen.
Damit könnte man dann auch noch weiter gehen und z.B. das JavaScript modifizieren, um noch weitere Änderungen am Client vornehmen zu können.
- Das Patchen der Resourcen-Datei könnte man vielleicht auch ganz auslassen, wenn man sich früh genug in den Prozess einklinkt (Hook auf ReadFile()).
Ich habe aber keine Idee, wie das ohne Treiber/globalen CreateProcess()-Hook gehen könnte und das wäre irgendwie zu viel des Guten.
Kompilieren
Sollte mit Delphi XE direkt funktionieren, mit neueren Delphis muss man bestimmt etwas an den "uses" ändern.
Vor dem Kompilieren muss in das "lib"-Verzeichnis dieses Repo hier ausgecheckt werden:
https://github.com/MahdiSafsafi/delphi-detours-library
Falls jemand Verwendung hierfür hat und es testet würde ich mich über eine kurze Rückmeldung freuen
.