这段代码实现了一个非常有趣的功能:将两个记事本(Notepad)窗口嵌入到创建的 GUI 窗体中,并控制它们的大小和位置。

 

示例1:

#SingleInstance, force

hwndls := []
loop 2 {
  Run, notepad, , , pid
  WinWait, ahk_pid %pid%
  WinGet, id, id, ahk_pid %pid%
  hwndls.push(id + 0)
}

Gui, +hwndparentHwnd
Gui, show, w500 h500, AHK窗体
for _,childHwnd in hwndls {
  ; SetParent 将窗体嵌入 ahk 的 Gui
  SetParent(childHwnd, parentHwnd)

  ; 用 winmove 调整被嵌入窗体的位置和尺寸
  WinMove, ahk_id %childHwnd%, , % (A_Index - 1) * 300, 0, 300, 200

  ; 可能有必要重绘窗体, 避免显示不正常
  WinSet, Redraw, , % "ahk_id " format("0x{:x}", parentHwnd)
}
return

GuiClose:
  ExitApp
Return

/*
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setparent
HWND SetParent(
  [in]       HWND hWndChild,
  [in, optional] HWND hWndNewParent
);
*/
SetParent(childHwnd, parentHwnd) {
  DllCall("User32.dll\SetParent", "ptr", childHwnd,"ptr", parentHwnd, "UInt")
}

 

示例2:

#NoEnv
#SingleInstance Force
SetBatchLines, -1
Process, Priority,, High
SendMode Input
SetWorkingDir %A_ScriptDir%

;OnMessage(0x6, "WM_ACTIVATE")
Global HGui99

Gui, 99: +HwndHGui99
Gui, 99: Show, w400 h200, 父窗口

Gui, 1: +HwndHGui1 +E0x00010000  -Caption
Gui, 1:Add, Button,x0 y0 w72 h28, OK
DllCall("SetParent", "ptr", HGui1, "ptr", HGui99)
Gui, 1: Show, x0 y0 w72 h28, 子窗口 #1


Gui, 2: +HwndHGui2 +E0x00010000  -Caption
Gui, 2:Add, text,w60 h20, 停 止 :
DllCall("SetParent", "ptr", HGui2, "ptr", HGui99)
Gui, 2: Show, x215 y5 w200 h200, 子窗口 #2

;Gui, 99: Show, w800 h600, 父窗口
;msgbox % HGui99
Return

GuiEscape:
GuiClose:
  ExitApp
Return

;WM_ACTIVATE(wParam, lParam) {
;    Static init:=OnMessage(0x6, "WM_ACTIVATE")
;	Tooltip % wParam
;}
;
;; 作用域为Gui生成框体内,移动鼠标触发
;WM_SETCURSOR() {
;    Static init:=OnMessage(0x20, "WM_SETCURSOR")
;	Tooltip 如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口
;}
;
;; 作用域为Gui生成框体按下鼠标左键触发
;WM_LBUTTONDOWN() {
;    Static init:=OnMessage(0x201, "WM_LBUTTONDOWN")
;	Tooltip 按下鼠标左键
;}

; 如果点击,exstyle允许父母拍摄焦点。
; +E0x00010000  会影响父窗口关闭按钮

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。