Kann man es machen das man HotKeys die schon von Windows besetzt sind
Also bei Programm die man sich runtergeladen hat geht das ja (also nti aus autoit)
Äh...gibt's diese Frage auch auf deutsch? ![]()
Kann man es machen das man HotKeys die schon von Windows besetzt sind
Also bei Programm die man sich runtergeladen hat geht das ja (also nti aus autoit)
Äh...gibt's diese Frage auch auf deutsch? ![]()
Frage 1: Den Port, den Du in Deinen Scripts (Server und Client) verwendest.
Frage 2: Das sollte dann Dein Script machen. ![]()
Du brauchst ein Serverscript und ein Clientscript, die dann eine Verbindung aufbauen müssen. Anschließend kannst Du zwischen den beiden Nachrichten übertragen.
Frage 3: Nein! Oder sagen wir mal Jein! Nicht pauschal, aber wenn Du weißt wie (rechnerabhängig), dann kannst Du das mit AutoIt evtl. automatisieren.
Ich habe aber die Vermutung, das solch ein Script Deine Fähigkeiten übersteigt (nicht böse gemeint). Vielleicht solltest Du Dich erstmal mit ein paar Grundlagen befassen. ![]()
Ein Chat-Programm benötigt die IP-Adresse des Gegenüber. Ob das nun eine lokale oder eine Internet-IP-Adresse ist, spielt keine Rolle. Wenn Du über's Internet chatten willst, dann musst Du Dir allerdings darüber Gedanken machen, wie Du an die IP-Adresse des Gegenüber kommst. Hier wäre z.B. DynDNS das Stichwort.
Wichtig ist außerdem, dass der verwendete Port in der Firewall freigegeben ist und in einem evtl. vorhandenen Router an den "Server"-Rechner weitergereicht wird.
Frage 1: Ich habe mir aus dem Netz eine "Leer"-DLL geholt und die dann mit dem Resource-Hacker bearbeitet.
Frage 2: Das mit der Icl-Datei hatte ich zuerst, aber dort werden die Icons dann nicht richtig angezeigt. Wobei ich jetzt nicht weiß, ob das etwas mit der Auflösung der Icons zu tun hat.
Ich habe BugFix's Beispiel mal um einen MsgBox-Ausgabe-Button erweitert:
; Muster Checkbox-Bearbeitung
; Ziel: einfache Abfrage, welche CB aktiviert sind
#include <GUIConstants.au3>
Opt('GUIOnEventMode', 1)
Opt("MustDeclareVars", 1)
Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str, $bOutput
Global $arCBNames = StringSplit('aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj,kkk,mmm,nnn,ooo,ppp,qqq,rrr,sss,ttt,uuu', ',')
Global $arCB[20][3] ; Array für Handle und Dual-Wert der CB
Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
; Startstatus für alle: UNCHECKED
Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
Global $top = -10
$GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
For $i = 0 To UBound($arCB) -1
$top += 30
$arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
$arCB[$i][0] = GUICtrlCreateCheckbox($arCBNames[$i+1], 40, $top, 120)
GUICtrlSetOnEvent(-1, '_ClickCB')
Next
$bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
GUICtrlSetOnEvent(-1, '_CheckAll')
$bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
GUICtrlSetOnEvent(-1, '_UnCheckAll')
$bOutput = GUICtrlCreateButton('MsgBox-Ausgabe', 250, 80, 150, 21)
GUICtrlSetOnEvent(-1, '_Output')
GUISetState()
While 1
Sleep(100)
WEnd
Func _Ende()
Exit
EndFunc
Func _ClickCB()
For $i = 0 To UBound($arCB) -1
If $arCB[$i][0] = @GUI_CtrlId Then
$Checked = BitXOR($Checked, $arCB[$i][1])
ExitLoop
EndIf
Next
_ReadCB()
EndFunc
Func _CheckAll()
For $i = 0 To UBound($arCB) -1
If Not BitAND($Checked, $arCB[$i][1]) Then
GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
$Checked = BitXOR($Checked, $arCB[$i][1])
EndIf
Next
_ReadCB()
EndFunc
Func _UnCheckAll()
For $i = 0 To UBound($arCB) -1
If BitAND($Checked, $arCB[$i][1]) Then
GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
$Checked = BitXOR($Checked, $arCB[$i][1])
EndIf
Next
_ReadCB()
EndFunc
Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
Local $str = 'Markiert: '
For $i = 0 To UBound($arCB) -1
If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
Next
WinSetTitle($GUI, '', StringTrimRight($str, 2))
EndFunc
Func _Output()
Local $str = ''
For $i = 0 To UBound($arCB) -1
If BitAND($Checked, $arCB[$i][1]) Then $str &= $arCBNames[$i+1] & ', '
Next
MsgBox(0, 'Ausgabe', StringTrimRight($str, 2))
EndFunc
Wobei?
Du hast hier nicht eine Zeile Code gepostet. Erwartest Du, dass wir Dir Deinen Chat schreiben? ![]()
Das ist Deine Aufgabe: Einfach Deinen ersten Post editieren und auf [gelöst] umstellen.
Edit: Ich sehe gerade, der Thread war ja gar nicht von Dir, Zord! In dem Fall ist das die Aufgabe von Deepred. ![]()
Es gibt nochmal eine neue Version. Ich habe ganz vergessen, dass man ja auch Verzeichnisse kopieren können muss. ![]()
Verbesserungsvorschlag umgesetzt! Neue Version (siehe Post #1)!
Danke! ![]()
Die Hilfedatei nicht richtig gelesen:
"The left side of the dialog box. By default (-1), the window is centered."
"The top of the dialog box. Default (-1) is centered."
Aus Gewohnheit!
Ist mir mal passiert und ich habe ziemlich lange gesucht, warum das Fenster so verschoben angezeigt wird.
Es gibt wieder eine neue Version (siehe Post #1).
Und für die LEFT, TOP Koordinaten nicht "-1, -1" (zentriert) verwenden, sondern "0, 0", denn sonst wird das Fenster ein Stück nach oben und links verschoben.
Das hat im wesentlichen zwei Gründe:
1. Für die UDF-Funktionen sollte man immer das Handle statt der ID benutzen, also mit: $hListview = GUICtrlGetHandle($listview) der Variablen das Handle übergeben.
2. Die Koordinaten bei _GUICtrlHeader_HitTest() sind relativ zum Listview (Header), nicht zum Fenster.
So funktioniert dann auch die Abfrage der Header (Ergebnis ist der Index):
#include<GuiHeader.au3>
#include<GuiListView.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>
$hGui = GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
[/autoit] [autoit][/autoit] [autoit]$Listview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150)
$hListview = GUICtrlGetHandle($Listview)
$item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)
GUISetState()
Do
$msg = GUIGetMsg()
Switch $msg
Case $Listview
$a = GUIGetCursorInfo($hGui)
$Item_nr = _GUICtrlHeader_HitTest(_GUICtrlListView_GetHeader($hListview), $a[0]-12, $a[1]-12)
ToolTip($Item_nr[0])
EndSwitch
Until $msg = $GUI_EVENT_CLOSE
Das "Child"-Fenster hat keinen Eintrag in der Taskleiste und es befindet sich vor dem "Parent"-Fenster:
#include<GUIConstantsEx.au3>
$hGui1 = GUICreate('Parent', 600, 300, -1, -1)
$hOpen = GUICtrlCreateButton('Open Child', 20, 20, 80, 25)
$hGui2 = GUICreate('Child', 300, 150, -1, -1, Default, Default, $hGui1)
GUISetState(@SW_SHOW, $hGui1)
While True
$msg = GUIGetMsg(1)
Switch $msg[1] ; Window Handle
Case $hGui1
Switch $msg[0] ; Event
Case $GUI_EVENT_CLOSE
Exit
Case $hOpen
GUISetState(@SW_SHOW, $hGui2)
EndSwitch
Case $hGui2
Switch $msg[0] ; Event
Case $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE, $hGui2)
EndSwitch
EndSwitch
WEnd
Oder, wenn nur das Icon blinken soll, so:
#include <GUIConstantsEx.au3>
$hGui = GUICreate("My GUI")
GUISetIcon("shell32.dll", -51)
$stop = GUICtrlCreateButton('Stop', 20, 20, 60, 25)
GUISetState(@SW_SHOW)
$check = True
AdlibEnable('_IconBlink', 800)
Do
$msg = GUIGetMsg()
If $msg = $stop Then AdlibDisable()
Until $msg = $GUI_EVENT_CLOSE
Func _IconBlink()
If $check Then
GUISetIcon("shell32.dll", -71)
$check = False
Else
GUISetIcon("shell32.dll", -51)
$check = True
EndIf
EndFunc
Das Beispiel finde ich nicht so besonders, weil das Icon zwischendurch ganz weg ist.
Besser finde ich das hier:
#Include <Constants.au3>
Opt("TrayMenuMode",1)
$exit = TrayCreateItem("Exit")
TraySetIcon("warning")
TraySetToolTip("SOS")
TraySetState(4) ; Blinkendes Icon
[/autoit][autoit][/autoit][autoit]sleep(5000)
[/autoit][autoit][/autoit][autoit]TraySetState(8) ; Stoppt das Blinken
[/autoit][autoit][/autoit][autoit]Do
Until TrayGetMsg() = $exit
Naja, das kann schon funktionieren, nur wozu?
Es ist doch überhaupt kein Problem mehrere GUIs in einem Script zu verwalten. Einfach alle GUIs am Anfang erstellen und bei Bedarf mit z.B. GUISetState(@SW_SHOW, $hGui1) anzeigen lassen bzw. mit GUISetState(@SW_HIDE, $hGui1) wieder verstecken.
Mit dem erweiterten Modus von GUIGetMsg lassen sich die Events der GUI-Elemente auch eindeutig der jeweiligen GUI zuordnen (siehe obiges Beispiel von BugFix). Wenn Du willst, kannst Du auch den OnEvent-Mode benutzen (finde ich persönlich einfacher).
Also, wozu eine "2-GUI-2-Script"-Version basteln, die umständlich die Variablenwerte per Ini hin- und herüberträgt? ![]()
Ja, so verstehe ich das zumindest. Ansonsten ergeben doch Dim und ByRef gar keinen Sinn. Oder ist das jetzt ein Denkfehler von mir?
Edit: Achso, nee...ByRef war jetzt echt ein Denkfehler. Aber wozu dient dann noch Dim?
Ein "Problem" bei AutoIt ist, dass alle Variablen, die außerhalb einer Funktion deklariert werden, globale Variablen sind (ich halte das immer noch für einen Bug), auch wenn man sie explizit als Lokal deklariert.
Beispiel:
[autoit]
Local $a = 5
Test()
MsgBox(0,'Global', '$a = ' & $a)
Func Test()
$a += 5
MsgBox(0,'Innerhalb der Funktion', '$a = ' & $a)
EndFunc