Seite 1 von 1

Event an Windows senden

Verfasst: Do, 03. Mär 2016 14:34
von ramses
Hallo zusammen

gib es eine möglichkeit einen Tastencode zb. ALT+W an das Windows System zu senden?
In einem aktiven XBase Part soll der Tastendruck ALT-W nicht als Event in der Xbase Event Queue erscheinen und verarbeitet werden sondern soll von Windows verarbeitet bezw. an Windows gesendet werden.

Cu Carlo

Re: Event an Windows senden

Verfasst: Do, 03. Mär 2016 18:24
von AUGE_OHR
ramses hat geschrieben:gib es eine möglichkeit einen Tastencode zb. ALT+W an das Windows System zu senden?
In einem aktiven XBase Part soll der Tastendruck ALT-W nicht als Event in der Xbase Event Queue erscheinen und verarbeitet werden sondern soll von Windows verarbeitet bezw. an Windows gesendet werden.
Frage : was soll ALT-W bewirken ? das ist doch kein Windows Hotkey, oder ?

zum senden benötige ich den Empfänger ... also welches Teil von Windows ?

Re: Event an Windows senden

Verfasst: Fr, 04. Mär 2016 1:04
von Herbert
AUGE_OHR hat geschrieben:Frage : was soll ALT-W bewirken ? das ist doch kein Windows Hotkey, oder ?
zum senden benötige ich den Empfänger ... also welches Teil von Windows ?
Ja und in diesem Fall ist das Empfängerprogramm zuständig und müsste aktiv auf Alt-W lauschen wie z.B Alt-Tab, wenn nicht....
...Alt- und Buchstabe Standard in allen Windows-Dialogen wäre und ist (das berühmte Unterstrichzeichen im Text bei einem Control), um eben mit Alt-und passendem Buchstaben genau direkt dorthin zu gelangen.
Also eigentlich nicht möglich.

Re: Event an Windows senden

Verfasst: Sa, 05. Mär 2016 17:07
von Werner_Bayern
sendkey macht sowas, schau einfach hier im Forum.

Re: Event an Windows senden

Verfasst: Mo, 14. Mär 2016 13:05
von ramses
Hi

auf dem PC ist ein Dienst installiert welcher auf ALT-W reagiert. Dieser prüft ob sich an der aktuellen Cursorstelle (Part mit dem Focus) oder in einem Markierten Text eine Nummer befinden die den Aufbau einer Telefonnummer hat. Wenn ja wird diese an das Arbeitsplatz Telefon gesendet. Das Abtippen einer Telefonnummer vom Bildschirm entfällt so. Der Dienst ist ein Ascotel-Wählprogramm.

Aus andern Programmen wie Word, Excel, Firefox und viele viele anderen funktioniert dies Problemlos. Nur mit Xbase Programmen eben nicht. Fatalerweise sind gerade in diesem alle Telefonnummern gespeichert was für grossen Frust beim Anwender führt. Dieser versteht nicht wieso es in unserem Programm nicht geht, vermutet Absicht .........



Cu Carlo

Re: Event an Windows senden

Verfasst: Mo, 14. Mär 2016 15:21
von Herbert
Ich empfehle dir, neben der Tel. Nr einen Telefonbutton zu platzieren und dort dahinter den Aufruf zu diesem mysteriösen Programm zu setzen. Dem Button gibst du dann Alt-W als Shortcut.

Re: Event an Windows senden

Verfasst: Mo, 14. Mär 2016 20:37
von AUGE_OHR
ramses hat geschrieben:auf dem PC ist ein Dienst installiert welcher auf ALT-W reagiert.
ein Dienst hat kein "Fenster" ... hm ... :-k
ramses hat geschrieben:Dieser prüft ob sich an der aktuellen Cursorstelle (Part mit dem Focus) oder in einem Markierten Text eine Nummer befinden die den Aufbau einer Telefonnummer hat. Wenn ja wird diese an das Arbeitsplatz Telefon gesendet. Das Abtippen einer Telefonnummer vom Bildschirm entfällt so. Der Dienst ist ein Ascotel-Wählprogramm.
ist es ein VIO oder GUI Programm ?

unter GUI solltest du es mit den "virtuellen" Keys versuchen. hier ein Demo

Code: Alles auswählen

#define VK_SHIFT     0x10 
#define VK_CONTROL    0x11    // STRG 
#define VK_MENU          0x12    // ALT 
#define VK_RMENU        0xA5    // ALT GR 
#define KEYEVENTF_KEYUP  0x0002 

// Tasten drücken 
keybd_event( VK_CONTROL, 0, 0, 0) 
keybd_event( VK_MENU, 0, 0, 0) 
keybd_event( asc("F"), 0, 0, 0) 

// Tasten wieder loslassen 
keybd_event( asc("F"), 0, KEYEVENTF_KEYUP, 0) 
keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0) 
keybd_event( VK_CONTROL, 0, KEYEVENTF_KEYUP, 0) 
Der Dll-Aufruf dazu:

Code: Alles auswählen

FUNCTION keybd_event( nVk, nScan, nFlags, nExtraInfo ) 
STATIC keybd_event 
IF keybd_event = NIL 
   keybd_event := DllPrepareCall( "user32.dll", ; 
                             DLL_STDCALL, "keybd_event" ) 
ENDIF    
RETURN DllExecuteCall( keybd_event, nVk,; 
                                   nScan, nFlags, nExtraInfo )

FUNCTION GetVirtualKeyCode( cChar, lShift, lCtrl, lAlt, lAltGR ) 
LOCAL nCode, nHiByte 
STATIC VkKeyScan 
   IF VkKeyScan = NIL 
      VkKeyScan := DllPrepareCall( "user32.dll", DLL_STDCALL, "VkKeyScanA" ) 
   ENDIF 
   nCode := DllExecuteCall( VkKeyScan, asc( cChar ) ) 
   nHiByte := HiByte( nCode ) 
   lShift  := ( nHiByte = 1 ) 
   lCtrl   := ( nHiByte = 2 ) 
   lAlt    := ( nHiByte = 4 ) 
   lAltGR  := ( nHiByte = 6 ) 

RETURN LowByte( nCode ) 

// ------------------- 

FUNCTION LowByte( n ) 
RETURN bAnd( n, 0xFF ) 

// ------------------- 

FUNCTION HiByte( n ) 
RETURN int( bAnd( n, 0xFF00 ) / 0x100 )

Re: Event an Windows senden

Verfasst: Di, 15. Mär 2016 7:03
von Wolfgang Ciriack
Warum denn nicht mal versuchen, mit einem Tapi-Aufruf direkt die Nummer wählen ?

Code: Alles auswählen

DLLFUNCTION tapiRequestMakeCall(v_n,c1,c2,c3) USING STDCALL FROM TAPI32
************************************************************************************************
procedure w32_TapiCall(nummer)
local v_n:=alltrim(charrem(" -/()",nummer))
if !empty(v_n)
   tapiRequestMakeCall(v_n,"","","")
elseif empty(v_n)
   Meldung("Keine Nummer vorhanden !",ERROR)
else
   Meldung("Tapi-Schnittstelle nicht aktiv !",HINWEIS)
endif
return

Re: Event an Windows senden

Verfasst: Di, 15. Mär 2016 14:57
von Werner_Bayern
Servus Wolfgang,

da stimmt was im Code nicht, die Meldung Tapi-Schnittstelle nicht aktiv wird wohl nie kommen?

Re: Event an Windows senden

Verfasst: Di, 15. Mär 2016 16:14
von Tom
TAPI ist nur eingeschränkt empfehlenswert, aber ausprobieren sollte man es in jedem Fall. Wenn es sich um eine Anlagensteuerung mit Nebenplätzen handelt, genügt es in aller Regel nicht, einen einfachen TapiRequest auszulösen. Vermutlich lässt sich dieses ominöse Wählprogramm mit Parametern aufrufen. Wenn das der Fall ist, wäre das Mittel der Wahl, den Wählbutton neben den jeweiligen Nummern mit RunShell() und einem entsprechenden Aufruf auszustatten. Alles Nähere sollte die entsprechende Doku hergeben.

Vermutlich versucht dieses Wählprogramm, Ziffernfolgen in Eingabefeldern (SLEs, MLEs) zu erkennen. Ich würde empfehlen, mal alle möglichen Arten der Zahlendarstellung in einem kleinen Xbase-Beispielprogramm durchzuspielen und zu schauen, wann es reagiert. Also Statics, SLEs, MLEs, Tabellen usw.

Re: Event an Windows senden

Verfasst: Do, 17. Mär 2016 9:38
von ramses
Hi

vielen Dank für eure Tips. Ich bin nun einen Schritt weitergekommen.

- Der TAPI Aufruf funktioniert nicht.

- Das Wählprogramm lässt sich nicht per Parameter aufrufen. Eine Doku gibt es auch nicht. Nur eine Installationsanweisung.

Ich war gestern den ganzen Tag beim Kunden um eine Lösung zu finden.
Geholfen hat zum Schluss im Hauptprogramm per Button "Wählen" ein kleines Fenster zu öffnen. In diesem sind in 1-6 SLE's die jeweils die vorhandenen Nummern des Kunden/Lieferanten anzeigen z.B. "Tel. Chef: 01222" usw. und ein Ende-Button.
Der User kann nun auf das SLE mit der gewünschten Nummer klicken dass der Cursor im SLE steht und dann ALT-W drücken.
So funktioniert das Wählen. (Auch wenn noch Tel. Chef: im Feld steht) . Kommen andere xbase Elemente (z.B MLE's) in diesem Fenster dazu ist sofort Schluss und es passiert nichts mehr.
Es ist wie Tom vermutet hat. Das Wählprogramm versucht Ziffern in aktiven Eingabefeldern zu suchen, wobei die Suche nicht allzu clever oder umfangreich ist.....
Jedenfalls der Kunde ist damit zufrieden. 2 Klick's und 1 Tastendruck und die Nummer ist im Telefon.


Cu Carlo