Progamm zum beenden von Windows Fenstern mit 1 stündigem Zeitfenster

C++:
#include<windows.h>
#include<conio.h>

int main()
{
    HWND h;
    while(1)
    {
         if(kbhit())
         {
              if(getch() == 27)
                  return 0;
         }
         h = FindWindow(NULL, "Scan an Lotas-e41d9c6ef");
         if(h != 0) PostMessage(h, WM_CLOSE, 0, 0);
         Sleep(1000);
    }
    return 0;
}

Hast du einen Compiler bereit oder soll ich es schnell kompilieren?
 
Ja, genau.
Wenn du das Programm beenden willst, einfach Esc drücken.

Hab noch eine etwas veränderte Version, bei der man ggf. einen anderen Titel angeben kann.
Solange es aber diese "...Lotas..:" bleibt, ist es gleich zu verwenden wie das Alte:

C++:
#include<windows.h>
#include<conio.h>
#include<stdio.h>

int main(int argc, char *argv[])
{
    HWND h;
    char str[4096];

    printf("Programm zum Schliessen der Popup-Ordner\n");
    
    strcpy(str, "Scan an Lotas-e41d9c6ef");
    if(argc > 1)
    {
        if(argv[1][0] == '\"')
            strcpy(str, &(argv[1][1]));
        else
            strcpy(str, argv[1]);
        if(str[strlen(str) - 1] == '\"')
            str[strlen(str) - 1] = '\0';
    }


    puts(str);
    printf("\nBeenden mit Esc\n");

    while(1)
    {
         if(kbhit())
         {
              if(getch() == 27)
                  return 0;
         }
         h = FindWindow(NULL, str);
         if(h != 0) PostMessage(h, WM_CLOSE, 0, 0);
         Sleep(1000);
    }
    return 0;
}
Also: Soll ich schnell kompilieren oder machst du?
 
"e41d9c6ef" ist Timestamp-Hash der sich jedesmal ändernt. Hier würde sich eine RegEx machen.
 
@Spikee: Schade, dass der Großteil der Winapi mit Regex nichts anfangen kann :D

@Terra: Wenn sich das jedesmal ändert ist ein etwas anderer Code erfordlich.
EnumWindows und Stringsuche.
 
@Terra: Wenn sich das jedesmal ändert ist ein etwas anderer Code erfordlich.
EnumWindows und Stringsuche.
Genau ;)

Folgendes Programm funktioniert bei mir einwandfrei:

C++:
#include <windows.h>
#include <conio.h>

const LPTSTR Search = LPTSTR("Scan an");
const LPCTSTR Title = "windowcloser";
const int SleepTime = 1000;
const bool Visible = false;
const int CloseCharCode = VK_ESCAPE;


BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
  int TitleLength = GetWindowTextLength(hwnd);

  LPTSTR WindowName = new TCHAR[TitleLength];
  ZeroMemory(WindowName, sizeof(WindowName));

  GetWindowText(hwnd, WindowName, TitleLength);

  if (strncmp(WindowName, Search, strlen(Search))==0 &&
      hwnd != GetForegroundWindow())
  {
    PostMessage(hwnd, WM_CLOSE, 0, 0);
  }
  return true;
}

int main()
{
  SetConsoleTitle(Title);
  if (Visible==false)
  {
    HWND hConsole = FindWindow(NULL, Title);
    ShowWindow(hConsole, SW_HIDE);
  }

  while (true)
  {
    if (Visible)
    {
      if (kbhit() && getch()==CloseCharCode)
      {
        return 0;
      }
    }
    EnumWindows(EnumWindowsProc, 0);
    Sleep(SleepTime);
  }
  return 0;
}
  • In der Variablen "Search" steht der String, nach dem in den Fenstertiteln gesucht werden soll, bei ja "Scan an".
  • In "Title" steht der eigene Fenstertitel.
  • Mit "SleepTime" wird die Verzögerungszeit in der While-Schleife festgelegt.
  • "Visible" definiert, ob das Fenster sichtbar oder unsichtbar sein soll.
  • Und schließlich definiert "CloseCharCode" den virtuellen Keycode für die Taste, die das Programm schließen soll - vorausgesetzt es ist sichtbar.
Außerdem wird das aktuell aktivierte Fenster nicht geschlossen, falls es auch mit "Search" anfängt.
 
Zurück