Hallo Stefan,
ich habe das Problem folgendermaßen gelöst:
(verwendetes Entwicklungssystem: MS Visual .NET Studio mit C#)
----------------------
=> Erzeugen einer System.Threading.Timer-Klasse
Deklaration des Timer-Objektes:
private System.Threading.Timer timerClickAwayMessage = null;
Zuweisung an der Stelle, wo der Thread starten soll:
timerClickAwayMessage = new System.Threading.Timer(new System.Threading.TimerCallback(clickAwayMessage), null, 100, 500);
mit:
100 = Zeit (ms), bis die "Zielfunktion" zum ersten Mal ausgeführt werden soll
500 = Zeit, die zwischen den Aufrufen der Zielfunktion gewartet werden soll
Der Thread kann so wieder gestoppt werden:
timerClickAwayMessage.Dispose();
timerClickAwayMessage = null;
----------------------
=> Deklaration der Funktion, die die Return-Taste auf dem Meldungsfenster simuliert:
using System.Runtime.InteropServices;
...
[DllImport("user32.dll",EntryPoint="FindWindow")]
private static extern int FindWindow(string _ClassName, string _WindowName);
[DllImport("user32.dll", EntryPoint="PostMessageA")]
private static extern int PostMessage (int hwnd, int wMsg, int wParam, int lParam);
...
Zielfunktion (oder callback-Funktion):
private void clickAwayMessage(object o)
{
//-- Konstanten:
int WM_IMEKEYDOWN = 0x290;
int VK_RETURN = 0x0D;
//-- Fenster auf Desktop suchen
int hWnd = FindWindow(null, "SolidWorks 2003");
//-- wenn gefunden, Tatstatureingabe RETURN an das Fenster schicken,
if (hWnd != 0)
PostMessage(hWnd, WM_IMEKEYDOWN, VK_RETURN, 0);
}
Wichtig dabei: der Titel des Meldungsfensters heißt bei anderen Versionen von SWX wohl anders und muss natürlich angepasst werden.
----------------------
In VISUAL BASIC geht es, glaube ich, etwas einfacher (irgendwie so):
-> Funktionen importieren:
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
-> Thread erzeugen:
wohl ähnlich, wie oben oder normalen Timer (funktioniert nicht uneingeschränkt immer)
-> wegklicken in callback-Funktion:
Const WM_IMEKEYDOWN As Long = &H290
Const VK_RETURN As Long = &HD
Dim lHandle As Long
lHandle = FindWindow("SolidWorks 2003", vbNullString)
Call PostMessage(lHandle, WM_IMEKEYDOWN, VK_RETURN, 0&)
oder als Anregung (keine Ahnung, ob das geht):
1.) mit AppActivate("SolidWorks 2003") das Meldungsfenster aktvieren und
2.) mit SendKeys.SendWait("{ENTER}") an das Fenster schicken
-----
hier ein paar Links zu FindWindow und PostMessage: http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0223.shtml oder http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0353.shtml
-----
Ihr habt mir schon oft geholfen, jetzt bin ich froh auch mal etwas beitragen zu können.
Viele Grüße,
Sebastian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP