Event an Windows senden

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

Moderator: Moderatoren

Event an Windows senden

Beitragvon 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
ramses
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 438
Registriert: Mi, 28. Jul 2010 16:16

Re: Event an Windows senden

Beitragvon 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
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10205
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Event an Windows senden

Beitragvon 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
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1773
Registriert: Mi, 13. Aug 2008 23:22
Wohnort: Gmunden am Traunsee, Österreich

Re: Event an Windows senden

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

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

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1215
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Event an Windows senden

Beitragvon 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
ramses
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 438
Registriert: Mi, 28. Jul 2010 16:16

Re: Event an Windows senden

Beitragvon 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
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1773
Registriert: Mi, 13. Aug 2008 23:22
Wohnort: Gmunden am Traunsee, Österreich

Re: Event an Windows senden

Beitragvon 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
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10205
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Event an Windows senden

Beitragvon 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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2227
Registriert: Sa, 24. Sep 2005 8:37
Wohnort: Berlin

Re: Event an Windows senden

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

Re: Event an Windows senden

Beitragvon 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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6692
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: Event an Windows senden

Beitragvon 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
ramses
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 438
Registriert: Mi, 28. Jul 2010 16:16


Zurück zu Windows, API

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast