ฟอรั่ม PSsix

Would you like to react to this message? Create an account in a few clicks or log in to continue.

ฟอรั่มของบล็อก http://pssix.blogspot.com


4 posters

    รวมผลงาน บทความ+โปรแกรม ของ sak2005

    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 08/05/11, 12:28 am

    First topic message reminder :

    เก็บรวมรวมผลงานของ sak2005 มาไว้ที่นี่ ใครสนใจก็เข้ามาศึกษาค้นคว้าได้

    และนำความรู้ที่ได้ไปใช้ให้เกิดประโยชน์ต่อตัวเองและส่วนรวม ขอให้ทุกท่านประสบความสำเร็จในสิ่งที่หวัง.

    ------------------------------------------------------------------------------------------------------------

    บทความและโปรแกรม อาจนำมาลงให้ล่าช้านิดนึง เพราะคิดและเขียนกันสดๆ ไม่มีการนำบทความเก่ามาเขียน

    จะไม่มีการตอบปัญหาให้กับผู้ใดในกระทู้ผู้อื่น ยกเว้นถ้ามาโฟสท์ถามไว้ที่นี่ ถ้าตอบได้ ก็จะตอบให้
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 24/05/11, 07:49 am

    ความรู้เพิ่มเติมเกี่ยวกับคำที่ใช้เขียนเป็น Section

    จากการค้นคว้าทดลองการเขียนคำสั่ง ini ปรากฏว่า ถ้าไม่ระบุคำว่า Section ลงไปใน []

    ถ้าไปเปลี่ยนเป็นชื่ออื่น เช่น [Config] ..ถ้านำไปใช้กับบางคำสั่งจะเกิด Error! หรือเกิดข้อผิดพลาดอื่นๆ

    ฉนั้นควรเขียนให้ถูกต้อง ตัวอักษรที่ใช้เขียนจะเป็นพิมพ์เล็กหรือใหญ่ก็ได้ ถ้ามีหลายเซ็คชั่น

    ท่านสามารถระบุหมายเลขต่อท้ายได้ เช่น. Section1, Section2, Section3 เป็นต้น
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 24/05/11, 11:22 am

    อันนี้เป็นโค๊ดโปรแกรมตัวอย่างการเขียน Memo Write รวมๆหลายๆคำสั่ง

    ออกแบบไว้ให้ทุกท่านได้นำไปใช้ศึกษาแนวการเขียนการสร้าง Project

    Code:

    ;======== INI Memory Section Sample ===========
    ;Create and design by: sak2005
    ;Copyright: May 2011
    ;============ end discription ===============

    #NoTrayIcon
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Include <Misc.au3>

    ;====== start operate variable ============>>
    $GuiTitle = 'Color Memory Sample'
    Global $iReturnType = 2, $iRefType = 2
    $iColorRef_R = 0xFF0000
    $iColorRef_G = 0x00FF00
    $iColorRef_B = 0x0000FF
    $filename = @DesktopDir&'\Settings_Color.ini'
    $section1 = 'section1'
    $section2 = 'section2'
    $section3 = 'section3'
    $section4 = 'section4'
    $section5 = 'section5'
    $data1 = 'COLOR1='&'0x'&Hex($iColorRef_R, 6)
    $data2 = 'COLOR2='&'0x'&Hex($iColorRef_G, 6)
    $data3 = 'COLOR3='&'0x'&Hex($iColorRef_B, 6)
    $data4 = 'PostX='
    $data5 = 'PostY='
    ;<<======= end operate variable =============

    ;========== start first write section ============>>
    If Not FileExists($filename) Then
    IniWriteSection($filename, $section1, $data1, 0)
    IniWriteSection($filename, $section2, $data2, 1)
    IniWriteSection($filename, $section3, $data3, 2)
    IniWriteSection($filename, $section4, $data4&-1, 3)
    IniWriteSection($filename, $section5, $data5&-1, 4)
    EndIf
    ;<<========== end write section =====================

    ;================================= start GUI create programming script sample ==========================================;
    Local $hWndOwnder = GUICreate($GuiTitle, 300, 50, IniRead($filename, $section4, "PostX", -1), _ ;read state GUI position.
                                                      IniRead($filename, $section5, "PostY", -1))
    Local $Grap_red = GUICtrlCreateGraphic(0, 0, 100, 50)
    $readcol_red = IniReadSection($filename, "section1") ;read state color section1
    GUICtrlSetBkColor(-1, $readcol_red[0][1]&$readcol_red[1][1])
    GUICtrlSetCursor(-1, 0)
    Local $Grap_green = GUICtrlCreateGraphic(100, 0, 100, 50)
    $readcol_green = IniReadSection($filename, "section2") ;read state color section2
    GUICtrlSetBkColor(-1, $readcol_green[0][1]&$readcol_green[1][1])
    GUICtrlSetCursor(-1, 0)
    Local $Grap_blue = GUICtrlCreateGraphic(200, 0, 100, 50)
    $readcol_blue = IniReadSection($filename, "section3") ;read state color section3
    GUICtrlSetBkColor(-1, $readcol_blue[0][1]&$readcol_blue[1][1])
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)

    While 1
       Local $nMsg = GUIGetMsg()
       Switch $nMsg
          Case $GUI_EVENT_CLOSE
             $btn = MsgBox(36, $GuiTitle, "ท่านต้องการปิดโปรแกรมใช่หรือไม่?", 0, $hWndOwnder)
             If $btn = 7 Then ContinueLoop
                            $Wpos = WinGetPos($GuiTitle)
             IniWriteSection($filename, $section4, $data4&$Wpos[0]) ;mem GUI position.
             IniWriteSection($filename, $section5, $data5&$Wpos[1])
             GUIDelete($hWndOwnder)
             Exit
            Case $Grap_red
            ToolTip("")
            $color = _ChooseColor($iReturnType, $iColorRef_R, $iRefType, $hWndOwnder)
            If $color = -1 Then ContinueLoop
            GUICtrlSetBkColor($Grap_red, $color)
              IniDelete($filename, "section1", "COLOR1")
             IniWriteSection($filename, "section1", "COLOR1="&$color, 1) ;mem color section1
          Case $Grap_green
                ToolTip("")
             $color = _ChooseColor($iReturnType, $iColorRef_G, $iRefType, $hWndOwnder)
              If $color = -1 Then ContinueLoop
              GUICtrlSetBkColor($Grap_green, $color)
             IniDelete($filename, "section2", "COLOR2")
             IniWriteSection($filename, "section2", "COLOR2="&$color, 2) ;mem color section2
          Case $Grap_blue
             ToolTip("")
             $color = _ChooseColor($iReturnType, $iColorRef_B, $iRefType, $hWndOwnder)
               If $color = -1 Then ContinueLoop
              GUICtrlSetBkColor($Grap_blue, $color)
             IniDelete($filename, "section3", "COLOR3")
             IniWriteSection($filename, "section3", "COLOR3="&$color, 3) ;mem color section3
       EndSwitch
       $pos = MouseGetPos()
       $col = PixelGetColor($pos[0], $pos[1]) ;mouse and color postion pixel search.
        ToolTip('X = '&$pos[0]&@CRLF&'Y = '&$pos[1]&@CRLF&'C = '&'0x'&Hex($col, 6))
    WEnd
    ;========================== end programming script sample ==============================;
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 24/05/11, 01:01 pm

    ถ้าไม่มีการค้นคว้าศึกษาเกี่ยวกับปัญหาที่เกิดขึ้นขณะออกแบบเขียนคำสั่ง

    ปัญญาจะไม่เกิดและจะไม่รู้วิธีการแก้ไขปัญหาก็ไม่สามารถสร้างโปรเจ็กต์ให้สำเร็จลุล่วงไปได้

    ดังตัวอย่างการแยกคำสั่งออกจาก Case GUI Message ออกมาเขียนเป็น Function ไว้ภายนอกนั้น

    เพื่อทำให้การแก้ไขหรือตรวจสอบคำสั่งต่างๆทำได้ง่ายขึ้น

    ถ้าชุดคำสั่งนั้น ต้องอาศัย Loop ในการทำงานซ้ำๆ ไม่ควรแยกออกมาจากการใช้งาน Case Message Loop

    เพราะจะทำให้เกิดข้อผิดพลาดบางประการได้

    ถ้าเป็นชุดคำสั่งที่ทำงานครั้งเดียวต่อการสั่งงาน1ครั้งของในแต่ละครั้ง สามารถเขียนแยกออกมาเป็น Function ต่า่งหากได้

    Event Control ที่ใช้ก็สำคัญ ถ้าใช้ event option เราจะไม่สามารถใช้ event message loop ปกติได้

    ฉนั้น.. การสร้าง project ในแต่ละคราว ก็ต้องเลือก event อย่างใดอย่างหนึ่งที่เหมาะสม.
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 25/05/11, 12:00 am

    หาค่าและแสดงผลสีด้วยกราฟิก
    Code:

    ;=================== start win mouse color pos ========================>>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

    HotKeySet("{ESC}", "Terminate")

    $hWnd = GUICreate("Form", 111, 40, 192, 124, _
    BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_POPUP,$WS_GROUP,$WS_CLIPSIBLINGS))
    WinSetOnTop("Form", "", 1)
    $hGraphic = GUICtrlCreateGraphic(0, 0, 108, 35)
    $hLabel = GUICtrlCreateLabel("Label1", 27, 29, 60, 17)

    GUISetState(@SW_SHOW)

    Do
       $iX = _WinAPI_GetMousePosX()
       $iY = _WinAPI_GetMousePosY()
       $iC = PixelGetColor($iX, $iY, $hWnd)
       GUICtrlSetBkColor($hGraphic, $iC)
       GUICtrlSetData($hLabel, '0x'&Hex($iC, 6))
       _WinAPI_MoveWindow($hWnd, $iX+15, $iY+15, 100, 50, True)
    Sleep(100)
    Until GUIGetMsg() = -3
    GUIDelete($hWnd)

    Func Terminate()
        Exit 0
    EndFunc
    ;<<=================== end win mouse color pos ========================
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 25/05/11, 09:52 am

    ความรู้เกี่ยวกับการใช้งานคำสั่ง Win และคำสั่ง Control

    เป็นคำสั่งใช้งานโดยครงกับ โปรแกรมที่สร้างขึ้น และโปรแกรมอื่นที่ไม่ได้สร้าง เป็นคำสั่งควบคุมให้โปรแกรมทำงานตามจุดประสงค์

    คำสั่งต่างๆเหล่านี้ ถ้าไม่รู้เทคนิคลึกๆ เกี่ยวกับแนวทางการเขียนคำสั่ง เวลาเขียนออกมา มักจะมีปัญหาต่างๆที่ต้องให้แก้ไขอยู่เป็นประจำ

    เดี๋ยวท่านจะได้รู้ว่า เขามีเทคนิคการเขียนคำสั่งดังกล่าวกันยังไง ไม่ให้มีปัญหา ไม่ให้เกิด Error!
    -------------------------------------------------------------------------------------------------
    ========================================================
    ขอให้อดใจรอศึกษาจากบทความนี้ให้จบ การเขียนบอทต่างๆก็ไม่ใช่เรื่องยากสำหรับท่าน
    ========================================================
    -------------------------------------------------------------------------------------------------
    ก่อนอื่นเรามาดูกันว่ากลุ่มคำสั่ง: Win นั้นมีอะไรกันบ้าง

    WinActivate
    WinActive
    WinClose
    WinExists
    WinFlash
    WinGetCaretPos
    WinGetClassList
    WinGetClientSize
    WinGetHandle
    WinGetPos
    WinGetProcess
    WinGetState
    WinGetText
    WinGetTitle
    WinKill
    WinList
    WinMenuSelectItem
    WinMinimizeAll
    WinMinimizeAllUndo
    WinMove
    WinSetOnTop
    WinSetState
    WinSetTitle
    WinSetTrans
    WinWait
    WinWaitActive
    WinWaitClose
    WinWaitNotActive
    -----------------------------------------------------------------------------------
    กลุ่มคำสั่ง:Control

    ControlClick
    ControlCommand
    ControlDisable
    ControlEnable
    ControlFocus
    ControlGetFocus
    ControlGetHandle
    ControlGetPos
    ControlGetText
    ControlHide
    ControlListView
    ControlMove
    ControlSend
    ControlSetText
    ControlShow
    ControlTreeView
    StatusbarGetText
    ------------------------------------------------------------------------------------
    ถ้าไม่มีการล๊อควันแก้ไขข้อความไว้ จะอธิบายความหมายของคำสั่งให้ทั้งหมด

    จริงๆแล้วเกิดจากปลามันตายในข้องเพียงตัวเดียวเลยทำให้เหม็นไปทั้งข้อง

    กลับไปดูเว็บที่ผมโดนเกรียนถล่มไว้ ปรากฎในภายหลังว่า..ข้อความที่ไม่เหมาะสม โดนเก็บกวาดเรียบ
    ------------------------------------------------------------------------------------
    คำสั่งwin-controlเป็นคำสั่งต้องอาศัยการจับหน้าต่างของโปรแกรมนั้นๆ(program process)

    โดยอ้างชื่อหรือข้อความที่ปรากฏบนไตเติลบาร์(title)

    หรือข้อความที่ปรากฏบนส่วนอื่นๆของหน้าต่างโปรแกรม(text)

    หรือชื่อข้อความของสิ่งต่างๆ(object)ที่ใช้งานอยู่บนหน้าต่างโปรแกรม(form)

    หรือ Class:Form , ControlID:(CID)Object

    คำสั่งwin-controlเป็นคำสั่งต้องอาศัยการหน่วงเวลาการทำงานให้เหมาะสม

    ให้สัมพันธ์กันระหว่างโปรแกรมและคำสั่งที่ใช้ควบคุม
    ----------------------------------------------------------------------------
    คำนิยามความหมายของคำว่า 'Focus' (โฟกัส) ที่ใช้เขียนเป็นคำสั่งคืออะไร?

    โฟกัสในที่นี้คือการเจาะจงเล็งจับไปที่เป้าหมายใดเป้าหมายหนึ่งโดยเฉพาะ (จากหลายๆเป้าหมาย)

    จากนั้นก็จะเข้าไปควบคุมเป้าหมายนั้นให้ทำงานตามสั่ง
    ----------------------------------------------------------------------------
    ProcessID (PID)คืออะร?

    โปรเซสไอดี คือ รหัสหมายเลขที่ได้มาจากการทำงานของโปรแกรม(processing)

    ในการทำงานของโปรแกรมแต่ละครั้ง รหัสหมายเลข จะเปลี่ยนไปทุกครั้ง

    เพราะช่วงเวลาในการโปรเซสในแต่ละครั้งไม่เท่ากัน

    ถ้ารันโปรแกรมแล้ว แต่เกิด Error! โปรแกรมไม่สามารถทำงานตามสั่งได้ ..รหัสหมายเลข หรือ ProcessID จะ= 0

    เดี๋ยวเขียนโปรแกรมมาให้ทดสอบ ID process
    -------------------------------------------------
    โค๊ดสำหรับรันทดสอบ ID process

    Code:

    Local $program = 'Notepad.exe'
    Dim $i
    MsgBox(64, "", "Total 5 Processes", 3)
    For $i = 1 To 5
    Local $pid = Run($program)
    If ProcessExists($pid) Then
        MsgBox(64, "Processing.." & $i, "ProcessID = " & $pid, 3)
    ProcessClose($pid)
    EndIf
    Sleep(1000)
    Next
    MsgBox(64, "", "Finish.", 3)

    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 28/05/11, 05:01 pm

    ลองรันโค๊ดนี้ดู จากนั้นพิจารณาจากคำสั่งที่ใช้ แล้วท่านจะได้'ไอเดีย'อะไร?ใหม่ๆ

    Code:

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    Global $title = 'Focus Sample', $text = 'Serial'
    $hForm = GUICreate($title, 267, 100, 192, 124)
    $Input = GUICtrlCreateInput("", 16, 24, 233, 21)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Label1 = GUICtrlCreateLabel($text, 110, 8, 30, 15)
    $Btn = GUICtrlCreateButton("Focus and Send ", 90, 64, 90, 25, $WS_GROUP)
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)

    While 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
          Case $GUI_EVENT_CLOSE
             Exit
            Case $Btn
                GUICtrlSetState($Input, $GUI_FOCUS)
                Send("1A 2B 3C 4D 5E 6F 7G 8H 9I 0J 2a 3b 4d 5e 6f")
       EndSwitch
    WEnd
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 30/05/11, 04:17 am

    ความรู้เรื่อง:คำสั่งที่ประกอบด้วย Get หมายถึงอะไร? และ Set หมายถึงอะไร? พร้อมตัวอย่างการเขียนคำสั่ง

    Get หมายถึง เป็นการรับค่าการทำงานการแสดงผลอะไรก็แล้วแต่ มาจาก Form หรือ Object หรือส่วนอื่นๆที่เกี่ยวข้อง

    จากนั้นจะนำค่าที่ได้รับมากำหนดทำให้เกิดการเปลี่ยนแปลงอื่นๆต่อไป

    Set หมายถึง การส่งค่าการทำงานการแสดงผลนั้นๆไปทำให้เเกิดการเปลี่ยนแปลงต่อ Form หรือ Object หรือส่วนอื่นๆที่เกี่ยวข้อง
    --------------------------------------------------------------------------------------------------
    เรามาลองดูตัวอย่างโค๊ด Get และ Set ไปพร้อมๆกัน

    3ตัวอย่างโค๊ดด้านล่าง รันแล้วให้ผลเหมือนกัน แต่รูปแบบการเขียนคำสั่งไม่เหมือนกัน

    Code:

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    Local $hWnd = GUICreate("Form1", 154, 195, -1, -1)
    Local $Input1 = GUICtrlCreateInput("", 17, 24, 121, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL))
    GUICtrlCreateLabel("ชื่อ", 72, 7, 17, 17)
    Local $Input2 = GUICtrlCreateInput("", 16, 72, 121, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL))
    GUICtrlCreateLabel("สกุล", 64, 55, 23, 17)
    Local $Input3 = GUICtrlCreateInput("", 16, 120, 121, 21)
    GUICtrlCreateLabel("ชื่อ - สกุล", 48, 103, 45, 17)
    Local $Button1 = GUICtrlCreateButton("OK", 40, 160, 75, 25, $WS_GROUP)
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)

    While 1
       Local $nMsg = GUIGetMsg()
       Switch $nMsg
          Case $GUI_EVENT_CLOSE
             Exit
            Case $Button1
             If GUICtrlRead($Input1) = '' Then
                MsgBox(0, "", "กรุณากรอกชื่อลงในช่อง.", 0, $hWnd)
             ElseIf GUICtrlRead($Input2) = '' Then
                 MsgBox(0, "", "กรุณากรอกสกุลลงในช่อง.", 0, $hWnd)
             Else
                    Local $name = ControlGetText("Form1", "", "Edit1")
                 Local $sername = ControlGetText("Form1", "", "Edit2")
                 ControlSetText("Form1", "", "Edit3", $name&' '&$sername)
             EndIf
       EndSwitch
    WEnd

    Code:

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    Local $hWnd = GUICreate("Form1", 154, 195, -1, -1)
    Local $Input1 = GUICtrlCreateInput("", 17, 24, 121, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL))
    GUICtrlCreateLabel("ชื่อ", 72, 7, 17, 17)
    Local $Input2 = GUICtrlCreateInput("", 16, 72, 121, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL))
    GUICtrlCreateLabel("สกุล", 64, 55, 23, 17)
    Local $Input3 = GUICtrlCreateInput("", 16, 120, 121, 21)
    GUICtrlCreateLabel("ชื่อ - สกุล", 48, 103, 45, 17)
    Local $Button1 = GUICtrlCreateButton("OK", 40, 160, 75, 25, $WS_GROUP)
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)

    While 1
       Local $nMsg = GUIGetMsg()
       Switch $nMsg
          Case $GUI_EVENT_CLOSE
             Exit
            Case $Button1
             If GUICtrlRead($Input1) = '' Then
                MsgBox(0, "", "กรุณากรอกชื่อลงในช่อง.", 0, $hWnd)
             ElseIf GUICtrlRead($Input2) = '' Then
                 MsgBox(0, "", "กรุณากรอกสกุลลงในช่อง.", 0, $hWnd)
             Else
                    Local $yourname = ControlGetText("Form1", "", "Edit1")&' '&ControlGetText("Form1", "", "Edit2")
                 ControlSetText("Form1", "", "Edit3", $yourname)
             EndIf
       EndSwitch
    WEnd

    Code:

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    Local $hWnd = GUICreate("Form1", 154, 195, -1, -1)
    Local $Input1 = GUICtrlCreateInput("", 17, 24, 121, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL))
    GUICtrlCreateLabel("ชื่อ", 72, 7, 17, 17)
    Local $Input2 = GUICtrlCreateInput("", 16, 72, 121, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL))
    GUICtrlCreateLabel("สกุล", 64, 55, 23, 17)
    Local $Input3 = GUICtrlCreateInput("", 16, 120, 121, 21)
    GUICtrlCreateLabel("ชื่อ - สกุล", 48, 103, 45, 17)
    Local $Button1 = GUICtrlCreateButton("OK", 40, 160, 75, 25, $WS_GROUP)
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)

    While 1
       Local $nMsg = GUIGetMsg()
       Switch $nMsg
          Case $GUI_EVENT_CLOSE
             Exit
            Case $Button1
             If GUICtrlRead($Input1) = '' Then
                MsgBox(0, "", "กรุณากรอกชื่อลงในช่อง.", 0, $hWnd)
             ElseIf GUICtrlRead($Input2) = '' Then
                 MsgBox(0, "", "กรุณากรอกสกุลลงในช่อง.", 0, $hWnd)
             Else
                    ControlSetText("Form1", "", "Edit3", ControlGetText("Form1", "", "Edit1")&' '&ControlGetText("Form1", "", "Edit2"))
             EndIf
       EndSwitch
    WEnd
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 30/05/11, 12:47 pm

    อันนี้เป็นคำสั่งทีเด็ดที่นักบอทเกมส์ชอบ คือ ตรวจหาสีที่อยู่ที่ตัวคู่ต่อสู้

    ไม่ว่าคู่ต่อสู้จะไปทางไหน เม๊าท์จะวิ่งไล่ตามไปติดๆไม่ห่าง ..แล้วจัดการ?!?!?!
    ------------------------------------------------------------------------------
    Auto PixeLSearch Color Delete Object

    Code:

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    Opt("MustDeclareVars", 1)

    Local $hWnd = GUICreate("Search Color Delete Object", 203, 122, -1, -1)
    Local $Graphic1 = GUICtrlCreateGraphic(8, 8, 60, 52)
    GUICtrlSetBkColor(-1, 0xFF0000)
    GUICtrlSetCursor(-1, 0)
    Local $Graphic2 = GUICtrlCreateGraphic(72, 8, 60, 52)
    GUICtrlSetBkColor(-1, 0x00FF00)
    GUICtrlSetCursor(-1, 0)
    Local $Graphic3 = GUICtrlCreateGraphic(136, 8, 60, 52)
    GUICtrlSetBkColor(-1, 0x0000FF)
    GUICtrlSetCursor(-1, 0)
    Local $Graphic4 = GUICtrlCreateGraphic(8, 64, 60, 52)
    GUICtrlSetBkColor(-1, 0x00FFFF)
    GUICtrlSetCursor(-1, 0)
    Local $Graphic5 = GUICtrlCreateGraphic(72, 64, 60, 52)
    GUICtrlSetBkColor(-1, 0xFF00FF)
    GUICtrlSetCursor(-1, 0)
    Local $Graphic6 = GUICtrlCreateGraphic(136, 64, 60, 52)
    GUICtrlSetBkColor(-1, 0xFFFF00)
    GUICtrlSetCursor(-1, 0)
    GUISetState(@SW_SHOW)

    Do
       Local $nMsg = GUIGetMsg()
    Local $coord = PixelSearch(0, 0, 800, 800, 0xFF0000, 0, 50, $hWnd)
    Local $color = PixelGetColor($coord[0], $coord[1], $hWnd)
    ToolTip("X = "&$coord[0]&@CRLF&"Y = "&$coord[1]&@CRLF&"C = "&"0x"&Hex($color, 6))
    If MouseMove($coord[0], $coord[1])Then
        Sleep(1000)
        MouseClick("", $coord[0], $coord[1], 1)
        GUICtrlDelete($Graphic1)
       Sleep(1000)
       _Search_Green_Color()
       _Search_Blue_Color()
       _Search_Aqua_Color()
       _Search_Fuchsia_Color()
       _Search_Yellow_Color()
    EndIf

    Switch $nMsg
       Case $Graphic3
          Exit
    EndSwitch
    Until $nMsg = -3
    GUIDelete($hWnd)

    Func _Search_Green_Color()
        $coord = PixelSearch(0, 0, 800, 800, 0x00FF00, 0, 51, $hWnd)
        $color = PixelGetColor($coord[0], $coord[1], $hWnd)
        ToolTip("X = "&$coord[0]&@CRLF&"Y = "&$coord[1]&@CRLF&"C = "&"0x"&Hex($color, 6))
        If MouseMove($coord[0], $coord[1])Then
            Sleep(1000)
            MouseClick("", $coord[0], $coord[1], 1)
            GUICtrlDelete($Graphic2)
           Sleep(1000)
        EndIf
    EndFunc

    Func _Search_Blue_Color()
        $coord = PixelSearch(0, 0, 800, 800, 0x0000FF, 0, 52, $hWnd)
        $color = PixelGetColor($coord[0], $coord[1], $hWnd)
        ToolTip("X = "&$coord[0]&@CRLF&"Y = "&$coord[1]&@CRLF&"C = "&"0x"&Hex($color, 6))
        If MouseMove($coord[0], $coord[1])Then
            Sleep(1000)
            MouseClick("", $coord[0], $coord[1], 1)
            GUICtrlDelete($Graphic3)
           Sleep(1000)
       EndIf
    EndFunc

    Func _Search_Aqua_Color()
        $coord = PixelSearch(0, 0, 800, 800, 0x00FFFF, 0, 50, $hWnd)
        $color = PixelGetColor($coord[0], $coord[1], $hWnd)
        ToolTip("X = "&$coord[0]&@CRLF&"Y = "&$coord[1]&@CRLF&"C = "&"0x"&Hex($color, 6))
        If MouseMove($coord[0], $coord[1])Then
            Sleep(1000)
            MouseClick("", $coord[0], $coord[1], 1)
            GUICtrlDelete($Graphic4)
           Sleep(1000)
       EndIf
    EndFunc

    Func _Search_Fuchsia_Color()
        $coord = PixelSearch(0, 0, 800, 800, 0xFF00FF, 0, 51, $hWnd)
        $color = PixelGetColor($coord[0], $coord[1], $hWnd)
        ToolTip("X = "&$coord[0]&@CRLF&"Y = "&$coord[1]&@CRLF&"C = "&"0x"&Hex($color, 6))
        If MouseMove($coord[0], $coord[1])Then
            Sleep(1000)
            MouseClick("", $coord[0], $coord[1], 1)
            GUICtrlDelete($Graphic5)
           Sleep(1000)
       EndIf
    EndFunc

    Func _Search_Yellow_Color()
        $coord = PixelSearch(0, 0, 800, 800, 0xFFFF00, 0, 52, $hWnd)
        $color = PixelGetColor($coord[0], $coord[1], $hWnd)
        ToolTip("X = "&$coord[0]&@CRLF&"Y = "&$coord[1]&@CRLF&"C = "&"0x"&Hex($color, 6))
        If MouseMove($coord[0], $coord[1])Then
            Sleep(1000)
            MouseClick("", $coord[0], $coord[1], 1)
            GUICtrlDelete($Graphic6)
           Sleep(1000)
          Exit
        EndIf
    EndFunc
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 31/05/11, 04:36 am

    ทึ่งในความสามารถของคำสั่ง: WinWaitActive (จากการค้นคว้าทดลอง)

    ลองเปรียบเทียบการเขียนคำสั่งในโค๊ดต่างๆ แล้วพิจารณาดู รันแล้วให้ผลเหมือนกัน แต่รูปแบบการเขียนคำสั่งไม่เหมือนกัน

    จะเห็นได้ว่า..ถ้าเราสร้างเงื่อนไขให้คำสั่ง: WinWaitActive ซึ่งหมายถึง เมื่อรันแล้วให้รอจนกว่า หน้าต่างโปรแกรมจะโผล่ขึ้น

    มาให้จับ(Active) แล้วค่อยให้ไปทำงานในคำสั่งถัดไป ไม่งั้นจะเกิดข้อบกพร่องบางอย่างขึ้นมาทันที เช่น.

    คำสั่งถัดไปไม่ยอมทำงานให้ เป็นต้น คนที่เขียนบอท มักใช้วิธีหน่วงเวลาซะเป็นส่วนใหญ่

    การหน่วงเวลานั้นหาความแน่นอนไม่ได้ บางทีก็ทำงาน บางทีก็ไม่ทำงาน

    เพราะมีปัจจัยตัวแปรหลายอย่างที่บางครั้ง อาจทำให้การทำงานเปลี่ยนแปลงไป ไม่สามารถทำงานตามจุดประสงค์ได้.
    ---------------------------------------------------------------------------------------------------------------------
    Code:
    #include <Process.au3>

    Run("Calc.exe")
    If WinWaitActive("Calculator Plus")Then
    $pid = WinGetProcess("Calculator Plus")
    $name = _ProcessGetName($pid)
    MsgBox(0, " ", $name)
    EndIf
    ---------------------------------------------------------------------------------------------------
    อันนี้เป็นโค๊ดทื่รันแล้วเกิดข้อผิดพลาด! ..คำสั่งถัดไปไม่ยอมทำงาน เพราะไม่มีการหน่วงเวลาไว้
    Code:
    #include <Process.au3>

    Run("Calc.exe")
    $pid = WinGetProcess("Calculator Plus")
    $name = _ProcessGetName($pid)
    MsgBox(0, " ", $name)
    ---------------------------------------------------------------------------------------------------
    Code:
    #include <Process.au3>

    Run("Calc.exe")
    ;WinWait("Calculator Plus") ;หน่วงเวลาไม่ถึงวินาที
    WinWait("Calculator Plus", "", 1) ;หน่วงเวลา1วินาที
    $pid = WinGetProcess("Calculator Plus")
    $name = _ProcessGetName($pid)
    MsgBox(0, " ", $name)
    --------------------------------------------------------------------
    อันนี้ใช้คำสั่ง: Sleep() แทน WinWait()
    Code:
    #include <Process.au3>

    Run("Calc.exe")
    Sleep(100) ;หน่วงเวลา 0.1 วินาที
    $pid = WinGetProcess("Calculator Plus")
    $name = _ProcessGetName($pid)
    MsgBox(0, "Notepad - ", $name)
    avatar
    nameless
    มือใหม่เพิ่งสมัคร
    มือใหม่เพิ่งสมัคร


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 3
    ความนิยม : 0
    เข้าร่วมเมื่อ : 31/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by nameless 31/05/11, 05:13 pm

    สูดยวดดดดดดดดดดดดดดดดด ครับ
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 01/06/11, 08:04 pm

    ความรู้เกี่ยวกับคำสั่ง: Get Message และ Send Message รูปแบบต่างๆ

    เรามาดูคำสั่งที่เกี่ยวข้องกับการรับ - ส่ง Message ว่ามีอะไรกันบ้าง

    Message แบ่งออกเป็น 3 ประเภท

    1. GUI Message

    2.Windows Message

    3.Macro Message
    ----------------------------------------------------------------------------
    Message ในที่นี้หมายถึง การรับ - ส่งสัญญานควบควบ ..ไม่ใช่ Popup MessageBox นะครับ

    Message ต่างๆที่ใช้ในการควบคุมการทำงานของโปรแกรม จะใช้วิธีรับหรือส่งสัญญานออกไปก่อน

    จากนั้น จะมีการเลือกการควบคุม ว่าจะควบคุมอะไร? ให้ทำงาน

    คล้ายกับการส่ง SMS ในโทรศัพท์มือถีอ ..เมื่อพิมพ์ข้อความเสร็จ

    จากนั้นก็จะเลือกว่า.. จะส่งให้กับผู้ใด?
    ------------------------------------------------------------------------

    เดี๋ยวลงโค๊ดตัวอย่างมาให้ทดสอบ รับ - ส่ง Message ในรูปแบบต่างๆ

    ท่านจะได้รับการอธิบายให้เข้าใจในโค๊ดคำสั่งอย่างถึงกึ๋น อย่างที่ไม่มีใครอธิบายได้ละเอียดกว่านี้

    ขอให้ติดตามผลงานกันไปเรื่อยๆ ท่านจะได้ ..มากกว่าคำว่า ..ได้

    Code:
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    $Form1 = GUICreate("Form1", 154, 162, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 40, 128, 75, 25, $WS_GROUP)
    $Input1 = GUICtrlCreateInput("Input1", 16, 24, 121, 21)
    $Graphic1 = GUICtrlCreateGraphic(48, 64, 52, 44)
    GUISetState(@SW_SHOW)
    Sleep(30000) ; หน่วงเวลาให้โชว์หน้าต่างโปแรกม 30 วินาที
    ----------------------------------------------------------------------------------------
    จากโค๊ดจะเห็นได้ว่า มี Object อยู่บน Form 3 อย่าง คือ Button, Input และ Graphic

    การที่โปรแกรมที่สร้าง จะโชว์หรือแสดงหน้าต่างให้เห็น ต้องมีการกระตุ้นให้เกิดการทำงานของ Form ก่อน

    ด้วยคำสั่ง GUISetState(@SW_SHOW) เมื่อกระตุ้นเรียบร้อยแล้ว ก็ต้องมีการตั้งเวลาให้โปรแกรมทำงาน

    ถ้าไม่มีการกำหนดเวลาให้โปรแกรมทำงาน โปรแกรมจะโชว์ให้เห็นแว๊บเดียวเท่าันั้น

    ที่เป็นเช่นนี้เพราะ From และ Object เป็น Library design ทีถูกผูกติดอยู่กับเงื่อนไขเวลา
    -------------------------------------------------------------------------------------------------------------
    ทีนี้จะทำอย่างไรล่ะ่?!? ที่จะทำให้หน้าต่างโปรแกรมนั้นโชว์อยู่ได้ตลอดเวลา

    มีอยู่ทางเดียวที่จะทำได้ คือ ใช้คำสั่ง Loop เพื่อที่จะให้เวลานั้นไม่หยุดเดิน

    Code:
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    $Form1 = GUICreate("Form1", 154, 162, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 40, 128, 75, 25, $WS_GROUP)
    $Input1 = GUICtrlCreateInput("Input1", 16, 24, 121, 21)
    $Graphic1 = GUICtrlCreateGraphic(48, 64, 52, 44)
    GUISetState(@SW_SHOW)
    Do
    Sleep(100)
    Until False
    ---------------------------------------------------------------------------------------
    ดูจากโค๊ดจะเห็นได้ว่า.. ไม่ว่าจะเป็น Form หรือ Object ต่างก็มีตัวแปรด้วยกันทั้งนั้น

    เพราะ Message จะได้จากการรีเทิร์นค่า ออกมาทางตัวแปร

    แต่เนื่องจาก Object อาศัยอยู่บน Form ..Objectจะทำอะไร ต้องได้รับอนุญาตจาก Form ก่อนถึงจะทำได้

    ในชั้นการควบคุมนั้น ต้องใช้คำสั่ง GUIGetMsg() เพื่อรับสัญญานควบคุมมาจาก Form ก่อน

    เมื่อได้รับสัญญานควบคุมจาก Form แล้ว จากนั้นแล้วค่อยมาเลือกว่า จะให้ Form หรือ Object ทำอะไร?

    ด้วยคำสั่งที่ใช้เป็นตัวเลือก เช่น Switch Case , Select Case หรือ If Else เป็นต้น.
    -------------------------------------------------------------------------------------
    เมื่อท่านรันทดสอบแล้วปรากฏว่า ปิดโปรแกรมไม่ได้ ก็เพราัะว่า ท่านยังไม่ได้เรียกใช้งาน

    Event ID message ของ Form ที่มีให้เลือกใช้หลายคำสั่ง ดังนี้

    Event ID the ID of the control sending the message

    0 หมายถึง No event
    $GUI_EVENT_CLOSE หมายถึง dialog box being closed (either by defined button or system menu).
    $GUI_EVENT_MINIMIZE หมายถึง dialog box minimized with Windows title bar button.
    $GUI_EVENT_RESTORE หมายถึง dialog box restored by click on task bar icon.
    $GUI_EVENT_MAXIMIZE หมายถึง dialog box maximized with Windows title bar button.
    $GUI_EVENT_MOUSEMOVE หมายถึง the mouse cursor has moved.
    $GUI_EVENT_PRIMARYDOWN หมายถึง the primary mouse button was pressed.
    $GUI_EVENT_PRIMARYUP หมายถึง the primary mouse button was released.
    $GUI_EVENT_SECONDARYDOWN หมายถึง the secondary mouse button was pressed.
    $GUI_EVENT_SECONDARYUP หมายถึง the secondary mouse button was released.
    $GUI_EVENT_RESIZED หมายถึง dialog box has been resized.
    $GUI_EVENT_DROPPED หมายถึง End of a Drag&Drop action @GUI_DRAGID, @GUI_DRAGFILE and @GUI_DROPID หมายถึง will be used to retrieve the ID's/file corresponding to the involve control.
    -------------------------------------------------------------------------------------------------------------
    Code:
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    $Form1 = GUICreate("Form1", 154, 162, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 40, 128, 75, 25, $WS_GROUP)
    $Input1 = GUICtrlCreateInput("Input1", 16, 24, 121, 21)
    $Graphic1 = GUICtrlCreateGraphic(48, 64, 52, 44)
    GUISetState(@SW_SHOW)

    While 1
        $nMsg = GUIGetMsg()
       Switch $nMsg
          Case $GUI_EVENT_CLOSE
             Exit
       EndSwitch
    WEnd
    -------------------------------------------------------------
    คำสั่ง GUIGetMsg() ..นอกจากจะใช้งานแบบปกติธรรมดาแล้ว

    เรายังสามารถกำหนดการใช้งานแบบ Advance ได้อีก ดังนี้

    When using the "advanced" parameter the information is returned in an array with extended information:
    $array[0] = 0 or Event ID or Control ID
    $array[1] = The window handle the event is from
    $array[2] = The control handle the event is from (if applicable)
    $array[3] = The current X position of the mouse cursor (relative to the GUI window)
    $array[4] = The current Y position of the mouse cursor (relative to the GUI window)


    If the GUIOnEventMode option is set to 1 then the return from GUIGetMsg is always 0 and the @error is set to 1.
    If the option GUIEventOptions is set to 1 the minimize, restore and maximize button will not do any action on the window just a simple notification.
    -----------------------------------------------------------------------------------------------
    Code:
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    $Form1 = GUICreate("Form1", 154, 162, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 40, 128, 75, 25, $WS_GROUP)
    $Input1 = GUICtrlCreateInput("Input1", 16, 24, 121, 21)
    $Graphic1 = GUICtrlCreateGraphic(48, 64, 52, 44)
    GUISetState(@SW_SHOW)

    While 1
        $nMsg = GUIGetMsg(1)
       Switch $nMsg[0]
          Case $GUI_EVENT_CLOSE
             Exit
       EndSwitch
    WEnd

    ถ้้ากำหนด $nMsg = GUIGetMsg(1) ..ใส่หมายเลข1 ไว้ในวงเล็บแบบนี้

    ตัวแปรของ GUIGetMsg() คือ $nMsg ต้องกำหนดไว้เป็น Array เช่น $nMsg[0] เป็นต้น.
    ------------------------------------------------------------------------------------------
    เรามาดูการเขียนคำสั่งที่ใช้เป็นตัวเลือกในแบบอื่นๆดูบ้าง

    Code:
    While 1
        $nMsg = GUIGetMsg()
       Select
          Case $nMsg = $GUI_EVENT_CLOSE
             Exit
       EndSelect
    WEnd
    ----------------------------------------------------------------
    Code:
    While 1
        $nMsg = GUIGetMsg()
       If $nMsg = -3 Then Exit
    WEnd
    -----------------------------------------------
    Code:
    Do
    Sleep(10)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    --------------------------------------------------------
    Code:
    Do
    Sleep(10)
    Until GUIGetMsg() = -3
    ------------------------------------------------------
    Code:
    While 1
    $nMsg = GUIGetMsg(1)
    If $nMsg[0] = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd






    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 02/06/11, 02:32 am

    เรียบร้อยโรงเรียนจีนกับ GUI message กันไปแล้ว มาดูคำสั่งที่เกี่ยวข้องกับ Windows message กันบ้าง

    อันนี้คือ Message Codes ของ Windows ซึ่งมีให้เลือกใช้มากมาย

    WM_ACTIVATE หรือแทนด้วยรหัส 0x0006
    WM_ACTIVATEAPP 0x001C
    WM_AFXFIRST 0x0360
    WM_AFXLAST 0x037F
    WM_APP 0x8000
    WM_APPCOMMAND 0x0319
    WM_ASKCBFORMATNAME 0x030C
    WM_CANCELJOURNAL 0x004B
    WM_CANCELMODE 0x001F
    WM_CAPTURECHANGED 0x0215
    WM_CHANGECBCHAIN 0x030D
    WM_CHANGEUISTATE 0x0127
    WM_CHAR 0x0102
    WM_CHARTOITEM 0x002F
    WM_CHILDACTIVATE 0x0022
    WM_CLEAR 0x0303
    WM_CLOSE 0x0010
    WM_COMMAND 0x0111
    WM_COMMNOTIFY 0x0044
    WM_COMPACTING 0x0041
    WM_COMPAREITEM 0x0039
    WM_CONTEXTMENU 0x007B
    WM_COPY 0x0301
    WM_COPYDATA 0x004A
    WM_CREATE 0x0001
    WM_CTLCOLORBTN 0x0135
    WM_CTLCOLORDLG 0x0136
    WM_CTLCOLOREDIT 0x0133
    WM_CTLCOLORLISTBOX 0x0134
    WM_CTLCOLORMSGBOX 0x0132
    WM_CTLCOLORSCROLLBAR 0x0137
    WM_CTLCOLORSTATIC 0x0138
    WM_CUT 0x0300
    WM_DEADCHAR 0x0103
    WM_DELETEITEM 0x002D
    WM_DESTROY 0x0002
    WM_DESTROYCLIPBOARD 0x0307
    WM_DEVICECHANGE 0x0219
    WM_DEVMODECHANGE 0x001B
    WM_DISPLAYCHANGE 0x007E
    WM_DRAWCLIPBOARD 0x0308
    WM_DRAWITEM 0x002B
    WM_DROPFILES 0x0233
    WM_ENABLE 0x000A
    WM_ENDSESSION 0x0016
    WM_ENTERIDLE 0x0121
    WM_ENTERMENULOOP 0x0211
    WM_ENTERSIZEMOVE 0x0231
    WM_ERASEBKGND 0x0014
    WM_EXITMENULOOP 0x0212
    WM_EXITSIZEMOVE 0x0232
    WM_FONTCHANGE 0x001D
    WM_GETDLGCODE 0x0087
    WM_GETFONT 0x0031
    WM_GETHOTKEY 0x0033
    WM_GETICON 0x007F
    WM_GETMINMAXINFO 0x0024
    WM_GETOBJECT 0x003D
    WM_GETTEXT 0x000D
    WM_GETTEXTLENGTH 0x000E
    WM_HANDHELDFIRST 0x0358
    WM_HANDHELDLAST 0x035F
    WM_HELP 0x0053
    WM_HOTKEY 0x0312
    WM_HSCROLL 0x0114
    WM_HSCROLLCLIPBOARD 0x030E
    WM_ICONERASEBKGND 0x0027
    WM_IME_CHAR 0x0286
    WM_IME_COMPOSITION 0x010F
    WM_IME_COMPOSITIONFULL 0x0284
    WM_IME_CONTROL 0x0283
    WM_IME_ENDCOMPOSITION 0x010E
    WM_IME_KEYDOWN 0x0290
    WM_IME_KEYLAST 0x010F
    WM_IME_KEYUP 0x0291
    WM_IME_NOTIFY 0x0282
    WM_IME_REQUEST 0x0288
    WM_IME_SELECT 0x0285
    WM_IME_SETCONTEXT 0x0281
    WM_IME_STARTCOMPOSITION 0x010D
    WM_INITDIALOG 0x0110
    WM_INITMENU 0x0116
    WM_INITMENUPOPUP 0x0117
    WM_INPUT 0x00FF
    WM_INPUTLANGCHANGE 0x0051
    WM_INPUTLANGCHANGEREQUEST 0x0050
    WM_KEYDOWN 0x0100
    WM_KEYFIRST 0x0100
    WM_KEYLAST 0x0108
    WM_KEYLAST 0x0109
    WM_KEYUP 0x0101
    WM_KILLFOCUS 0x0008
    WM_LBUTTONDBLCLK 0x0203
    WM_LBUTTONDOWN 0x0201
    WM_LBUTTONUP 0x0202
    WM_MBUTTONDBLCLK 0x0209
    WM_MBUTTONDOWN 0x0207
    WM_MBUTTONUP 0x0208
    WM_MDIACTIVATE 0x0222
    WM_MDICASCADE 0x0227
    WM_MDICREATE 0x0220
    WM_MDIDESTROY 0x0221
    WM_MDIGETACTIVE 0x0229
    WM_MDIICONARRANGE 0x0228
    WM_MDIMAXIMIZE 0x0225
    WM_MDINEXT 0x0224
    WM_MDIREFRESHMENU 0x0234
    WM_MDIRESTORE 0x0223
    WM_MDISETMENU 0x0230
    WM_MDITILE 0x0226
    WM_MEASUREITEM 0x002C
    WM_MENUCHAR 0x0120
    WM_MENUCOMMAND 0x0126
    WM_MENUDRAG 0x0123
    WM_MENUGETOBJECT 0x0124
    WM_MENURBUTTONUP 0x0122
    WM_MENUSELECT 0x011F
    WM_MOUSEACTIVATE 0x0021
    WM_MOUSEFIRST 0x0200
    WM_MOUSEHOVER 0x02A1
    WM_MOUSELAST(2K,XP,2k3) 0x020D
    WM_MOUSELAST(95) 0x0209
    WM_MOUSELAST(NT4,98) 0x020A
    WM_MOUSELEAVE 0x02A3
    WM_MOUSEMOVE 0x0200
    WM_MOUSEWHEEL 0x020A
    WM_MOVE 0x0003
    WM_MOVING 0x0216
    WM_NCACTIVATE 0x0086
    WM_NCCALCSIZE 0x0083
    WM_NCCREATE 0x0081
    WM_NCDESTROY 0x0082
    WM_NCHITTEST 0x0084
    WM_NCLBUTTONDBLCLK 0x00A3
    WM_NCLBUTTONDOWN 0x00A1
    WM_NCLBUTTONUP 0x00A2
    WM_NCMBUTTONDBLCLK 0x00A9
    WM_NCMBUTTONDOWN 0x00A7
    WM_NCMBUTTONUP 0x00A8
    WM_NCMOUSEHOVER 0x02A0
    WM_NCMOUSELEAVE 0x02A2
    WM_NCMOUSEMOVE 0x00A0
    WM_NCPAINT 0x0085
    WM_NCRBUTTONDBLCLK 0x00A6
    WM_NCRBUTTONDOWN 0x00A4
    WM_NCRBUTTONUP 0x00A5
    WM_NCXBUTTONDBLCLK 0x00AD
    WM_NCXBUTTONDOWN 0x00AB
    WM_NCXBUTTONUP 0x00AC
    WM_NEXTDLGCTL 0x0028
    WM_NEXTMENU 0x0213
    WM_NOTIFY 0x004E
    WM_NOTIFYFORMAT 0x0055
    WM_NULL 0x0000
    WM_PAINT 0x000F
    WM_PAINTCLIPBOARD 0x0309
    WM_PAINTICON 0x0026
    WM_PALETTECHANGED 0x0311
    WM_PALETTEISCHANGING 0x0310
    WM_PARENTNOTIFY 0x0210
    WM_PASTE 0x0302
    WM_PENWINFIRST 0x0380
    WM_PENWINLAST 0x038F
    WM_POWER 0x0048
    WM_POWERBROADCAST 0x0218
    WM_PRINT 0x0317
    WM_PRINTCLIENT 0x0318
    WM_QUERYDRAGICON 0x0037
    WM_QUERYENDSESSION 0x0011
    WM_QUERYNEWPALETTE 0x030F
    WM_QUERYOPEN 0x0013
    WM_QUERYUISTATE 0x0129
    WM_QUEUESYNC 0x0023
    WM_QUIT 0x0012
    WM_RBUTTONDBLCLK 0x0206
    WM_RBUTTONDOWN 0x0204
    WM_RBUTTONUP 0x0205
    WM_RENDERALLFORMATS 0x0306
    WM_RENDERFORMAT 0x0305
    WM_SETCURSOR 0x0020
    WM_SETFOCUS 0x0007
    WM_SETFONT 0x0030
    WM_SETHOTKEY 0x0032
    WM_SETICON 0x0080
    WM_SETREDRAW 0x000B
    WM_SETTEXT 0x000C
    WM_SETTINGCHANGE 0x001A
    WM_SHOWWINDOW 0x0018
    WM_SIZE 0x0005
    WM_SIZECLIPBOARD 0x030B
    WM_SIZING 0x0214
    WM_SPOOLERSTATUS 0x002A
    WM_STYLECHANGED 0x007D
    WM_STYLECHANGING 0x007C
    WM_SYNCPAINT 0x0088
    WM_SYSCHAR 0x0106
    WM_SYSCOLORCHANGE 0x0015
    WM_SYSCOMMAND 0x0112
    WM_SYSDEADCHAR 0x0107
    WM_SYSKEYDOWN 0x0104
    WM_SYSKEYUP 0x0105
    WM_TABLET_FIRST 0x02C0
    WM_TABLET_LAST 0x02DF
    WM_TCARD 0x0052
    WM_THEMECHANGED 0x031A
    WM_TIMECHANGE 0x001E
    WM_TIMER 0x0113
    WM_UNDO 0x0304
    WM_UNICHAR 0x0109
    WM_UNINITMENUPOPUP 0x0125
    WM_UPDATEUISTATE 0x0128
    WM_USER 0x0400
    WM_USERCHANGED 0x0054
    WM_VKEYTOITEM 0x002E
    WM_VSCROLL 0x0115
    WM_VSCROLLCLIPBOARD 0x030A
    WM_WINDOWPOSCHANGED 0x0047
    WM_WINDOWPOSCHANGING 0x0046
    WM_WININICHANGE 0x001A
    WM_WTSSESSION_CHANGE 0x02B1
    WM_XBUTTONDBLCLK 0x020D
    WM_XBUTTONDOWN 0x020B
    WM_XBUTTONUP 0x020C



    แก้ไขล่าสุดโดย newsak2005 เมื่อ 02/06/11, 08:49 am, ทั้งหมด 2 ครั้ง
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 02/06/11, 08:12 am

    โค๊ดตัวอย่างการประยุกต์ใช้งาน Windows Message Codes กับ กับคำสั่งต่างๆ

    ปกติจะไม่ค่อยเห็นใครเขาใช้งาน WM กับ การสร้างโปรแกรมโปรเจ็กต์ซักเท่าไหร่

    จริงๆแล้วคำสั่งแทบทุกคำสั่ง สามารถใช้ไอเดียของตนเอง ออกแบบคำสั่งเพื่อประยุกต์ใช้งานขึ้นมาได้

    ว่างๆลองสร้า้งสรรค์ไอเดียความคิดกันดูนะครับ ใครไม่ค้นคว้าทดลองเองก็จะไม่รู้

    ความรู้ใหม่ๆจะเกิดขึ้นได้ ต้องไม่หยุดนิ่ง สมองต้องทำงาน ค้นคิดอยู่ตลอดเวลา.
    --------------------------------------------------------------------------------------
    ปกติเราจะไม่สามารถจับ Drag ในส่วนทีเป็นหน้าต่าง เพื่อเคลื่อนย้ายโปรแกรมได้

    จะต้องจับ Drag ส่วนที่เป็น Title bar เท่านั้นถึงจะเคลื่อนย้ายโปรแกรมได้

    เมื่อมีการใช้งานคำสั่ง: Windows Message Codes เราจะสามารถจับส่วนไหนก็ได้ของโปรแกรม (ยกเว้นปุ่ม)

    เพื่อเคลื่อนย้ายโปรแกรมได้ คำสั่งนี้เหมาะสำหรับใช้กับโปรแกรมที่ไม่มี Title bar

    Code:
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <SendMessage.au3>

    Global Const $SC_DRAGMOVE = 0xF012

    $hWnd = GUICreate("Form1", 203, 100, 192, 124)
    $Graphic1 = GUICtrlCreateGraphic(8, 8, 188, 84)
    GUICtrlSetBkColor(-1, 0xC0DCC0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
          Case $GUI_EVENT_CLOSE
             Exit
          Case $GUI_EVENT_PRIMARYDOWN
             _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
       EndSwitch
    WEnd
    ------------------------------------------------------------------------------------------------
    อันเนื่องมาจากว่า GUI มี message เป็นชนิด System ..ฉนั้น WM ที่ใช้ก็ต้องเป็นชนิด System ด้วย

    คำสั่งถึงจะมีผล โดยใช้คำสั่ง: $WM_SYSCOMMAND และตามด้วยรหัส hex ของวินโดว์
    ------------------------------------------------------------------------------------------------------
    เปิดรับการสร้างสรรค์ไอเดียของท่านด้วยการทดลองเปลี่ยนรหัส hex อื่นๆดู

    แล้วท่านจะได้ความรู้ใหม่ๆเพิ่มขึ้น .. ยังมีอะไร?ดีดีที่ชวนให้ต้องค้นคว้าหาความจริงกันอีกเยอะ
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 04/06/11, 02:19 am

    การใช้งานคำสั่ง: GUIRegisterMsg กับ Windows Message Code(WM)

    รูปแบบคำสั่ง:
    Code:
    GUIRegisterMsg ( msgID, "function" )

    Parameters

    msgID A Windows Message ID (see Appendix: Windows Message Codes).
    function The name of the user function to call when the message appears or an empty string "" to unregister a message.

    Return Value

    Success: 1
    Failure: 0
    --------------------------------------------------------------------------------------------
    GUIRegisterMsg หมายถึง การที่เราติดต่อกับวินโดว์ เพื่อที่จะดึงเอา message code ของ windows ออกมาใช้งาน

    msgID, $iwParam, $ilParam หมายถึง message code และ parameter ชึ่งให้ผลในทางปฏิบัติ

    ต้องเลือกใช้งานให้ถูกต้อง ไม่งั้นคำสั่งจะไม่มีผล

    "function" หมายถึง ชื่อที่เราตั้งขึ้น เพื่อที่จะนำไปเขียนคำสั่งที่เป็นรูปแบบฟังก์ชั่น ประมาณนี้

    Func MyUserFunction($hWndGUI, $MsgID, $WParam, $LParam)
    ...
    EndFunc

    Or

    Func MyUserFunction($hWndGUI, $MsgID)
    ...
    EndFunc
    -----------------------------------------------------------------------------------------------
    โค๊ดตัวอย่า่งจาก Help ..นำออกมาอธิบาย

    Code:
    #include <GuiMenu.au3>
    #include <GuiConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

    Opt('MustDeclareVars', 1)

    Global Enum $idOpen = 1000, $idSave, $idInfo

    _Main()

    Func _Main()
       Local $hWnd

       ; Create GUI
       $hWnd = GUICreate("Menu", 400, 300)
       GUISetState()

       ; Register message handlers
       GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
       GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")

       ; Loop until user exits
       Do
       Until GUIGetMsg() = $GUI_EVENT_CLOSE
    EndFunc  ;==>_Main

    ; Handle WM_COMMAND messages
    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
       Switch $iwParam
          Case $idOpen
             _WinAPI_ShowMsg ("Open")
          Case $idSave
             _WinAPI_ShowMsg ("Save")
          Case $idInfo
             _WinAPI_ShowMsg ("Info")
       EndSwitch
    EndFunc  ;==>WM_COMMAND

    ; Handle WM_CONTEXTMENU messages
    Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $ilParam)
       Local $hMenu

       $hMenu = _GUICtrlMenu_CreatePopup ()
       _GUICtrlMenu_InsertMenuItem ($hMenu, 0, "Open", $idOpen)
       _GUICtrlMenu_InsertMenuItem ($hMenu, 1, "Save", $idSave)
       _GUICtrlMenu_InsertMenuItem ($hMenu, 3, "", 0)
       _GUICtrlMenu_InsertMenuItem ($hMenu, 3, "Info", $idInfo)
       _GUICtrlMenu_TrackPopupMenu ($hMenu, $iwParam)
       _GUICtrlMenu_DestroyMenu ($hMenu)
       Return True
    EndFunc  ;==>WM_CONTEXTMENU

    ดูจากโค๊ดจะเห็นได้ว่า เรากำหนดรูปแบบฟังก์ชั่นในการสั่งาน(Handle)ไว้2อย่างคือ

    1.WM_COMMAND ใช้สำหรับสั่งแสดงผลทาง MessageBox

    2.WM_CONTEXTMENU ใช้สำหรับสั่งแสดงผลเมื่อเราคลิ๊กขวา(RightClick)

    เลือกใช้พารามิเตอร์ตัวแรก $iwParam ส่วน $ilParam ทดลองใช้แล้วไม่เกิดผลใดๆ.
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 06/06/11, 06:35 pm

    ตัวอย่างโค๊ด: Macro Message

    บางคนอาจสงสัยว่า.. มาโครคืออะไร? และมันสามารถเป็นได้กระทั่ง'ไวรัส' ให้คุณให้โทษต่อผู้ใช้อย่างไร?

    มาโครเป็นคำสั่งพิเศษที่สามารถทำงานด้วยตัวของมันเองโดยไม่ต้องมีใครมาสั่ง

    ตรงกันข้ามมาโครสามารถควบคุมโปรแกรมอื่นให้ทำงานตามที่มันต้องการได้

    คนถึงได้เรียกว่ามาโครว่าเป็นไวรัสชนิดหนึ่ง

    ถ้าใครใช้คำสั่งมาโครเป็น จะได้รับความสดวกในการเขียนโปรเจ็กต์ สร้างโปรแกรมให้เสร็จได้อย่างรวดเร็ว

    บางท่านศึกษาจากตัวอย่างโค๊ดด้านล่างนี้ ก็เข้าใจได้ทันทีเกี่ยวกับคำสั่งที่เป็นมาโคร.

    Code:
    #NoTrayIcon

    MsgBox(64, "", "Open folder MyDoc with Short script Use macro = @MyDocumentsDir", 5)
    ShellExecute(@MyDocumentsDir)
    If WinWaitActive("My Documents")Then
        Sleep(2000) ;Time delay 3 .sec before exit folder MyDoc.
        WinClose("My Documents")
    EndIf
    MsgBox(64, "", "Open folder MyDoc with Long script Use FullPath = C:\Documents and Settings\Administrator\My Documents", 5)
    ShellExecute("C:\Documents and Settings\Administrator\My Documents")
    Sleep(2000)
    WinClose("My Documents")
    Exit


    แก้ไขล่าสุดโดย newsak2005 เมื่อ 08/06/11, 10:04 pm, ทั้งหมด 2 ครั้ง
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 07/06/11, 05:08 am

    ลองมาดูอีกตัวอย่างหนึ่งเกี่ยวกับคำสั่ง ID macro Message

    ผมไม่อยากออกแบบเขียนคำสั่งเอง เลยลอกโค๊ดออกมาจาก Help

    ขนาดโค๊ดใน help แท้ๆ รันแล้วยังมี bug เลย ผมแก้ไขไม่ให้มี bug แล้ว.

    (อธิบายโค๊ดให้คราวหน้า)

    Code:
    #include <GUIConstantsEx.au3>

    Opt('MustDeclareVars', 1)

    Example()
    Func Example()
       Local $parent1, $ok1, $cancel1
        Opt("GUICoordMode", 2)
       Opt("GUIResizeMode", 1)
       Opt("GUIOnEventMode", 1)
        $parent1 = GUICreate("Parent1")
       GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
       GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
       GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")
        $ok1 = GUICtrlCreateButton("OK", 10, 30, 50)
       GUICtrlSetOnEvent(-1, "OKPressed")
       $cancel1 = GUICtrlCreateButton("Cancel", 0, -1)
       GUICtrlSetOnEvent(-1, "CancelPressed")
        GUISetState(@SW_SHOW)

       While 1
          Sleep(10)
       WEnd
    EndFunc

    Func OKPressed()
       MsgBox(0, "OK Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle & " CtrlHandle=" & @GUI_CtrlHandle)
    EndFunc

    Func CancelPressed()
       MsgBox(0, "Cancel Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle & " CtrlHandle=" & @GUI_CtrlHandle)
    EndFunc

    Func SpecialEvents()
       Select
          Case @GUI_CtrlId = $GUI_EVENT_CLOSE
             MsgBox(0, "Close Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
             GUIDelete()
             Exit

          Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
             MsgBox(0, "Window Minimized", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)

          Case @GUI_CtrlId = $GUI_EVENT_RESTORE
             MsgBox(0, "Window Restored", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)

       EndSelect
    EndFunc

    อธิบาย: ใช้ Event Mode Option หรือควบคุมการทำงาน โดยการเขียนคำสั่งออกมาเป็น Function

    macro message ที่ใช้ส่งสัญญานไปควบคุมคือคำสั่ง @GUI_CtrlId

    จากนั้นก็ต้องไปเลือกอีกว่าจะส่งไปควบคุมการทำงานการทำหน้าที่อะไร?

    ดั่งในตัวอย่าง.. ส่งไปควบคุม การปิดโปรแกรม , พับหน้าต่าง และ เรียกคืนหน้าต่างให้กลับมาให้เห็นดังเดิม.
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 08/06/11, 11:22 pm

    ความรู้ิพิเศษเรื่อง:AutoIt+Dll

    ผมถือว่าการเขียนคำสั่งAutoItเพื่อเรียกใช้งานไฟล์dllหรือดึงความสามารถของไฟล์dllจากวินโดว์หรือไฟล์dll
    ที่ถูกสร้างขึ้นเฉพาะกิจออกมาใช้ประโยชน์เป็นเรื่องที่ยากสุด ถ้าใครไม่ศึกษาวิธีการต่างๆจะไม่มีทางเขียน
    และเข้าใจได้เลยเป็นความรู้ที่หาศึกษาได้ยาก ถ้าเขียนกันง่ายๆคงจะเห็นมีคนเขียนขึ้นมาใช้งานกันเกร่อแล้ว
    ทีแรกตั้งใจจะเก็บความรู้นี้ไว้ในห้องพิเศษ แต่เมื่อไม่มีห้องนี้ ผมแนะนำความรู้ให้ได้เพียงเล็กน้อยเท่านั้น
    ที่เหลือท่านต้องศึกษาค้นคว้ากันเอง ความรู้สำคัญบางอย่างจำเป็นต้องสงวนไว้ใช้ประโยชน์ในภายหน้า
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 09/06/11, 03:00 am

    การเขียนโค๊ดautoitเพื่อเรียกใช้งานไฟล์dll ต้องศึกษาให้เข้าใจรูปแบบคำสั่งว่าประกอบไปด้วยอะไรบ้าง
    คำสั่งต่างๆของautoitและไฟล์dllที่สามารถเรียกใช้งานได้นั้นมีอะไรบ้าง แค่นี้ก็มึนแล้ว
    -----------------------------------------------------------------------------------------------------------
    ถ้ามีการใช้งานตัวแปรdll ..ค่าที่ได้รับจากตัวแปร(return) ต้องระบุเป็น array
    จะใช้งาน Array มากน้อย ขึ้นอยู่กับจำนวน type และ parameter ที่มีอยู่ในบันทัดคำสั่ง (Element)
    -------------------------------------------------------------------------------------------
    ในโค๊ดตัวอย่าง ค่าที่รีเทิร์นออกมาจะเป็นดังนี้
    ถ้าใช้ array[0] ค่าที่ได้ออกมาจะเป็นข้อมูล เงื่อนไขถาม-ตอบ เช่น Yes, No, Ok, Cancel เป็นต้น
    ถ้าใช้ array[1] ค่าที่ได้ออกมาจะเป็นข้อมูล hWnd Hex code
    และarrayอื่นๆตามลำดับความจำเป็นต้องใช้งาน
    -------------------------------------------------------------------
    Code: DllCall() DLL MessageBox result

    Code:
    $sTitle = 'MsgBox Result Sample'
    $sText = 'ท่านต้องการทดสอบกดปุ่มใช่หรือไม่?'
    $Msg_Yes = 'ท่านคลิ๊กปุ่ม..Yes'
    $Msg_NO = 'ท่านคลิ๊กปุ่ม..No และปิด DLL MessageBox'
    While 1
    $btn = DllCall("user32.dll", "int", "MessageBox", "hwnd", 0, "str", $sText, "str", $sTitle, "int", 36) ;36 is flag
    Select
        Case $btn[0] = 6 ;id button..yes
            MsgBox(64, "", $Msg_Yes)
        Case $btn[0] = 7 ;id button..no
            MsgBox(64, "", $Msg_No)
            ExitLoop
    EndSelect
    WEnd

    อธิบาย: DllCall หมายถึง คำสั่งที่ใช้สำหรับเรียกไฟล์dll เพื่อเลือกใช้ความสามารถของไฟล์dllที่มีอยู่

    โดยเขียนคำสั่งต่างๆประกอบเข้าไปให้ถูกต้องตามรูปแบบคำสั่ง

    รูปแบบคำสั่ง: DllCall ( "dll", "return type", "function" [, type1, param1 [, type n, param n]] )

    "dll", "return type" หมายถึง ชื่อไฟล์และชนิดของไฟล์dll ที่เราเลือกเรียกใช้งาน

    ชนิดของไฟล์dll มีอยู่หลายชนิด แต่ที่นิยมใช้ส่วนใหญ่มักจะเป็นไฟล์ข้อมูลชนิด 32 บิต

    ฉนั้นตรง return type มักจะระบุชนิดของไฟล์dllไว้เป็น Intreger (ข้อมูลชนิดเลขจำนวนเต็ม) หรือเขียนย่อสั้นๆว่า int
    --------------------------------------------------------------------------------------------------------------------
    "MessageBox", "hwnd", 0 หมายถึง ชื่อฟังก์ชั่นคำสั่งที่เราเลือกกำนดขึ้น (handle)

    ถ้าไม่มีการใช้พารามิเตอร์ มักกำหนดไว้เป็น 0 หรือ " " (ว่างเปล่า)
    ------------------------------------------------------------------------------------------
    ดั่งในโค๊ดตัวอย่าง พารามิเตอร์ของ MessageBox ประกอบไปด้วย..

    type1, param1 หรือ "str", $sText หมายถึง ข้อความที่ปรากฏอยู่บนหน้าต่าง MessageBox

    เป็นข้อมูลขนิด String หรือ str หรือข้อมูลที่เป็นตัวอักษรนั่นเอง

    และตามด้วย type และ parameter อื่นๆที่เป็นองค์ประกอบของ MessageBox

    ถ้าเขียนคำสั่งผิด หรือ เขียนสั่งเกินความสามารถของ messagebox ที่มีอยู่ จะเกิด Error!
    --------------------------------------------------------------------------------------------
    ผมให้ได้เพียงเท่านี้ ข้องใจสงสัยตรงไหน ..มีคำตอบสำหรับท่านเสมอ.



    แก้ไขล่าสุดโดย newsak2005 เมื่อ 11/06/11, 04:17 pm, ทั้งหมด 1 ครั้ง
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 10/06/11, 12:10 am

    โค๊ดตัวอย่างเรียกใช้งานไฟล์ shell32.dll ดึง WindowsAboutBox ออกมาใช้งาน

    ผมดึงคำสั่งทีเป็นใส้ในจากไฟล์ #include ต่างๆออกมาหัดมาฝึกเขียน

    ผมเคยแนะนำให้เข้าไปศึกษากัน

    แต่มีคนบางคนไม่ยอมเชื่อ หาว่าผมมั่ว สอนอะไรไม่รู้เรื่อง

    แถมยังย้อนถามผมอีกว่า เข้าไปดูทำไม?ในไฟล์ #include

    ผมก็เลยปล่อยให้เป็นปริศนามาจนถึงทุกวันนี้.

    Code:
    $hForm = GUICreate('MyGUI', 400, 400)
    $Button = GUICtrlCreateButton('About', 165, 366, 70, 23)
    GUISetState()

    While 1
        $Msg = GUIGetMsg()
        Switch $Msg
            Case -3
                ExitLoop
            Case $Button
                _WinAPI_AboutDlg('About', 'PSsix', 'Create by: sak2005', _
             _WinAPI_ShellExtractIcon("explorer.exe", 0, 32, 32), $hForm)
        EndSwitch
    WEnd

    Func _WinAPI_AboutDlg($sTitle, $sName, $sText, $hIcon = 0, $hParent = 0)
        Local $Ret = DllCall('shell32.dll', 'int', 'ShellAboutW', 'hwnd', $hParent, 'wstr', $sTitle & '#' & $sName, 'wstr', $sText, 'ptr', $hIcon)
        If (@error) Or (Not $Ret[0]) Then
          Return SetError(1, 0, 0)
       EndIf
       Return 1
    EndFunc

    Func _WinAPI_ShellExtractIcon($sIcon, $iIndex, $iWidth, $iHeight)
       Local $Ret = DllCall('shell32.dll', 'int', 'SHExtractIconsW', 'wstr', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr*', 0, 'int', 1, 'int', 0)
        If (@error) Or (Not $Ret[0]) Or (Not $Ret[5]) Then
          Return SetError(1, 0, 0)
       EndIf
       Return $Ret[5]
    EndFunc




    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 11/06/11, 03:53 pm

    สรุปคำสั่งที่เกี่ยวข้องกับไฟล์DLLรวมทั้งหมด 11 คำสั่ง

    DllCall
    DllCallbackFree
    DllCallbackGetPtr
    DllCallbackRegister
    DllClose
    DllOpen
    DllStructCreate
    DllStructGetData
    DllStructGetPtr
    DllStructGetSize
    DllStructSetData

    คำสั่งที่สรุปให้ข้างต้น ท่านจะเขียนและใช้งานเป็น ก็ต่อเมื่อ..ท่านสนใจศึกษาค้นคว้าอย่างจริงจัง

    และเมื่อท่านได้คำตอบต่างๆจากการศึกษาค้นคว้าแล้ว ก็ไม่มีอะไรยากสำหรับท่าน.




    แก้ไขล่าสุดโดย newsak2005 เมื่อ 11/06/11, 04:10 pm, ทั้งหมด 1 ครั้ง
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 11/06/11, 04:07 pm

    สรุปคำสั่งต่างๆที่เกี่ยวข้องกับ Array

    เจตนาที่สรุปไว้ให้ก็เพราะว่า เวลาท่านเขียนโปรแกรมที่จำเป็นต้องใช้งาน array

    ท่านจะนึกได้ทันทีว่า ควรจะนำคำสั่งไหนมาใช้ถึงจะเหมาะสม ไม่ต้องเขียน array เองให้เสียเวลา

    ท่านPOSได้ลงความรู้เกี่ยวกับ array โดยตรงไว้บ้างแล้ว

    ผมไม่ขอลงต่อจากท่านpos ให้ท่านฝึกเขียนกันให้เป็นอย่างเดียวพอ
    ------------------------------------------------------------------------
    ลงให้เฉพาะบางคำสั่งที่รู้ เพราะ array นั้นมีอยู่ 2 อย่าง คือ..

    1.คำสั่งที่เป็น array (direc array, array return)
    2.array ที่เขียนขึ้นเอง (modify array)

    -------------------------------------------------------------------------
    เี๋ดี๋ยวผมจะลองนำใส้ใน #include ของ array ออกมาดูว่าเขาเขียนสั่งไว้ยังไง?


    แก้ไขล่าสุดโดย newsak2005 เมื่อ 11/06/11, 10:55 pm, ทั้งหมด 1 ครั้ง
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 11/06/11, 09:57 pm

    อันนี้เป็นโค๊ดคำสั่ง _ArrayAdd และ _ArrayDisplay ที่ไม่ต้องอ้างสคริ๊ปไฟล์ #include แต่ประการใด

    ถ้าใครสามารถประยุกต์เขียนโค๊ด ทำไฟล์ #include ออกมาใช้งานเองได้

    ท่านจะเป็นโปรแกรมเมอร์ที่อยู่ในระดับแนวหน้าเลยทีเดียว.

    Code:
    Local $avArray[3]

    $avArray[0] = "JPM"
    $avArray[1] = "Holger"
    $avArray[2] = "Jon"
    ArrayDisplay($avArray, "arrayเดิม ตั้งไว้3ลำดับ")
    ArrayAdd($avArray, "sak2005")
    ArrayAdd($avArray, "PSsix")
    ArrayDisplay($avArray, "arrayใหม่ ถูกเพิ่มเข้าอีก2ลำดับ")

    Func ArrayAdd(ByRef $avArray, $vValue)
       If Not IsArray($avArray) Then Return SetError(1, 0, -1)
       If UBound($avArray, 0) <> 1 Then Return SetError(2, 0, -1)
        Local $iUBound = UBound($avArray)
       ReDim $avArray[$iUBound + 1]
       $avArray[$iUBound] = $vValue
       Return $iUBound
    EndFunc

    Func ArrayDisplay(Const ByRef $avArray, $sTitle = "Array: ListView Display", $iItemLimit = -1, $iTranspose = 0, $sSeparator = "", $sReplace = "|", $sHeader = "")
       If Not IsArray($avArray) Then Return SetError(1, 0, 0)
       Local $iDimension = UBound($avArray, 0), $iUBound = UBound($avArray, 1) - 1, $iSubMax = UBound($avArray, 2) - 1
       If $iDimension > 2 Then Return SetError(2, 0, 0)
        If $sSeparator = "" Then $sSeparator = Chr(124)
        If ArraySearch($avArray, $sSeparator, 0, 0, 0, 1) <> -1 Then
          For $x = 1 To 255
             If $x >= 32 And $x <= 127 Then ContinueLoop
             Local $sFind = ArraySearch($avArray, Chr($x), 0, 0, 0, 1)
             If $sFind = -1 Then
                $sSeparator = Chr($x)
                ExitLoop
             EndIf
          Next
       EndIf
        Local $vTmp, $iBuffer = 64
       Local $iColLimit = 250
       Local $iOnEventMode = Opt("GUIOnEventMode", 0), $sDataSeparatorChar = Opt("GUIDataSeparatorChar", $sSeparator)
        If $iSubMax < 0 Then $iSubMax = 0
       If $iTranspose Then
          $vTmp = $iUBound
          $iUBound = $iSubMax
          $iSubMax = $vTmp
       EndIf
        If $iSubMax > $iColLimit Then $iSubMax = $iColLimit
       If $iItemLimit < 1 Then $iItemLimit = $iUBound
       If $iUBound > $iItemLimit Then $iUBound = $iItemLimit
        If $sHeader = "" Then
          $sHeader = "Row  "
          For $i = 0 To $iSubMax
             $sHeader &= $sSeparator & "Col " & $i
          Next
       EndIf
        Local $avArrayText[$iUBound + 1]
       For $i = 0 To $iUBound
          $avArrayText[$i] = "[" & $i & "]"
          For $j = 0 To $iSubMax
             If $iDimension = 1 Then
                If $iTranspose Then
                   $vTmp = $avArray[$j]
                Else
                   $vTmp = $avArray[$i]
                EndIf
             Else
                If $iTranspose Then
                   $vTmp = $avArray[$j][$i]
                Else
                   $vTmp = $avArray[$i][$j]
                EndIf
             EndIf
                $vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
             $avArrayText[$i] &= $sSeparator & $vTmp
                $vTmp = StringLen($vTmp)
             If $vTmp > $iBuffer Then $iBuffer = $vTmp
          Next
       Next
       $iBuffer += 1
        Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 0x66
       Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 0x40
       Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 0x0200
       Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 0x2
       Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 0x4
       Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
       Local Const $_ARRAYCONSTANT_LVIF_PARAM = 0x4
       Local Const $_ARRAYCONSTANT_LVIF_TEXT = 0x1
       Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (0x1000 + 29)
       Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (0x1000 + 4)
       Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (0x1000 + 44)
       Local Const $_ARRAYCONSTANT_LVM_INSERTITEMW = (0x1000 + 77)
       Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54)
       Local Const $_ARRAYCONSTANT_LVM_SETITEMW = (0x1000 + 76)
       Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 0x20
       Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 0x1
       Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 0x8
       Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 0x0200
       Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 0x00010000
       Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 0x00020000
       Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 0x00040000
       Local Const $_ARRAYCONSTANT_tagLVITEM = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int GroupID;int Columns;ptr pColumns"
        Local $iAddMask = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
       Local $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]"), $pBuffer = DllStructGetPtr($tBuffer)
       Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM), $pItem = DllStructGetPtr($tItem)
       DllStructSetData($tItem, "Param", 0)
       DllStructSetData($tItem, "Text", $pBuffer)
       DllStructSetData($tItem, "TextMax", $iBuffer)
        Local $iWidth = 640, $iHeight = 480
       Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
       Local $aiGUISize = WinGetClientSize($hGUI)
       Local $hListView = GUICtrlCreateListView($sHeader, 0, 0, $aiGUISize[0], $aiGUISize[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
       Local $hCopy = GUICtrlCreateButton("Copy Selected", 3, $aiGUISize[1] - 23, $aiGUISize[0] - 6, 20)
       GUICtrlSetResizing($hListView, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
       GUICtrlSetResizing($hCopy, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
       GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
       GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
       GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)
        Local $aItem
       For $i = 0 To $iUBound
          If GUICtrlCreateListViewItem($avArrayText[$i], $hListView) = 0 Then
           $aItem = StringSplit($avArrayText[$i], $sSeparator)
             DllStructSetData($tBuffer, "Text", $aItem[1])
                DllStructSetData($tItem, "Item", $i)
             DllStructSetData($tItem, "SubItem", 0)
             DllStructSetData($tItem, "Mask", $iAddMask)
             GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_INSERTITEMW, 0, $pItem)
                DllStructSetData($tItem, "Mask", $_ARRAYCONSTANT_LVIF_TEXT)
             For $j = 2 To $aItem[0]
                DllStructSetData($tBuffer, "Text", $aItem[$j])
                DllStructSetData($tItem, "SubItem", $j - 1)
                GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETITEMW, 0, $pItem)
             Next
          EndIf
       Next
        $iWidth = 0
       For $i = 0 To $iSubMax + 1
          $iWidth += GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
       Next
       If $iWidth < 250 Then $iWidth = 230
       $iWidth += 20
        If $iWidth > @DesktopWidth Then $iWidth = @DesktopWidth - 100
        WinMove($hGUI, "", (@DesktopWidth - $iWidth)/2, Default, $iWidth)
        GUISetState(@SW_SHOW, $hGUI)
        While 1
          Switch GUIGetMsg()
             Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
                ExitLoop
                Case $hCopy
                Local $sClip = ""
                    Local $aiCurItems[1] = [0]
                For $i = 0 To GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
                   If GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, 0x2) Then
                      $aiCurItems[0] += 1
                      ReDim $aiCurItems[$aiCurItems[0] + 1]
                      $aiCurItems[$aiCurItems[0]] = $i
                   EndIf
                Next
                If Not $aiCurItems[0] Then
                   For $sItem In $avArrayText
                      $sClip &= $sItem & @CRLF
                   Next
                Else
                   For $i = 1 To UBound($aiCurItems) - 1
                      $sClip &= $avArrayText[$aiCurItems[$i]] & @CRLF
                   Next
                EndIf
                ClipPut($sClip)
          EndSwitch
       WEnd
       GUIDelete($hGUI)
        Opt("GUIOnEventMode", $iOnEventMode)
       Opt("GUIDataSeparatorChar", $sDataSeparatorChar)
       Return 1
    EndFunc

    Func ArraySearch(Const ByRef $avArray, $vValue, $iStart = 0, $iEnd = 0, $iCase = 0, $iPartial = 0, $iForward = 1, $iSubItem = -1)
       If Not IsArray($avArray) Then Return SetError(1, 0, -1)
       If UBound($avArray, 0) > 2 Or UBound($avArray, 0) < 1 Then Return SetError(2, 0, -1)
       Local $iUBound = UBound($avArray) - 1
        If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound
       If $iStart < 0 Then $iStart = 0
       If $iStart > $iEnd Then Return SetError(4, 0, -1)
        Local $iStep = 1
       If Not $iForward Then
          Local $iTmp = $iStart
          $iStart = $iEnd
          $iEnd = $iTmp
          $iStep = -1
       EndIf
        Switch UBound($avArray, 0)
          Case 1
             If Not $iPartial Then
                If Not $iCase Then
                   For $i = $iStart To $iEnd Step $iStep
                      If $avArray[$i] = $vValue Then Return $i
                   Next
                Else
                   For $i = $iStart To $iEnd Step $iStep
                      If $avArray[$i] == $vValue Then Return $i
                   Next
                EndIf
             Else
                For $i = $iStart To $iEnd Step $iStep
                   If StringInStr($avArray[$i], $vValue, $iCase) > 0 Then Return $i
                Next
             EndIf
          Case 2
             Local $iUBoundSub = UBound($avArray, 2) - 1
             If $iSubItem > $iUBoundSub Then $iSubItem = $iUBoundSub
             If $iSubItem < 0 Then
                $iSubItem = 0
             Else
                $iUBoundSub = $iSubItem
             EndIf
                For $j = $iSubItem To $iUBoundSub
                If Not $iPartial Then
                   If Not $iCase Then
                      For $i = $iStart To $iEnd Step $iStep
                         If $avArray[$i][$j] = $vValue Then Return $i
                      Next
                   Else
                      For $i = $iStart To $iEnd Step $iStep
                         If $avArray[$i][$j] == $vValue Then Return $i
                      Next
                   EndIf
                Else
                   For $i = $iStart To $iEnd Step $iStep
                      If StringInStr($avArray[$i][$j], $vValue, $iCase) > 0 Then Return $i
                   Next
                EndIf
             Next
          Case Else
             Return SetError(7, 0, -1)
       EndSwitch
        Return SetError(6, 0, -1)
    EndFunc



    แก้ไขล่าสุดโดย newsak2005 เมื่อ 12/06/11, 02:51 am, ทั้งหมด 1 ครั้ง
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 12/06/11, 02:47 am

    คำสั่งที่เกี่ยวข้องกับ Array

    _ColorGetRGB
    _Date_Time_DOSDateTimeToArray
    _Date_Time_DOSDateToArray
    _Date_Time_DOSTimeToArray
    _Date_Time_FileTimeToArray
    _Date_Time_SystemTimeToArray
    _ExcelReadArray
    _ExcelReadSheetToArray
    ExcelSheetList
    ExcelWriteArray
    _ExcelWriteSheetFromArray
    FileReadToArray
    FileWriteFromArray
    _GDIPlus_Decoders
    _GDIPlus_Encoders
    _GUICtrlButton_GetImageList
    _GUICtrlListBox_GetSelItems
    _GUICtrlListView_AddArray
    _GUICtrlSlider_GetLogicalTics
    _GUIToolTip_ToolToArray
    _IE_VersionInfo
    _IETableWriteToArray
    _SQLite_Display2DResult
    _SQLite_GetTable
    _SQLite_GetTable2d
    _WinAPI_ExtractIconEx
    _Word_VersionInfo
    StringRegExp
    StringFromASCIIArray
    Call
    UBound
    ProcessGetStats
    ProcessList
    _GUICtrlStatusBar_Create
    GUISetAccelerators
    FileGetShortcut
    FileGetTime
    ReDim
    StringSplit

    (ลงต่อให้คราวหน้า ยังมีอีกเป็นร้อยคำสั่ง)
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 13/06/11, 05:33 pm

    รวมคำสั่งที่เขียนคนละแบบ แต่ให้ผลเหมือนกัน

    เพื่อพิจารณาเลือกเขียนเลือกนำไปใช้งาน

    เป็นเทคนิคหนึ่งที่นักเขียนโปรแกรมควรเรียนรู้
    ----------------------------------------------------------------------------------
    Files Manager Discription ..ใช้ #Include <GuiListBox.au3>
    Code:
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    ;#include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiListBox.au3>

    Opt("GUIOnEventMode", 1)

    $gui_title = 'Files Manager Description'
    $hForm = GUICreate($gui_title, 411, 315, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close", $hForm)
    $Inp_folpath = GUICtrlCreateInput("", 16, 32, 300, 21)
    GUICtrlCreateLabel("Folder Path", 128, 15, 58, 17)
    GUICtrlCreateLabel("Files discription", 160, 71, 75, 17)
    $hListBox = _GUICtrlListBox_Create($hForm, "", 16, 88, 380, 214)
    $Btn_sel = GUICtrlCreateButton("Browse", 320, 32, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_FilesAddListBox")
    GUISetState(@SW_SHOW)

    While 1
       Sleep(10)
    WEnd

    Func _FilesAddListBox()
       $source = FileSelectFolder("Choose a folder", "", "", "", $hForm)
        GUICtrlSetData($Inp_folpath, $source)
        _GUICtrlListBox_BeginUpdate($hListBox)
       _GUICtrlListBox_ResetContent($hListBox)
       MsgBox(4160, "Information", "Storage Allocated: " & _
       _GUICtrlListBox_InitStorage($hListBox, 100, 4096))
       $Err = _GUICtrlListBox_Dir($hListBox,$source&"\*.*")
        If $Err = -1 Then MsgBox(48, "Error!", "You're not select a folder.")
       _GUICtrlListBox_EndUpdate($hListBox)
    EndFunc

    Func _Close()
       Exit
    EndFunc
    ------------------------------------------------------------------------------------------
    Files Manager Discription ..ไม่ใช้ #Include <GuiListBox.au3>
    Code:
    #NoTrayIcon
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    ;#Include <GuiListBox.au3>

    Opt("GUIOnEventMode", 1)

    $gui_title = 'Files Manager Description'
    $hForm = GUICreate($gui_title, 411, 315, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close", $hForm)
    $Inp_folpath = GUICtrlCreateInput("", 16, 32, 300, 21)
    GUICtrlCreateLabel("Folder Path", 128, 15, 58, 17)
    GUICtrlCreateLabel("Files discription", 160, 71, 75, 17)
    $hListBox = GUICtrlCreateList("", 16, 88, 380, 214)
    $Btn_sel = GUICtrlCreateButton("Browse", 320, 32, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_FilesAddListBox")
    GUISetState(@SW_SHOW)

    While 1
       Sleep(10)
    WEnd

    Func _FilesAddListBox()
       _clear()
        $source = FileSelectFolder("Choose a folder", "", "", "", $hForm)
       If @error = 1 Then Return SetError(1, 0, 0)
       GUICtrlSetData($Inp_folpath, $source)
       $search = FileFindFirstFile($source&"\*.*")
        If $search = -1 Then
            MsgBox(48, "Error!", "No files/directories matched the search pattern")
          _clear()
          Return SetError(1, 0, 0)
       EndIf
        While 1
          $pos = WinGetPos($gui_title)
           ToolTip("Please wait!..", $pos[0]+160, $pos[1]+220, "")
            $file = FileFindNextFile($search)
            If @error Then ExitLoop
            GUICtrlSetData($hListBox, $file&@CRLF)
          Sleep(100)
       WEnd
          FileClose($search)
          ToolTip("")
    EndFunc

    Func _clear()
       GUICtrlSetData($Inp_folpath, "")
       GUICtrlSetData($hListBox, "")
    EndFunc

    Func _Close()
       Exit
    EndFunc
    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 14/06/11, 05:18 pm

    ตรึงหน้าต่างโปรแกรมให้อยู่กับที่ ถ้าเคลื่อนย้ายมันจะกลับมาที่เดิมอีก
    Code:
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Include <WinAPI.au3>

    $gui_title = 'Files Manager Description'
    $hForm = GUICreate($gui_title, 411, 315, 300, 300)
    $Inp_folpath = GUICtrlCreateInput("", 16, 32, 300, 21)
    GUICtrlCreateLabel("Folder Path", 128, 15, 58, 17)
    GUICtrlCreateLabel("Files discription", 160, 71, 75, 17)
    $hListBox = GUICtrlCreateList("", 16, 88, 380, 214)
    $Btn_sel = GUICtrlCreateButton("Browse", 320, 32, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

    Local $iX = 300, $iY = 300, $iWidth = 411, $iHeight = 315
    Do
      _WinAPI_MoveWindow($hForm, $iX, $iY, $iWidth, $iHeight)
    Sleep(10)
    Until GUIGetMsg()= -3
    Code:
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    $gui_title = 'Files Manager Description'
    $hForm = GUICreate($gui_title, 411, 315, 300, 300)
    $Inp_folpath = GUICtrlCreateInput("", 16, 32, 300, 21)
    GUICtrlCreateLabel("Folder Path", 128, 15, 58, 17)
    GUICtrlCreateLabel("Files discription", 160, 71, 75, 17)
    $hListBox = GUICtrlCreateList("", 16, 88, 380, 214)
    $Btn_sel = GUICtrlCreateButton("Browse", 320, 32, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

    Local $iX = 300, $iY = 300, $iWidth = 411, $iHeight = 315
    Do
      WinMove($gui_title, "", $iX, $iY, $iWidth, $iHeight)
    Sleep(10)
    Until GUIGetMsg()= -3

    newsak2005
    newsak2005
    ระงับสมาชิก
    ระงับสมาชิก


    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty
    จำนวนข้อความ : 115
    ความนิยม : 0
    เข้าร่วมเมื่อ : 08/05/2011

    รวมผลงาน บทความ+โปรแกรม ของ sak2005 - Page 2 Empty Re: รวมผลงาน บทความ+โปรแกรม ของ sak2005

    ตั้งหัวข้อ by newsak2005 14/06/11, 05:32 pm

    กล่องสี่เหลี่ยมวิ่งไปวิ่งมาบนหน้าจอคล้ายเกมส์ปิงปอง.

    ใครพัฒนาได้ มาร่วมสนุก โดยการโพสท์โค๊ด ไว้ที่นี่ได้ก่อนเลยครับ

    คำสั่งที่คาดว่าน่าจะนำมาใช้ ได้แก่..@DesktopHeight , @DesktopWidth , WinGetPos , WinMove

    ถ้าใช้ Graphic Control คำสั่งที่คาดว่าน่าจะนำมาใช้ ได้แก่.. GUICtrlSetGraphic , ControlGetPos , ControlMove
    -----------------------------------------------------------------------------------------------------------------------
    Code:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    $title = 'PingPong'
    $hForm = GUICreate($title, 73, 68, 0, 300, _
    BitOR($WS_POPUP,$WS_CLIPSIBLINGS,$DS_MODALFRAME, _
    $DS_SETFOREGROUND,$DS_CONTEXTHELP), BitOR($WS_EX_ACCEPTFILES, _
    $WS_EX_APPWINDOW,$WS_EX_CONTEXTHELP,$WS_EX_TOOLWINDOW,$WS_EX_TOPMOST))
    GUISetBkColor(0xFFFFFF)
    GUISetState(@SW_SHOW)
    $width = 73
    $height = 68
    $posY = 300
    Dim $i
    Do
        For $i = 0 To @DesktopWidth-70 Step 10
           WinMove($title, "", $i, $posY, $width, $height)
          GUISetBkColor(0xFF0000, $hForm)
           Sleep(10)
       Next
       For $i = @DesktopWidth-70 To 0 Step -10
          WinMove($title, "", $i, $posY, $width, $height)
           GUISetBkColor(0x0000FF, $hForm)
           Sleep(10)
       Next
       For $i = 0 To @DesktopWidth-300 Step 10
           WinMove($title, "",$posY+150, $i, $width, $height)
          GUISetBkColor(0x00FF00, $hForm)
           Sleep(10)
       Next
       For $i = @DesktopWidth-300 To 0 Step -10
          WinMove($title, "", $posY+150, $i, $width, $height)
           GUISetBkColor(0xFFFF00, $hForm)
           Sleep(10)
       Next
    Until GUIGetMsg()= -3
    -----------------------------------------------------------------------------------------------------------------------
    ข้อคิด: การเขียนโค๊ดด้วยคำสั่งต่างๆไม่ใช่เรื่องยาก ..แต่การคิดไอเดียเพื่อใส่ลงไปใน project เป็นเรื่องที่ยากกว่า.



      เวลาขณะนี้ 02/05/24, 02:41 pm