Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

In Formularen AHK-Befehle feldspezifisch definieren


  • Please log in to reply
28 replies to this topic
Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo nnnik!

 

Mir ist gerade eine ganz andere Idee gekommen.

Gibt es die Möglichkeit, das Eigenschaftenfeld im Hintergrund öffnen zu lassen oder sonst "anzuzapfen"? Wenn ich das bei einem Steuerungselement aufrufe (Rechtsklick, Mausmenü...) dann steht der Cursor nämlich dort bereits im Namen des Feldes (Bezeichnung genannt).

Ich bräuchte den also nur noch herauszukopieren und im AHK mit dem vorgegebenen Namen vegleichen zu lassen.

Nur sollte das natürlich im Hintergrund geschehen, ohne daß man während der laufenden Arbeit, die Formulare auszufüllen, etwas merkt, geschweige denn, daß sich dabei plötzlich irgendwelche Fenster öffneten.

 

Viele Grüße von Meister Lampe



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Es wäre einfacher es anders zu machen, wenn der Name wirklich dort steht.

Pe ControlGetText kannst du nämlich den Inhalt erhalten.


Visit the new forum ahkscript.org.

http://ahkscript.org


Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo nnnik!

 

Wie müßte der Code aussehen, um die Eigenschaften auszulesen? Ich habe das jetzt mal versucht für beliebige Felder, aber irgendwas stimmt da noch nicht mit den Parametern:

^f::
ControlGetText, Feldname, Eigenschaften
	MsgBox, Dieses Feld hat den Namen "%Feldname%".
return

Auf Strg+F erscheint die Msg-Box mit der Nachricht: Dieses Feld hat den Namen ""

 

Wenn ich den Namen erstmal habe, dann müßte untendrunter so etwas wie:

tab::
...

if (%Feldname% = Vorgabe)
	Send ^!{Down}
else	
	Send {Tab}
return

Aber was muß dorthin, wo die drei Pünktchen stehen?

 

Viele Grüße von Meister Lampe



Andi
  • Members
  • 195 posts
  • Last active: Apr 18 2014 05:03 PM
  • Joined: 11 Feb 2005

Hi Meister L.
 
leider funktioniert Dein Link zu Deinem Bild nicht mehr.
 
Versuche es mal wie folgt. Wichtig ist das Dollarzeichen vor dem Hotkey, damit sich das Skript nicht selbst antriggert. Die ahkClass von dem besagten Control solltest Du hoffentlich mit Window Spy angezeigt bekommen. Dann das Wort "Edit" mit dem Namen Deines Controls dann ersetzen.

$tab::
GuiThreadInfoSize := 48
VarSetCapacity(GuiThreadInfo, GuiThreadInfoSize)
NumPut(GuiThreadInfoSize, GuiThreadInfo, 0)
If not DllCall("GetGUIThreadInfo", uint, 0, str, GuiThreadInfo)
  {
    MsgBox GetGUIThreadInfo() hat einen Fehler entdeckt.
    Return
 }
FocusedHWND := NumGet(GuiThreadInfo, 12)  ; Ermittelt das hwndFocus-Feld aus der Struktur.
WinGetClass, Feldname, ahk_id %FocusedHWND%

if (Feldname = "Edit")
	Send ^!{Down}
else	
	Send {Tab}
return

Wenn das nicht klappt sag doch mal wie das Programm heißt, welches Du skripten möchtest.

 

LG Andi



Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo Andi & nnnik!

 

Dummerweise sind die Link hier immer nur auf 5 Downloads beschränkt. :angry:

Ich habe der Screenshot unter leicht verändertem Namen jetzt nochmals hochgeladen. Vielleicht könnt Ihr ihn ja anderswo abspeichern.

Hier also nochmal:

https://www.hidrive....om/lnk/PHMgjJMX

 

Du erkennst, daß sich zwar nicht das übliche Windows-Eigenschaften-Fenster öffnet, aber an oberster Stelle jeweils der Feldname sogar markiert ist und nur noch zum Vergleich herauskopiert werden müßte.

 

Was ist eigentlich dieses "Window Spy"? Ein AHK-Befehl jedenfalls nicht, sonst wäre er im Tutorial als solcher zu finden (und würde wohl auch nicht in zwei Wörtern geschrieben!). Im Zusammenhang mit den Class- oder Control-Namen wird das aber immer wieder erwähnt, nur nie wie andere normale Befehle zu einer genaueren Beschreibung seiner Anwendung verlinkt. Wenn ich das in die Suche eingebe, finde ich auch immer nur diese Stellen. Was muß ich damit machen?

 

Viele Grüße von Meister Lampe



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Window Spy ist ein Tool mit dem man sich Infos zu dem momentan aktiven Fenster und Control anschauen kann.

Es sollte eigentlich mit AHK mit installiert werden.


Visit the new forum ahkscript.org.

http://ahkscript.org


Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo nnnik!

 

Ich habe das Tool jetzt gefunden und ausprobiert. Es stellt sich allerdings heraus, daß die Steuerelemente und Eingabefelder des Formulars sich in den Angaben nicht unterscheiden (außer der Mausposition natürlich). Es steht nur der Name des Formularfensters angegeben.

Wie bereits angedeutet: Über die Mausposition ließe sich das nicht machen, da ich hier im Büro der einzige bin, der AHK installiert hat (das muß der Admin machen) und die anderen auf Wunsch einer Kollegin mit dem Tool versorgen möchte. Ich müßte die Koordinaten für jeden PC und Monitor neu ausmachen und einstellen.

 

Aber warum kann ich nicht das im Hintergrund vollziehen, was ich sonst auch machen würde:

Mit rechter Maustaste das Mausmenü aufrufen, ganz nach unten auf "Eigenschaften" steuern und klicken, dann kopieren (ja, beim Auruf der Eigenschaften der Steuerlemente sind ausgerechnet die ersten Angaben - die Feldnamen - bereits markiert!). Und anschließend mit dem vorgegebenen Feldnamen vergleichen.

Das sind doch alles Operationen, die mit AHK zu bewerkstelligen sind, oder? Bis auf daß ich (noch) nicht weiß, wie man in einem Menü den Cursor nach ganz unten navigiert - unabhängig wieviel Punkte das Menü enthält.

 

Viele Grüße von Meister Lampe



Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo Andi & nnnik!

 

Ich habe mich gestern auch mal an denjenigen gewannt, der für die Datenbank zuständig ist und nach Auskünften über das Formular gebeten. Mir ist nämlich z.b. auch aufgefallen, daß verschiedene Windows-Shortcuts innerhalb des Programms nicht funktionieren. so kann ich z.B. die Eigenschaften der Felder wie obed beschrieben aufrufen, nicht aber mit der Kombination Alt+Enter.

Der Typ ist aber bereits im Osterurlaub und erst nächste Woche wieder da.

 

Bis dahin wünsche ich Euch ebenfalls ein schönes Osterfest!

 

Meister Lampe

(ist zu Ostern ganz besonders beschäftigt...) :D



Andi
  • Members
  • 195 posts
  • Last active: Apr 18 2014 05:03 PM
  • Joined: 11 Feb 2005

danke, Dir auch ein schönes Osterfest!

 

Schade, dass Du mit WinSpy nichts angezeigt bekommst. Wie heißt denn nun das Programm mit dem Ihr arbeitet? Basiert dies eventuell auf Java? Da habe ich so was auch schon erlebt...

 

Ich habe mal mit verschiedenen Fenstern rumprobiert. Setze ich den Cursor auf eine bestimmte Stelle, ändert sich bei mir die Caret-Postition nicht, egal ob ich das Fenster in der Größe verändere oder verschiebe.

 

Vielleicht hilft Dir ja das u.g. Skript weiter. Um die Caret-Postition zu ermitteln, musst Du mit der linken Maustaste in das gewünschte Feld klicken! (Programm starten und beenden mit Strg + 1)

^1::  ;Wert/Steuerelement/Pos an der Cursorposition ermitteln 
  ; Dieses Script benötigt Windows 98, NT 4.0 SP3+ oder höher.
if HotkeyGestartet 
{ 
  HotkeyGestartet := false
  SetTimer, GetInfo, off 
  toolTip
  Sleep 500
} 
else 
{ 
  HotkeyGestartet := true 
  SetTimer, GetInfo, 200 
}   
return 


GetInfo:
  ; ermittelt die ahk_id (HWND) des !!!fokussierten Steuerelements!!! im aktiven Fenster.
  GuiThreadInfoSize := 48
  VarSetCapacity(GuiThreadInfo, GuiThreadInfoSize)
  NumPut(GuiThreadInfoSize, GuiThreadInfo, 0)
  If not DllCall("GetGUIThreadInfo", uint, 0, str, GuiThreadInfo)
    {
        MsgBox GetGUIThreadInfo() hat einen Fehler entdeckt.
        Return
    }
  WindowHWND := NumGet(GuiThreadInfo, 12)  ; Ermittelt das hwndFocus-Feld aus der Struktur.
  MouseGetPos, MouseX, MouseY, ID, ClassNNSteuerelement  ;ermittelt den Namen des ClassNN Steuerelements und die ahk_ID des Fensters unter dem Mauszeiger
  ControlGetPos, x, y, w, h, , ahk_id %WindowHWND%  ;ermittelt die Koordinaten des Steuerelements unter dem Mauszeiger anhand des WindowHWND
  WinGetClass, ahkclass, ahk_id %ID%
 
  ControlGetText, AusgabeText,, ahk_id %WindowHWND% ;ermittelt den Text aus dem fokussierten Steuerelements unter dem Mauszeiger anhand des WindowHWND
    
  ToolTip, MousePos: X%MouseX% Y%MouseY%`nA_Caret: X%A_CaretX% Y%A_CaretY%`nahk_class: %ahkclass%`nWindowHwnd: %WindowHWND%`nahk_id: %Id%`nClassNN: %ClassNNSteuerelement%%Liste%`nPos/Size Steuerelement:`nX%X% Y%Y%`nW%W% H%H%`n%Ausgabetext%
Return



Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo Andi!

 

Wir arbeiten mit der Archivsoftware scopeArchiv.

Siehe dazu hier. http://de.wikipedia....iki/ScopeArchiv und hier: http://www.scope.ch/de/Home.aspx

Vielleicht kann Dir das zur Analyse weiterhelfen.

An den Code kommen wir natürlich nicht ran.

 

Nach dem Motto:

Mein Name ist Meister Lampe, ich weiß nix.. B)



Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo, da bin ich wieder.

 

Ich habe von dem für die Scope-Datenbank bei uns zuständigen leider noch keine Antwort erhalten.

Ich habe jetzt noch anders herumprobiert und bin auf das folgende Problem gestoßen, daß sich noch nicht einmal speziell auf mein Anliegen hier bezieht:

Ist es mit dem AHK überhaupt möglich, Anwendungen/Funktionen aus Menüs oder gar Untermenüs aufzurufen, für die es keine vordefinierten Shortcuts gibt, um sich gerade deswegen das Leben erleichtern zu können? Insbesondere angesichts der neuen Ribbonleisten in den MS-Office Programmen und dem ewigen Rumgeklicke dort wäre das für häufig gebrauchte Vorgänge nützlich.

 

Viele Grüße von Meister Lampe



Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo!

 

Weiß niemand zu meiner letzten Frage (die letzte hier wird's noch nicht sein :p ) was zu sagen?

 

Ist es mit dem AHK überhaupt möglich, Anwendungen/Funktionen aus Menüs oder gar Untermenüs aufzurufen, für die es keine vordefinierten Shortcuts gibt, um sich gerade deswegen das Leben erleichtern zu können?

 

 

Viele Grüße von Meister Lampe



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Ja klar

Man kann mit AHK Messages Posten und Senden.

Dieser Mechanismus wird genutzt um alle Ereignisse (z.B. Mausclicks) an ein Control zu senden.

http://ahkscript.org...php?f=11&t=2436

 

Es gibt jedoch auch andere Möglichkeiten, die komplexer sind.

 

Für dein Problem wäre es das einfachte sich die Liste der Controls auf dem Fenster anzeigen zu lassen.

Dann nur diese mit dem richtigen Typ weiterzuverarbeiten und diese dann per Koordinaten zu identifizieren.


Visit the new forum ahkscript.org.

http://ahkscript.org


Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo Andi & nnik!

 

Die Sache hat sich erledigt.

 

Bei der Datenbank, die wir verwenden und deren Eingabeformular erst vor ein paar Monaten in zwei separate GUIs aufgeteilt wurde, ist - womöglich aufgrund allgemeinen Unwillens der benutzenden Kollegen - diese Veränderung wieder zurückgenommen worden.

Somit besteht auch kein Anlaß mehr, ein AHK-Tool zu entwickeln, das automatisch zwischen den zwei Formularen hin und her springt.

 

Ich möchte mich bei Euch bedanken für Eure geduldige Hilfe, denn auch wenn ich Eure Tips aktuell dazu nicht mehr benötige  bzw. verwenden kann, so habe ich doch eine Menge gelernt, die ich sicher ein anderes Mal hervorholen werde.

 

Viele Grüße von Meister Lampe