Saturday, July 30, 2016

[AutoIT] 2 cách để set một ứng dụng bất kỳ "On Top"

 

Xin chào các bạn hôm nay mình trở lại đây để viết tiếp seris về các thủ thuật AutoIT. Hôm nay mình xin chia sẻ với các bạn 2 cách để đặt 1 ứng dụng một cửa sổ trên các ứng dụng cửa sổ khác! Ok Let's go!!!!





Trước hết mình xin trình bày với các bạn khái niệm thế nào là một ứng dụng "On Top". Hiểu nôm na 1 ứng dụng "On Top" là một ứng dụng mà không bị các cửa sổ khác chèn đè vào, nhiều phần mềm tích hợp chức năng này trong phần mềm của họ như Media Code Pack, Notepad plus plus, KMP player,.... để cho người dùng có thể xem được ứng dụng ngay cả khi không "active" nó.
Theo mình việc set cho một ứng dụng "On Top" có ý nghĩa rất lớn tuy nhiên không phải ứng dụng nào cũng đã tích hợp sẵn tính năng này vậy nên thủ thuật nhỏ này sẽ giúp các bạn set 1 ứng dụng bất kỳ "On Top". VD: bạn có thể set cho ứng dụng Calculator của windows ở trên word để thuận lợi cho tính toán chẳng hạn vvv

Cách 1: Sử dụng hàm tích hợp sẵn (WinSetOnTop)
Có thể nói AutoIT đã tích hợp cho bạn một cách cực đơn giản để set 1 ứng dụng "On Top" đó là hàm: WinSetOnTop

VD: đoạn code sau sẽ set ứng dụng Calculator luôn ở vị trí trên ứng dụng khác!
WinSetOnTop("Calculator","",1)

Thật đơn giả phải không các bạn :). Tuy nhiên với cách này ta khó có thể hiểu được AutoIT đã làm ntn với lệnh đó??? Vậy nên mình xin giới thiệu với các bạn cách số 2.
Cách 2: Sử dụng WinAPI
 Qua ví dụ này các bạn sẽ hiểu được cách sư dụng một hàm trong file .dll cụ thể ở đây là hàm SetWindowPos trong thư viện user32.dll của Windows
Trước hết ta xem cấu trúc hàm này như sau (dựa theo file win32.hlp Bạn nào chưa có có thể xem ở đây để tải về: http://www.nothing1010.club/2016/07/huong-dan-mo-file-hlp-cu-tren-window-7.html)
Tổng quan bạn sẽ thấy hàm này như sau:
Kiểu dữ liệu trả về: BOOL
Các đối số gồm:
    HWND, hWnd, // handle của cửa sổ
    HWND hWndInsertAfter, // thuộc tính set cho handle
    int X, // horizontal position // Vị trí tọa độ X trên màn hình
    int Y, // vertical position     //  Vị trí tọa độ Y trên màn hình
    int cx, // width                      // Chiều rộng của cửa sổ mới
    int cy, // height                    // Chiều cao của cửa sổ mới tạo ra
    UINT uFlags  // window-positioning flags (Các cờ khác có liên quan)


Cơ bản là như vậy. Bạn có thể xem cụ thể trong file help để hiểu nhiều hơn. Qua đây chắc bạn cũng đã hiểu tại sao tôi nói là sử dụng hàm này có thể chỉnh được nhiều hơn rồi nhé!
Và đây là chương trình demo của tôi:

Global $setontop = DllOpen("User32.dll")
Global $hwnd_topmost = -1
Global $swp_nomove = 0x0002
Global $swp_nosize = 0x0001
Global $swp_noactivate = 0x0010

Func WinAPI_SetWindowPos($hwnd)
 DllCall($setontop,"Boolean","SetWindowPos", _
 "HWND", $hwnd, _
 "HWND", $hwnd_topmost, _
 "int" ,"0", _
 "int" ,"0", _
 "int" ,"0", _
 "int" ,"0", _
 "UINT", Bitor($swp_nomove,$swp_nosize,$swp_noactivate))
if @error then MsgBox(0,"Information","Error!")
EndFunc

$hwnd =WinGetHandle("Calculator")
WinAPI_SetWindowPos($hwnd)

Qua ví dụ trên mình hướng dẫn các bạn sử dụng 1 hàm trong 1 file .dll như sau. Trước hết bạn phải khai báo sử dụng file .dll dó ở đây của mình là use432.dll với câu lệnh như sau:
Global $setontop = DllOpen("User32.dll")
Ở đây khai báo biến $setontop sẽ mở thư viện User32.dll. Để sử dụng hàm SetWindowPos các bạn phải truyền qua nó đầy đủ các tham số trong cấu trúc file này.

Hi vọng bài viết này sẽ có ích cho các bạn! Cảm ơn đã ghé thăm blog của mình!
Pass giải nén(nếu có) :http://nothing1010.blogspot.com
 Lưu ý với các bạn là blog của mình sử dụng WinRar 5 để nén nên các bạn phải dùng WinRar5 để giải nén nhé! Nếu bạn nào chưa có thì có thể vào ĐÂY để tải và cài đặt bản mới nhất nhé!

No comments:
Write nhận xét