Event an Windows senden

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Event an Windows senden

Beitrag 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
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Event an Windows senden

Beitrag 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 ?
gruss by OHR
Jimmy
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Event an Windows senden

Beitrag 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.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Event an Windows senden

Beitrag von Werner_Bayern »

sendkey macht sowas, schau einfach hier im Forum.
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Event an Windows senden

Beitrag 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
Valar Morghulis

Gruss Carlo
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Event an Windows senden

Beitrag 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.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Event an Windows senden

Beitrag 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 )
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Event an Windows senden

Beitrag 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
Viele Grüße
Wolfgang
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Event an Windows senden

Beitrag von Werner_Bayern »

Servus Wolfgang,

da stimmt was im Code nicht, die Meldung Tapi-Schnittstelle nicht aktiv wird wohl nie kommen?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Event an Windows senden

Beitrag 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.
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Event an Windows senden

Beitrag 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
Valar Morghulis

Gruss Carlo
Antworten