1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Carsten

Beiträge von Carsten

  • Umsetzen Beispiele (z.B.Visual Basic) in AutoIt

    • Carsten
    • 17. September 2007 um 12:24

    Vielen Dank für die Antworten

    peethebee
    Die Umsetzung mit XML entspricht wohl meiner Technik mit HTML oder wie früher schon mal mit RTF. (Vorlage erstellen, Variablen definieren, Einlesen, Variablen tauschen, drucken).
    Das funktioniert zwar sehr gut, aber die Erstellung und Pflege ist sehr aufwändig. Daher für mich kein Thema mehr.

    @progandy 
    Tolle Lösung, wenn jemand einfach nur einen einfachen LISTENausdruck braucht: UNBEDINGT ANSCHAUEN (Nachteil: zusätzliche Programminstallation nötig, Vorteil: schnell + einfach, Vorschauansicht).

    Für meinen Fall fehlen allerdings Grafikeinbindung und größere Kopfgestaltungen. Da bin ich mit meiner HTML-Technik flexibler. Aber ich habe dort auch das Programm 'Fast Report' gefunden. Mit dem würde es toll funktionieren, aber ich bekomme den Aufruf von AutoIt nicht hin. (Fast Report schein ähnlich wie List + Label zu sein, aber günstiger).

    FRAGE:
    =====
    Ich habe mit dem List+Label-Support gesprochen, wegen Aufruf über AutoIt. Der meinte die DLL ist eine normale windows-DLL und keine COM-Technik und muss deshalb nicht registriert werden. Was heißt das?
    Kann ich auf den Befehl '$objReport = ObjCreate("xxx")' verzichten?

    Er meinte wenn ich COM-Programmierung brauche, sollte ich es über Active-X machen (cmll120.ocx). Wie kann ich denn diese einbinden? Gibt es irgendwo Beispiele? Ich finde aber in der ganzen List+Label-Anleitung keinen Objektnamen, den ich verwenden kann, wie z.B. hier:
    - $oRP = ObjCreate("RICHTEXT.RichtextCtrl.1")
    - $oWMP = ObjCreate("WMPlayer.OCX" )
    - $objReport = ObjCreate("Catchysoftreport.Report")

    Aber ohne geht es doch nicht, oder?

    Vielen Dank
    viele Grüße
    Carsten

  • Umsetzen Beispiele (z.B.Visual Basic) in AutoIt

    • Carsten
    • 15. September 2007 um 19:56

    Hallo Forum,
    hier habe ich wohl mal wieder eine 'Spezialanfrage'....

    Ich habe einige kleine Hilfsprogramme mit AutoIt erstellt, bei der eine Druckausgabe erfolgt. Jedoch ist AutoIt mit Druckersteuerung meines Wissens bisher nicht so gut ausgestattet, weshalb ich mir mit einer HTML-Vorlage mit Variablen behelfe und diese Datei einlese, Variablen mit Drucktext austausche und über den IE ausdrucke. Aber leider ist HTML so komisch dynamisch..... irgendwie ändert sich das Aussehen immer mal wieder (z.B. Spaltenbreiten) *grins*

    Jetzt habe ich den List + Label-Designer entdeckt (der allerdings viel Geld kostet) (Homepage). Aber u.U. ist das eine Problemlösung für mich und daher habe ich die Testversion installiert.

    Dort sind zwar eine Menge Programmierbeispiele beschrieben (siehe Anhang), da ich aber keine andere Sprache als AutoIt (und Basic aus den Anfängen) kenne, kann ich die schlecht umsetzen.

    Hat jemand schon Erfahrung mit dem Umsetzen von Beispielen aus anderen Sprachen? Ich kann gerne mal ein Beispiel hier plazieren.

    Vielen Dank
    Viele Grüsse
    Carsten

    Bilder

    • anlage_20070915_153630.jpg
      • 21,78 kB
      • 190 × 444
  • Tastenkombination NUR INNERHALB Script abfragen?

    • Carsten
    • 25. August 2007 um 13:02

    Hallo,
    danke für die Infos.

    unearth:
    Na das kann meines Erachtes nicht gehen, da ja immer nur ein Wert übermittelt wird. Man müsste sie kurz nacheinander abfragen - aber das ist eine wackelige Geschichte. Probiert habe ich es allerdings nicht.


    @derda:
    Das ist zwar um's Eck gedacht, aber eine gute Idee. Mir wäre es allerdings lieber, wenn es nicht 'um mehrere Ecken' ginge. Allerdings funktioniert mit dieser Technik z.B. in SciTE die Alt-S (Menü Search) nicht mehr - er öffnet das Menü und schließt es gleich wieder, d.h. keine Chance die Untermenüs aufzurufen.


    Ich bin also so weit wie vorher...... schade, wo ich doch so tastaturorientiert bin....


    Nachtrag:
    ICH HABE EINE LÖSUNG...... inspiriert durch 'derda'. Das ein- + ausschalten ist gut, aber etwas anders......

    [autoit]


    ;#Include <GuiList.au3>
    #include <GUIConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    $fenstername = "Test"

    [/autoit][autoit][/autoit][autoit]

    ;Hotkeys definieren
    $statusfenster = 0
    global $def_taste1 = "!1"
    global $def_taste2 = "!2"
    global $def_taste3 = "!3"
    global $def_taste4 = "!4"
    global $def_eing1 = "!a"
    global $def_eing2 = "!b"
    global $def_eing3 = "!s"
    global $def_eing4 = "!f"

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; GUI erstellen
    $Form1 = GUICreate($fenstername, 600, 458, -1, -1)

    [/autoit][autoit][/autoit][autoit]

    $spalte = 50
    $zeile = 20

    [/autoit][autoit][/autoit][autoit]

    $knopf1 = GUICtrlCreateButton("Knopf 1 (Alt-1)", $spalte, $zeile, 80, 20 )
    $eingabe1 = GUICtrlCreateInput("", $spalte+150, $zeile, 280, 20)
    GUICtrlSetState(-1, $GUI_FOCUS)
    GUICtrlCreateLabel("(Alt-a)",$spalte+450,$zeile,60,20)

    [/autoit][autoit][/autoit][autoit]

    $zeile = $zeile + 40
    $knopf2 = GUICtrlCreateButton("Knopf 2 (Alt-2)", $spalte, $zeile, 80, 20 )
    $eingabe2 = GUICtrlCreateInput("", $spalte+150, $zeile, 280, 20)
    GUICtrlCreateLabel("(Alt-b)",$spalte+450,$zeile,60,20)

    [/autoit][autoit][/autoit][autoit]

    $zeile =$zeile+ 40
    $knopf3 = GUICtrlCreateButton("Knopf 3 (Alt-3)", $spalte, $zeile, 80, 20 )
    $eingabe3 = GUICtrlCreateInput("", $spalte+150, $zeile, 280, 20)
    GUICtrlCreateLabel("(Alt-s)",$spalte+450,$zeile,60,20)

    [/autoit][autoit][/autoit][autoit]

    $zeile =$zeile+ 40
    $knopf4 = GUICtrlCreateButton("Knopf 4 (Alt-4)", $spalte, $zeile, 80, 20 )
    $eingabe4 = GUICtrlCreateInput("", $spalte+150, $zeile, 280, 20)
    GUICtrlCreateLabel("(Alt-f)",$spalte+450,$zeile,60,20)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    GUISetState(@SW_SHOW, $Form1)
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop


    case $msg = $knopf1
    msgbox(4096,"Hinweis "&$fenstername,"Aktiviert wurde Knopf 1")

    case $msg = $knopf2
    msgbox(4096,"Hinweis "&$fenstername,"Aktiviert wurde Knopf 2")

    case $msg = $knopf3
    msgbox(4096,"Hinweis "&$fenstername,"Aktiviert wurde Knopf 3")

    case $msg = $knopf4
    msgbox(4096,"Hinweis "&$fenstername,"Aktiviert wurde Knopf 4")

    EndSelect

    [/autoit][autoit][/autoit][autoit]

    ; der Schalter 'Statusfenster' verhindert das ständige durchlaufen (Ressourcenschonung)
    if wingettitle("") = $fenstername and $statusfenster = 0 then ; wenn Fenster aktiv, Tastenkombis AKTIVIEREN
    ToolTip("Tastenkombination ist EIN")
    hotkeyset($def_taste1,"taste_01")
    hotkeyset($def_taste2,"taste_02")
    hotkeyset($def_taste3,"taste_03")
    hotkeyset($def_taste4,"taste_04")
    hotkeyset($def_eing1,"taste_eing01")
    hotkeyset($def_eing2,"taste_eing02")
    hotkeyset($def_eing3,"taste_eing03")
    hotkeyset($def_eing4,"taste_eing04")
    $statusfenster = 1
    EndIf
    if wingettitle("") <> $fenstername and $statusfenster = 1 then ; andernfalls deaktivieren
    ToolTip("Tastenkombination ist AUS")
    hotkeyset($def_taste1)
    hotkeyset($def_taste2)
    hotkeyset($def_taste3)
    hotkeyset($def_taste4)
    hotkeyset($def_eing1)
    hotkeyset($def_eing2)
    hotkeyset($def_eing3)
    hotkeyset($def_eing4)
    $statusfenster = 0
    endif

    [/autoit][autoit][/autoit][autoit]

    WEnd
    Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    func taste_01()
    GUICtrlSetState($knopf1,$GUI_FOCUS) ; in Focus setzen
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func taste_02()
    GUICtrlSetState($knopf2,$GUI_FOCUS)
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func taste_03()
    $msg = $knopf3 ; sofort aktivieren
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func taste_04()
    $msg = $knopf4 ; sofort aktivieren
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func taste_eing01()
    GUICtrlSetState($eingabe1,$GUI_FOCUS)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func taste_eing02()
    GUICtrlSetState($eingabe2,$GUI_FOCUS)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func taste_eing03()
    GUICtrlSetState($eingabe3,$GUI_FOCUS)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func taste_eing04()
    GUICtrlSetState($eingabe4,$GUI_FOCUS)
    EndFunc

    [/autoit]


    Grüße
    Carsten

  • dll call version 3.1 --> 3.2.4.x FEHLER

    • Carsten
    • 22. August 2007 um 22:13

    Hallo,

    ich habe heute das Screenshot-Beispiel von Screenshot.exe

    benutzen wollen und bekomme auch diese Fehlermeldung.

    Wurde das Script den neuen Anforderungen noch nicht angepasst?

    Ich habe mal folgenden Hinweis bekommen:

    Zitat

    Ist ein AutoIt-Update afaik. Die DLLCalls wurden geändert und man muss als Parameter noch angeben, dass man im Standardformat called (müsste die Fehlermeldung auch aussagen).

    peethebee

    Aber was ich konkret machen muss, habe ich noch nicht rausgefunden.....

    Vielleicht weiß doch inzwischen jemand zu helfen?

    Nachtrag:

    [autoit]


    ;Das funktioniert NICHT:
    $result = DllCall("captdll.dll", "int", "CaptureRegion", "str", $CaptureDirectory & $CaptureFile, "int", $Cwin2[0], "int", $Cwin2[1], "int", $Cwin2[2], "int", $Cwin2[3], "int", $Quality)

    ; das funktioniert:
    $result = DllCall("user32.dll", "int", "MessageBox", "hwnd", 0, "str", "Some text", "str", "Some title", "int", 0)

    [/autoit]

    Einen Unterschied in den Parametern bzw. in deren Anzahl kann ich nicht finden.....

    Nachtrag 2:
    Es klappt weder mit Stabil: 3.2.4.9 (Q, H)
    noch mit Beta: 3.2.5.7 (Q, H)

    Vielen Dank,
    viele Grüße
    Carsten

  • Tastenkombination NUR INNERHALB Script abfragen?

    • Carsten
    • 15. August 2007 um 23:06

    :) - gute Idee - geht aber nicht.

    Das funktioniert beim Menü......
    (GUICtrlCreateMenu / GUICtrlCreateMenuitem)

  • Tastenkombination NUR INNERHALB Script abfragen?

    • Carsten
    • 15. August 2007 um 22:58

    Kannst Du nicht in der Func des Hotkeys einfach abfragen ob das Fenster aktiv oder existent ist?

    Das habe ich mir nämlich auch schon überlegt. Doch ist die Tastenkombination dann dennoch für alle Programme reserviert - es passiert halt nur was wenn das gewünschte Fenster aktiv / vorhanden ist.......

    Vielleicht aber eine Lösung für Dich.

    Grüße
    Carsten


    Nachtrag: Da du nur 1 Taste hast, könntest Du mit '_ifpressed' arbeiten. Das ist immer nur bei aktivem Script präsent - Infos gibt es hier im Board dazu genug.......

  • Tastenkombination NUR INNERHALB Script abfragen?

    • Carsten
    • 15. August 2007 um 22:46

    Hallo, schönen Abend,

    ich habe in einem Skript mehrere Tabs und würde gerne jedes Tab nicht nur mit Maus sondern auch mit Alt + Buchstabe des Tabnamens aufrufen können.

    HotkeySet funktioniert auch wenn das Script nicht aktiv ist - das will ich aber nicht.

    IfPressed geht nicht mit Tastenkombinationen (oder?)

    Was gibt es noch für eine Möglichkeit?


    [autoit]


    ; Hier im Beispiel möchte ich konkret mit Alt-1 / Alt-2 / Alt3 die entsprechenden Tabs aktivieren.

    [/autoit][autoit][/autoit][autoit]

    #include <GUIConstants.au3>
    ; == GUI generated with Koda ==
    $Form1 = GUICreate("Testscript", 460, 297, 237, 142)

    [/autoit][autoit][/autoit][autoit]

    $Tab1 = GUICtrlCreateTab(16, 24, 425, 257)
    GUICtrlCreateTabItem("1.Tab")

    [/autoit][autoit][/autoit][autoit]

    GUICtrlCreateTabItem("2.Tab")

    [/autoit][autoit][/autoit][autoit]

    GUICtrlCreateTabItem("3.Tab")

    [/autoit][autoit][/autoit][autoit]

    GUISetState(@SW_SHOW)
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case Else
    ;;;;;;;
    EndSelect
    WEnd
    Exit

    [/autoit]


    Vielen Dank
    viele Grüße
    Carsten

  • MsgBox - alle Parameter auf einen Blick

    • Carsten
    • 28. Juli 2007 um 13:12

    BugFix
    Und ich habe immerhin auch das 'Scite-Fahrrad' dadurch kennengelernt....
    ALT-W kannte ich nämlich auch noch nicht.

    Und ich habe bemerkt, dass ich fast immer 4096 (+x) verwende, weil es oben bleibt. Aber es ist wohl besser

    'If MsgBox(262145, '', '') = 1/2 Then ; OK/Abbrechen' *

    zu verwenden, oder? (Konkrete Frage: Was bedeutet Modal:System)

    Grüße
    Carsten


    * Ist aus deinem Tool, hast Du's erkannt *lacht*

  • ein Datums-/Uhrzeitfeld (guictrlcreateDATE) nachträglich füllen

    • Carsten
    • 27. Juli 2007 um 20:51

    Oh mann......... *lacht*

    Das hatte ich auch mal probiert, allerdings in deutschem Format........

    Vielen Dank

  • ein Datums-/Uhrzeitfeld (guictrlcreateDATE) nachträglich füllen

    • Carsten
    • 27. Juli 2007 um 20:41

    Hallo,

    ich glaub ich stehe gerade wieder kräftig auf dem Schlauch.....

    Wieso kann ich das Datumsfeld nicht auf 'null' stellen?

    Zitat


    GUICtrlSetData ( controlID, data [, default] )

    Parameters
    For Date : date or time depending the style of the control

    Gibt es ein besonderes Format????

    Vielen Dank
    Viele Grüße
    Carsten

    [autoit]


    #include <GUIConstants.au3>
    #include <date.au3>
    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    GUICreate ( "My GUI get date", 400,100,-1,-1,BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS),$WS_EX_ACCEPTFILES)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $uhrzeit =GUICtrlCreateDate (@hour&":"&@min&":"&@SEC, 10,10,70,20,$DTS_TIMEFORMAT) ;,$DTS_SHORTDATEFORMAT )
    $nullstellen = GUICtrlCreateButton("0h",90,10,20,20)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    GUISetState ()

    [/autoit][autoit][/autoit][autoit]

    ; Run the GUI until the dialog is closed
    while 1
    $msg = GUIGetMsg()
    Select

    case $msg = $GUI_EVENT_CLOSE
    Exit

    case $msg = $nullstellen

    GUICtrlSetData($uhrzeit,"00:00:00")
    ;GUICtrlSetData($uhrzeit,"")
    ;GUICtrlSetData($uhrzeit,"01.01.2000")
    ; gehen alle NICHT .....

    EndSelect
    wend

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • Speicheradresse auslesen (noch immer: Game-Port)

    • Carsten
    • 27. Juli 2007 um 14:58

    Ok, alles kann ich halt doch nicht mit AutoIt lösen........

    Ich denke ich kaufe mir bei einem Elektronikversender eine externe Schnittstelle mit Software, die ich dann ja ggf. auch mit AutoIt 'veredeln' kann.

  • Broadcast-Meldung von Server an alle verschicken

    • Carsten
    • 27. Juli 2007 um 14:54

    Ja das mache ich ja *lacht*:

    Ich bennene das Datenverzeichnis um,
    mache meinen Index auf dem Server
    dannach wird das Verzeichnis wieder zurückbenannt.

    Vorteile:
    Arbeitet noch jemand im System, kann er das Verz. nicht umbenennen und den Index nicht starten.

    Sind alle aus der Anwendung raus, wird umbenannt und keiner kann mehr rein bis der Index fertig ist.

    Ist doch ideal.

    Nur wäre toll, wenn die Anwender eine Info bekämen, wenn der Server fertig ist.

    Aber ein Index tagsüber kommt auch nicht so häufig vor, dass sich großer Aufwand lohnt.

    Grüße
    Carsten

  • Ausdrucken von Gui-Listen

    • Carsten
    • 27. Juli 2007 um 00:07

    Um dieses Thema abzuschliessen:

    Ich habe mir den HTML-Editor NVU angeschafft und dort gestalte ich mein Blatt als HTML-Datei.

    Den Quelltext lese ich dann mit AutoIt ein und ersetze die Variablen mit den gewünschten Daten.

    Diese schreibe ich dann in eine 'druck.html'-Datei, welche ich dann aufrufe und ausdrucke:

    $oIE = _IECreate ($datei_druck.html)
    _IEAction ($oIE, "printdefault"))


    Funktioniert ganz gut.

  • Broadcast-Meldung von Server an alle verschicken

    • Carsten
    • 26. Juli 2007 um 23:57
    Zitat

    Dafür muss aber der Nachrichtendienst aktiviert sein. Dieser ist aber eigentlich mittlerweile in allen größeren Netzen abgeklemmt.

    Stimmt, ist abgeschaltet....

    Ich habe mich entschieden, dass der Server keine Meldung ausgibt, wenn er mit dem Index fertig ist.... Die Anwender können es ja so lange probieren bis es eben wieder geht.....

    Danke dennoch
    Carsten

  • Status abfragen: "Always On Top"

    • Carsten
    • 26. Juli 2007 um 23:52

    Perfekt..... Vielen Dank

    Es ist immer wieder toll, wie viel Wissen hier verborgen und durch die richtigen Fragen gehoben wird.

    Danke
    Carsten

  • Speicheradresse auslesen (noch immer: Game-Port)

    • Carsten
    • 26. Juli 2007 um 14:01

    Hallo,

    im englischen Forum habe ich zwei Links bekommen, aber da geht es um Speicherprogrammierung - und das auch noch in Englisch..... puhhhh

    HIER (engl.Forum)[LINK] wird folgendes diskutiert:

    Zitat

    noticed AutoHotkey added RegisterCallback(), which creates a machine-code address that when called, redirects the call to a function in the script.
    This could be usefull adition to Autoit.


    Der Verweis ging allerdings auf diesen Beitrag[LINK] der eine Funktion enthält (komplett siehe Spoiler):

    Zitat

    ; Function Name: _DllCallBackAlloc
    ; Description: Allocates memory on global heap and creates a procedure
    ; which forwards a pointer to its arguments to a Window
    ; Parameter(s): $nParameters - number of parameters
    ; $hWnd - handle of receiving window
    ; $msg - Window Message
    ; $wParam, Optional - wParam to pass to the handler procedure
    ; $fCedecl, Optional - use cdecl calling convention (default is stdcall)
    ; Requirement(s):
    ; Return Value(s): Pointer to created stub or NULL on error
    ; @error Value(s): 1 = Error allocating memory from global heap
    ; 2 = Error Loading User32.dll
    ; 3 = Failed to get the address of SendMessage
    ;
    ; Author(s):

    Alles anzeigen
    Spoiler anzeigen

    Global $gp_DllCallBack_SendMessage = 0
    Global $gh_DllCallBack_hUser32 = 0
    Global $gi_DllCallBack_StubCount = 0

    ;===============================================================================
    ;
    ; Function Name: _DllCallBackAlloc
    ; Description: Allocates memory on global heap and creates a procedure
    ; which forwards a pointer to its arguments to a Window
    ; Parameter(s): $nParameters - number of parameters
    ; $hWnd - handle of receiving window
    ; $msg - Window Message
    ; $wParam, Optional - wParam to pass to the handler procedure
    ; $fCedecl, Optional - use cdecl calling convention (default is stdcall)
    ; Requirement(s):
    ; Return Value(s): Pointer to created stub or NULL on error
    ; @error Value(s): 1 = Error allocating memory from global heap
    ; 2 = Error Loading User32.dll
    ; 3 = Failed to get the address of SendMessage
    ;
    ; Author(s):
    ;
    ;===============================================================================
    ;
    Func _DllCallBackAlloc($nParameters, $hWnd, $msg, $wParam = 0, $fcdecl = False)
    Local $hGlobal, $hUser32, $pSendMessage_RelAddr, $vStub
    $hGlobal = DllCall("kernel32.dll", "ptr", "GlobalAlloc", "uint", 0, "dword", 86) ; 86 = Size of stub
    If @error Then Return SetError(1, 0, 0)
    If $hGlobal[0] = 0 Then Return SetError(1, 0, 0)
    $hGlobal = $hGlobal[0]
    If $gp_DllCallBack_SendMessage = 0 Then
    $hUser32 = DllCall("kernel32.dll", "ptr", "LoadLibrary", "str", "user32.dll")
    If @error Then Return SetError(2, 0, 0)
    If $hUser32[0] = 0 Then SetError(2, 0, 0)
    $gh_DllCallBack_hUser32 = $hUser32[0]
    $pSendMessage = DllCall("kernel32.dll", "ptr", "GetProcAddress", "ptr", $gh_DllCallBack_hUser32, "str", "SendMessageA")
    If @error Then Return SetError(3, 0, 0)
    If $pSendMessage = 0 Then Return SetError(3, 0, 0)
    $gp_DllCallBack_SendMessage = $pSendMessage[0]
    EndIf
    $pSendMessage_RelAddr = $gp_DllCallBack_SendMessage - ($hGlobal + 0x21)
    $vStub = DllStructCreate("ubyte[29];" _ ; 1 Stub Part 1
    & "ptr;" _ ; 2 Address of SendMessage relative to $+21 (pTo - $+21)
    & "ubyte[9];" _ ; 3 Stub Part 2
    & "byte[6];" _ ; 4 6 bytes nothing
    & "long;" _ ; 5 nParams
    & "hwnd;" _ ; 6 hwnd
    & "uint;" _ ; 7 msg
    & "uint;", $hGlobal) ; 8 wparam
    #cs Stub Part 1
    $ ==> > E8 00000000 CALL 0015B4BD
    $+5 > 58 POP EAX
    $+6 > 8D90 2B000000 LEA EDX,DWORD PTR DS:[EAX+2B]
    $+C > 8D4424 04 LEA EAX,DWORD PTR SS:[ESP+4]
    $+10 > FF32 PUSH DWORD PTR DS:[EDX]
    $+12 > 50 PUSH EAX
    $+13 > FF72 0C PUSH DWORD PTR DS:[EDX+C]
    $+16 > FF72 08 PUSH DWORD PTR DS:[EDX+8]
    $+19 > FF72 04 PUSH DWORD PTR DS:[EDX+4]
    $+1C > E8 !!!!!!!! CALL USER32.SendMessageA ; $pSendMessage_RelAddr
    #ce
    DllStructSetData($vStub, 1, Binary("0xE800000000588D902B0000008D442404FF3250FF720CFF7208FF7204E8"))
    DllStructSetData($vStub, 2, $pSendMessage_RelAddr)
    If $fcdecl Then
    #cs Stub Part 2 - cdecl
    $+21 > 90 NOP
    $+22 > 5A POP EDX
    $+23 > 59 POP ECX
    $+24 > 90 NOP
    $+25 > 90 NOP
    $+26 > 90 NOP
    $+27 > FFE1 JMP ECX
    $+29 > 90 NOP
    #ce
    DllStructSetData($vStub, 3, Binary("0x905A59909090FFE190"))
    Else
    #cs Stub Part 2 - stdcall
    $+21 > 90 NOP
    $+22 > 5A POP EDX
    $+23 > 59 POP ECX
    $+24 > 8D2494 LEA ESP,DWORD PTR SS:[ESP+EDX*4]
    $+27 > FFE1 JMP ECX
    $+29 > 90 NOP
    #ce
    DllStructSetData($vStub, 3, Binary("0x905A598D2494FFE190"))
    EndIf
    ;~ $+2A > 000000000000
    DllStructSetData($vStub, 4, Binary("0x000000000000"))
    ;~ $+30 > 00000000
    DllStructSetData($vStub, 5, $nParameters)
    ;~ $+34 > 00000000
    DllStructSetData($vStub, 6, $hWnd)
    ;~ $+38 > 00000000
    DllStructSetData($vStub, 7, $msg)
    ;~ $+3C > 00000000
    DllStructSetData($vStub, 8, $wParam)
    $gi_DllCallBack_StubCount += 1
    Return $hGlobal
    EndFunc ;==>_DllCallBackAlloc


    ;===============================================================================
    ;
    ; Function Name: _DllCallBackFree
    ; Description: Frees memory from global heap allocated by _DllCallBackAlloc
    ; Parameter(s): $hStub - Pointer to stub
    ; Requirement(s):
    ; Return Value(s): On Success: True
    ; On Failure: False
    ; @error Value(s): 1 - Error freeing memory
    ; 2 - Error freeing User32.dll
    ; Author(s):
    ;
    ;===============================================================================
    ;
    Func _DllCallBackFree(ByRef $hStub)
    Local $aTmp
    If $hStub > 0 Then
    $aTmp = DllCall("kernel32.dll", "ptr", "GlobalFree", "ptr", $hStub)
    If @error Then Return SetError(1, 0, False)
    If $aTmp[0] = $hStub Then Return SetError(1, 0, False)
    If $aTmp[0] = 0 Then
    $hStub = 0
    $gi_DllCallBack_StubCount -= 1
    If $gi_DllCallBack_StubCount < 1 Then
    $gi_DllCallBack_StubCount = 0
    $aTmp = DllCall("kernel32.dll", "int", "FreeLibrary", "ptr", $gh_DllCallBack_hUser32)
    If @error Then Return SetError(2, 0, False)
    If $aTmp[0] = 0 Then Return SetError(2, 0, False)
    $gh_DllCallBack_hUser32 = 0
    EndIf
    Return True
    EndIf
    Return False
    EndIf
    Return True
    EndFunc ;==>_DllCallBackFree

    Zusammen mit dem Link auf eine Assembler Abfrage des Game-Ports[LINK] könnte ich evtl. meinem Ziel näher kommen.

    Aber..... kann mir jemand sagen, was ich damit machen kann???? (Blöde Frage... mal schauen ob auch eine blöde Antwort kommt *grins*)

    Vielen Dank
    viele Grüße
    Carsten

    Nachtrag [WERBUNG EIN]:
    Warum erkennt eigentlich niemand, was man für tolle Sachen machen könnte, wenn man den Game-Port über AutoIt ansteuern könnte??? Alle möglichen Geräte könnte man über den PC ein/ausschalten (mit Relais), Programme per 'Klingelknopf' starten, Lautstärke am PC per Kabelfernbedienung, Prüfen wann jemand im Zimmer war, etc., etc, etc.
    [WERBUNG AUS] *lacht*

  • Status abfragen: "Always On Top"

    • Carsten
    • 26. Juli 2007 um 13:38

    Hallo,

    ich habe an einem Script den Knopf 'TOP', der das Fenster, welches 3 sec nach Knopfdruck aktiv ist, immer oben hält. (mit WinSetOnTop).

    Wenn ich aber den Status wieder zurücknehmen möchte, sollte ich erkennen können, ob das aktive Fenster 'always on Top' ist oder nicht.

    Gibt es dazu eine Möglichkeit?

    [autoit]


    case $nMsg = $schalter_onTop
    beep(300,50)
    sleep(3000)
    $text = WinGetTitle("")
    ; erkennen ob 'onTop' oder nicht
    if 'NICHT ON TOP' then
    WinSetOnTop($text,"",1)
    else
    WinSetOnTop($text,"",0)
    endif
    beep(300,50)
    sleep(300)
    beep(300,50)

    [/autoit]

    Alternative ist 2 Knöpfe zu machen und der Anwender entscheidet.......

    Vielen Dank
    viele Grüße
    Carsten

  • Broadcast-Meldung von Server an alle verschicken

    • Carsten
    • 19. Juli 2007 um 08:37

    Ok, ich sehe schon: ich habe keine Ahnung........

    Ich kenne (kannte) nur den Befehl auf einem Novell-Server und dann ist auf jedem Bildschirm an den angemeldeten Clients eine Meldung dick und fett erschienen. Zusatzprogramme waren keine notwendig.

    Ich dachte nur, so was gibt es vielleicht auch für Windows

  • Broadcast-Meldung von Server an alle verschicken

    • Carsten
    • 19. Juli 2007 um 08:06

    Hallo,
    geht das eigentlich irgendwie unter Windows (win 2000 server). Früher bei Novell konnte ich das noch selbst *grins*

    Vielen Dank
    viele Grüsse
    Carsten

  • doppelklick

    • Carsten
    • 18. Juli 2007 um 21:05

    Irgendwoher habe ich dieses hier

    [autoit]


    ;Register WM_NOTIFY events
    GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")

    [/autoit][autoit][/autoit][autoit]

    .
    .
    .

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; WM_NOTIFY event handler
    Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $suche_list
    Select
    ;Case $event = $NM_CLICK
    ;ConsoleWrite("SingleClick" & @LF)
    Case $event = $NM_DBLCLK
    $text = _GUICtrlListViewGetItemText ($suche_list, _GUICtrlListViewGetSelectedIndices($suche_list))
    $text = StringLeft($text,StringInStr($text,"|")-1)
    up_anzeigen($text)
    ;MsgBox(0,"Double Clicked", _GUICtrlListViewGetItemText ($suche_list, _GUICtrlListViewGetSelectedIndices($suche_list)))
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>WM_Notify_Events

    [/autoit][autoit][/autoit][autoit][/autoit]

    Leider habe ich gerade keine Zeit das weiter auszuholen - habe es kurzerhand aus dem Script kopiert an dem ich gerade arbeite - vielleicht nützt es Dir aber was....

    Grüsse
    Carsten

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™