Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Event an Windows senden

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

Moderator: Moderatoren

Antworten
ramses
1000 working lines a day
1000 working lines a day
Beiträge: 690
Registriert: Mi, 28. Jul 2010 17:16

Event an Windows senden

Beitrag von ramses » Do, 03. Mär 2016 14:34

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

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10518
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Event an Windows senden

Beitrag von AUGE_OHR » Do, 03. Mär 2016 18:24

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: 1806
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: Event an Windows senden

Beitrag von Herbert » Fr, 04. Mär 2016 1:04

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
Programmier-Gott
Programmier-Gott
Beiträge: 1280
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Event an Windows senden

Beitrag von Werner_Bayern » Sa, 05. Mär 2016 17:07

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

Werner

ramses
1000 working lines a day
1000 working lines a day
Beiträge: 690
Registriert: Mi, 28. Jul 2010 17:16

Re: Event an Windows senden

Beitrag von ramses » Mo, 14. Mär 2016 13:05

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

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1806
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: Event an Windows senden

Beitrag von Herbert » Mo, 14. Mär 2016 15:21

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: 10518
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Event an Windows senden

Beitrag von AUGE_OHR » Mo, 14. Mär 2016 20:37

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: 2282
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: Event an Windows senden

Beitrag von Wolfgang Ciriack » Di, 15. Mär 2016 7:03

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
Programmier-Gott
Programmier-Gott
Beiträge: 1280
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Event an Windows senden

Beitrag von Werner_Bayern » Di, 15. Mär 2016 14:57

Servus Wolfgang,

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

Werner

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6790
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Event an Windows senden

Beitrag von Tom » Di, 15. Mär 2016 16:14

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
1000 working lines a day
1000 working lines a day
Beiträge: 690
Registriert: Mi, 28. Jul 2010 17:16

Re: Event an Windows senden

Beitrag von ramses » Do, 17. Mär 2016 9:38

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

Antworten