Back to index

lightning-sunbird  0.9+nobinonly
killer.cpp
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
00002  * ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is mozilla.org code.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Sun Microsystems, Inc.
00019  * Portions created by the Initial Developer are Copyright (C) 1999
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s):
00023  *
00024  * Alternatively, the contents of this file may be used under the terms of
00025  * either the GNU General Public License Version 2 or later (the "GPL"), or
00026  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00027  * in which case the provisions of the GPL or the LGPL are applicable instead
00028  * of those above. If you wish to allow use of your version of this file only
00029  * under the terms of either the GPL or the LGPL, and not to allow others to
00030  * use your version of this file under the terms of the MPL, indicate your
00031  * decision by deleting the provisions above and replace them with the notice
00032  * and other provisions required by the GPL or the LGPL. If you do not delete
00033  * the provisions above, a recipient may use your version of this file under
00034  * the terms of any one of the MPL, the GPL or the LGPL.
00035  *
00036  * ***** END LICENSE BLOCK ***** */
00037 
00038 
00039 /**************************************************************/
00040 /* This program is designed for Win32 platforms only          */
00041 /* to close automatically                                     */
00042 /* the dialog window appeared after Mozilla is crashed.       */
00043 /* Otherwise application remains in memory until              */
00044 /* this dialog is closed.                                     */
00045 /* Though built version exist in the script directory one     */
00046 /* may want to build it again. Then the following command     */
00047 /* line should be used:                                       */
00048 /*     cl killer.cpp /link user32.lib                        */
00049 /**************************************************************/
00050 
00051 #include <windows.h>
00052 #include <stdio.h>
00053 
00054 
00055 #define ERROR_DIALOG_TITLE "Mozilla: mozilla.exe - Application Error"
00056 //better to find in title some keywords than compare with the entire phrase
00057 #define ERROR_DIALOG_KW_1 "mozilla"
00058 #define ERROR_DIALOG_KW_2 "Error"
00059 
00060 #define OK_BUTTON_TITLE "OK"
00061 
00062 BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM out) {
00063        char title[1024];
00064        GetWindowText(hwnd, title, 1024);
00065        //printf("Child Window: %x -> %s\n", hwnd, title);
00066        if (!strcmp(title, OK_BUTTON_TITLE)) {
00067               *((HWND*)out) = hwnd;
00068               return FALSE;
00069        }      
00070        return TRUE;
00071 }
00072 
00073 BOOL CALLBACK EnumWindowsProc(  HWND hwnd, LPARAM lParam) {
00074        char title[1024];
00075        GetWindowText(hwnd, title, 1024);
00076        //printf("Window: %x -> %s\n", hwnd, title);
00077        if (strstr(title, ERROR_DIALOG_KW_1) && strstr(title, ERROR_DIALOG_KW_2)) {
00078               DWORD lp = 0, wp = 0;
00079               HWND ok;
00080               //really we can ommit this step but ...
00081               EnumChildWindows(hwnd, EnumChildProc, (LPARAM)(&ok));
00082               if (!ok) {
00083                      printf("OK button not found !\n");
00084                      return FALSE;
00085               }
00086               /*POINT p;
00087               p.x = 285; //experimental data -> but there are a lot of fonts in the world ...
00088               p.y = 150;
00089               HWND ok = ChildWindowFromPoint(hwnd, p);
00090               if (ok)
00091                      printf("Child window: %x\n", ok);
00092               else 
00093                      printf("Child window not found !\n");*/
00094               lp = (unsigned long)ok;
00095               wp = 1;
00096               wp = wp | (BN_CLICKED << 16);
00097               //printf("COMMAND: %d (hwnd), %d (code), %d(id)\n", lp, HIWORD(wp), LOWORD(wp));
00098               SendMessage(hwnd, WM_COMMAND, wp, lp);
00099               return FALSE;
00100        }
00101        return TRUE;
00102 }
00103 
00104 void main() {
00105        EnumWindows(EnumWindowsProc, 0);
00106 }