shaddy
Goto Top

C - Win-32 Konsolenanwendung - Fokus auf Anwendung legen und Input geben

Das Ziel ist, dass alle 10 Minuten ein vorgegebener Input erfolgt.
Bisher war das www nicht hilfreich, deswegen bitte ich euch um Rat.

Hey leute,

ich möchte eine einfache Anwendung schreiben, die es mir ermöglicht an ein vorgegebenes Fenster einen Input zu senden.

Das Fenster soll nicht in den Vordergrund springen, ist aber ganz normal geöffnet und in der Taskleiste erreichbar.

Deswegen soll nur die geschriebene Anwendung kurzzeitig den Fokus auf mein vordefiniertes Fenster haben, ohne mich alle 10 minuten zu behindern.

Ich habe zahlreiche Foren durchsucht, aber immerwieder nur halbe Antworten gefunden - undurchsichtige Erklärungen.

Da ich bisher noch keine Arbeiten mit Fenstern gemacht habe, wäre ein Code-beispiel sehr hilfreich!

Als mögliches Beispiel dazu - Fokus auf ein bereits geöffnetes Editorfenster mit dem Titel "Unbenannt - Editor" legen und alle 10 Minuten eine 1 senden.

Gruß Shaddy

Content-ID: 189430

Url: https://administrator.de/contentid/189430

Ausgedruckt am: 20.11.2024 um 12:11 Uhr

vossi31
vossi31 10.08.2012 um 15:41:34 Uhr
Goto Top
Hallo,

muss es unbedingt C sein?
Vielleicht geht so was mit AutoIt leichter?
Sieh dir mal dies an http://www.autoit.de/index.php?page=Thread&threadID=32212

Henning
rubberman
rubberman 10.08.2012 aktualisiert um 23:21:47 Uhr
Goto Top
Hallo Shaddy!

Zitat von @Shaddy:
Das Fenster soll nicht in den Vordergrund springen
[...]
Fokus auf ein bereits geöffnetes Editorfenster mit dem Titel "Unbenannt - Editor" legen

Das beißt sich etwas, oder?
Grundsätzlich ist es so, dass ein Keyboard Input für ein Fenster wirksam ist, das auch den Focus besitzt. Genau das würde dich aber "alle 10 Minuten behindern", nicht wahr? Workaround wäre hier ein PostMessage, was aber nicht wirklich eine Emulation des Keyboards darstellt. Für dein Notepad Beispiel ist das aber nebensächlich (und solange du nicht angibst für was du dies tatsächlich benötigst, ...).
#ifndef WINVER
#define WINVER 0x0501 {{comment_single_line_double_slash:0}}
#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501 {{comment_single_line_double_slash:0}}
#endif
#ifndef UNICODE
#define UNICODE
#endif
#ifndef _UNICODE
#define _UNICODE
#endif

#include "windows.h" 

int main(void)
{
  const WCHAR* szWindowName = L"Unbenannt - Editor";  
  const WCHAR* szClassName = L"Edit";  
  const WPARAM wparam = '1';  
  const DWORD dwWait = 600000; /* 10 min = 600.000 ms */

  HWND hwndNotepad;
  HWND hwndTarget;
  hwndNotepad = FindWindow(NULL, szWindowName);
  if (hwndNotepad)
  {
    while (1)
    {
      hwndTarget = FindWindowEx(hwndNotepad, NULL, szClassName, NULL); /* Das Editorfenster in Notepad. */
      if (hwndTarget)
        PostMessage(hwndTarget, WM_CHAR, wparam, 0);
      else
        return 0;

      Sleep(dwWait);
    }
  }

  return 0;
}

Grüße
rubberman