2016-11-07 3 views
1

Ich habe Probleme mit dem Code, den ich schreibe. Ich habe eine Tabelle, in der die Mitarbeiterdetails aufgelistet sind. Ich versuche, eine E-Mail-Adresse in die Zwischenablage kopieren zu lassen, wenn Sie einen Datensatz auswählen und mit der rechten Maustaste klicken. Ich habe den folgenden Code:Wenn die Anweisung nicht funktioniert AutoIT

#include <GUIConstantsEx.au3> 
#include <mssql.au3> 
#include <MsgBoxConstants.au3> 
#include <Array.au3> 
#include <WindowsConstants.au3> 
#include <AutoItConstants.au3> 
global $title = "E-Mail address lookup" 
global $name = InputBox($title,"Please type the name of the person you wish to find") 
global $sqlCon = _MSSQL_Con("server", "username", "password", "directory-plus") 
global $result = _MSSQL_GetRecord($sqlCon, "autoit_view","*", "WHERE cn LIKE '%" & StringStripWS($name,3) & "%'") 
if StringLen(StringStripWS($name,3)) < 1 then 
MsgBox(0, $title, "Name cannot be empty") 
Else 
Global $rset = UBound($result) - 1 
Global $ControlID = GUICreate($title, 500, 150) 
Global $idListview = GUICtrlCreateListView("Deparment|E-Mail Address|Name|Telephone Number", 10, 10, 480, 150) 
for $count = 1 to $rset step 1 
     GUICtrlCreateListViewItem($result[$count][0] & "|" & $result[$count][2] & "|" & $result[$count][1] & "|" & $result[$count][2], $idListview) 
     if MouseClick($MOUSE_CLICK_RIGHT)==1 Then 
      ClipPut($result[$count][2]) 
     EndIf 
Next 
GUISetState(@SW_SHOW) 
GUISetState() 

While 1 
Global $Msg = GUIGetMsg() 
Switch $Msg 
    Case -3, $ControlID 
     Exit 
EndSwitch 
WEnd 
EndIf 

Ich würde meine IF gedacht Anweisung innerhalb des for-Schleife den Trick tun würde, aber, wenn ich meinen Code ausführen, kopiert es nur, was in E-Mail-Adresse Spalte in der letzten Reihe ist, wenn Eigentlich möchte ich, dass Sie die E-Mail-Adresse kopieren, wenn Sie mit der rechten Maustaste auf eine bestimmte Zeile klicken, aber ich bin nicht sicher, wie es geht.

Antwort

1

Ihr Code hat zwei Hauptprobleme. Die erste besteht darin, dass MouseClick() nicht überprüft, ob die Maustaste gedrückt wird, sondern stattdessen einen Mausklick sendet. Da das Senden einer Maustaste erfolgreich ist, wird MouseClick ($ MOUSE_CLICK_RIGHT) == 1 als wahr ausgewertet. Für jedes Listenansichtselement, das Sie erstellen, legen Sie die E-Mail-Adresse in die Zwischenablage.

Das zweite Problem ist, dass die if-Anweisung an der falschen Stelle ist. Es wird ausgeführt, unmittelbar nachdem Sie jedes Listenansichtselement erstellt haben. Statt

, Ihre While-Anweisung wie folgt ändern

While 1 
Global $Msg = GUIGetMsg() 
Switch $Msg 
    Case -3, $ControlID 
    Exit 
    case $GUI_EVENT_SECONDARYDOWN 
    $selecteditem=StringSplit(GUICtrlRead(GUICtrlRead($idListview)),"|") 
    if @error=0 and $selecteditem[0]>1 Then 
    ClipPut($selecteditem[2]) 
    EndIf 
EndSwitch 
WEnd 
Verwandte Themen