Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <WinAPIRes.au3>
- #include <WinAPISys.au3>
- #include <WindowsConstants.au3>
- ; http://msdn.microsoft.com
- Local Const $sClass = 'MyCustomClassName' ; Tên class name cho window
- Local Const $sName = 'Test Win32 GUI' ; Tên tiêu đề window
- Global $bExit = False
- ; Lấy module handle ~ 0
- Local $hInstance = _WinAPI_GetModuleHandle(0)
- ; Load cursor cho window
- Local $hCursor = _WinAPI_LoadCursor(0, 32512) ; IDC_ARROW = standard cursor (arrow)
- ; Tạo icon cho window
- Local $tIcons = DllStructCreate('ptr;ptr')
- _WinAPI_ExtractIconEx(@SystemDir & '\shell32.dll', 15, DllStructGetPtr($tIcons, 1), DllStructGetPtr($tIcons, 2), 1)
- Local $hIcon = DllStructGetData($tIcons, 1)
- Local $hIconSm = DllStructGetData($tIcons, 2)
- ; Tạo DLL Callback; return: LRESULT, param: HWND, UINT, WPARAM, LPARAM
- Local $hProc = DllCallbackRegister('WINPROC', 'lresult', 'hwnd;uint;wparam;lparam')
- ; Tạo DLL cấu trúc dữ liệu cho window class, xem trên MSDN dể hiểu rõ hơn
- Local $tWCEX = DllStructCreate($tagWNDCLASSEX & ';wchar szClassName[' & (StringLen($sClass) + 1) & ']')
- DllStructSetData($tWCEX, 'Size', DllStructGetPtr($tWCEX, 'szClassName') - DllStructGetPtr($tWCEX))
- DllStructSetData($tWCEX, 'Style', BitOR(0x0001,0x0002, 0x20000)) ; style cho window, 0x20000 kèm thêm shadow của class #32768 (class của popupmenu)
- DllStructSetData($tWCEX, 'hWndProc', DllCallbackGetPtr($hProc))
- DllStructSetData($tWCEX, 'ClsExtra', 0)
- DllStructSetData($tWCEX, 'WndExtra', 0)
- DllStructSetData($tWCEX, 'hInstance', $hInstance)
- DllStructSetData($tWCEX, 'hIcon', $hIcon) ; icon
- DllStructSetData($tWCEX, 'hCursor', $hCursor) ; cursor
- DllStructSetData($tWCEX, 'hBackground', _WinAPI_CreateSolidBrush(_WinAPI_GetSysColor($COLOR_3DFACE)))
- DllStructSetData($tWCEX, 'MenuName', 0)
- DllStructSetData($tWCEX, 'ClassName', DllStructGetPtr($tWCEX, 'szClassName'))
- DllStructSetData($tWCEX, 'hIconSm', $hIconSm)
- DllStructSetData($tWCEX, 'szClassName', $sClass) ; class namme
- ; đăng ký class cho window
- _WinAPI_RegisterClassEx($tWCEX)
- ; tạo window mới với class vừa tạo
- Global $hGUI = _WinAPI_CreateWindowEx(0, $sClass, $sName, BitOR($WS_CAPTION, $WS_POPUPWINDOW, $WS_VISIBLE, 0x00CF0000), (@DesktopWidth - 400) / 2, (@DesktopHeight - 400) / 2, 400, 400, 0)
- ; Tạo button từ class "button" có sẵn trong windows-ms
- Global $hButton1 = _WinAPI_CreateWindowEx(0, "Button", "Button 1", BitOR($WS_CHILD, $WS_VISIBLE), 40, 40, 100, 35, $hGUI)
- Global $hButton2 = _WinAPI_CreateWindowEx(0, "Button", "Button 2", BitOR($WS_CHILD, $WS_VISIBLE), 40, 80, 100, 35, $hGUI)
- While 1
- Sleep(10) ; Nhớ đặt sleep hoặc bất kỳ thứ gì trong While...Wend để tránh lỗi ngốn CPU
- If $bExit Then
- ExitLoop
- EndIf
- WEnd
- ; Xóa class vừa đăng ký, release icon/cursor..., không có cũng không sao
- _WinAPI_UnregisterClass($sClass, $hInstance)
- _WinAPI_DestroyCursor($hCursor)
- _WinAPI_DestroyIcon($hIcon)
- _WinAPI_DestroyIcon($hIconSm)
- DllCallbackFree($hProc)
- ; Callback của window (WINPROC), trong hàm này sẽ xử lý song song với thread của AutoIt
- ; Hàm này sẽ không bị dừng khi dùng vòng lặp (while, do, for...), có thể tương tác bất kỳ lúc nào
- ; Nếu dùng sleep thì toàn bộ chương trình sẽ dừng lại
- Func WINPROC($hWnd, $iMsg, $wParam, $lParam)
- Switch $iMsg ; đọc message của window gửi tới và xử lý
- Case $WM_CLOSE ; khi nhấn close (nút X) thì procedure nhận
- $bExit = True ; set true để dòng trên While thoát chương trình
- Case $WM_COMMAND ; lệnh command khi tương tác với window
- Switch $lParam ; lparam sẽ trả về handle của control đó
- Case $hButton1
- MsgBox(0, "", "You clicked Button 1")
- Case $hButton2
- MsgBox(0, "", "You clicked Button 2")
- ; Bạn có thể nhấn liên tục vào các Button mà không bị dừng lại, mặc dù các thông báo liên tục xuất ra
- EndSwitch
- EndSwitch
- Return _WinAPI_DefWindowProcW($hWnd, $iMsg, $wParam, $lParam) ; phải bắt buộc define cho window để không bị lỗi
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement