2012-11-30 27 views
5

tôi sử dụng ShellExecute để làm điều gì đó, và các tham số đầu tiên là HWND, các documentation trên MSDN nói:HWND làm gì trong ShellExecute?

Một handle cửa sổ cha mẹ sử dụng để hiển thị một giao diện người dùng hoặc thông báo lỗi. Giá trị này có thể là NULL nếu thao tác không được liên kết với một cửa sổ.

nhưng tôi tìm thấy giá trị nào HWND có cùng kết quả.

ví dụ:

ShellExecute(0, 'open', 'c:\', nil, nil, SW_SHOWNORMAL);

ShellExecute(Self.Handle, 'open', 'c:\', nil, nil, SW_SHOWNORMAL);

ShellExecute(123456, 'open', 'c:\', nil, nil, SW_SHOWNORMAL);

chỉ được điều tương tự (Mở đĩa C), vì vậy tôi tự hỏi việc sử dụng sử dụng khác nhau HWND là gì?

nhân tiện, khi nào 'HWND = 0' là HandleTop của DeskTop được sử dụng?

+0

bạn có thể nhận cửa sổ máy tính để bàn 'HWND' bằng cách gọi phương thức' GetDesktopWindow() 'và tay cầm này không bằng 0. 0 có nghĩa là xử lý rỗng/không được xử lý. – teran

+0

@teran Nhưng điều đáng tin cậy là ShellExecute có thể chứa mã gọi là 'GetDesktopWindow' nếu cửa sổ xử lý nó được truyền bằng 0. –

Trả lời

11

Điều đó HWND được sử dụng làm cửa sổ chủ sở hữu cho bất kỳ giao diện người dùng nào được hiển thị là kết quả của cuộc gọi đến ShellExecute. Ví dụ, bất kỳ hộp thoại thông báo lỗi nào sẽ được sở hữu bởi cửa sổ đó.

Tác động của cửa sổ đang được sở hữu được mô tả trong MSDN documentation. Đoạn trích chính:

Là nơi sở hữu một số hạn chế trên cửa sổ.

  • Cửa sổ được sở hữu luôn ở trên chủ sở hữu theo thứ tự z.
  • Hệ thống sẽ tự động phá hủy cửa sổ được sở hữu khi chủ sở hữu của nó bị hủy.
  • Cửa sổ được sở hữu bị ẩn khi chủ sở hữu được giảm thiểu.

Điều quan trọng là lần đầu tiên. Nếu bạn đang gọi ShellExecute từ ứng dụng GUI thì bạn muốn bất kỳ cửa sổ nào được sở hữu bởi cửa sổ hiện đang hoạt động trong ứng dụng của bạn. Vì vậy, vượt qua MyForm.Handle.

Nếu bạn không có giao diện đồ họa trong ứng dụng của bạn sau đó vượt qua 0.

Trong các mẫu mã, cuộc gọi đến ShellExecute không hiển thị bất kỳ giao diện người dùng ở tất cả. Vì vậy, nó làm cho không có sự khác biệt những gì bạn vượt qua. Nhưng nếu các cuộc gọi của bạn dẫn đến một hộp thoại báo lỗi được hiển thị, thì cửa sổ xử lý mà bạn vượt qua sẽ trở nên có liên quan.

Các vấn đề liên quan