如何隐藏已知句柄的窗口

'以隐藏计算器为例

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Const SW_HIDE As Long = 0

Private Sub Command1_Click()
'启动计算器
Shell "C:/WINDOWS/system32/calc.exe", 1
End Sub

Private Sub Command2_Click()
Dim hwnd As Long
hwnd = FindWindow("SciCalc", "计算器")
If hwnd <> 0 Then
    ShowWindow hwnd, SW_HIDE
    MsgBox "计算器隐藏成功"
End If
End Sub

 

'ShowWindow hWnd, 0  '隐藏  
'ShowWindow hWnd, 5  '显示

### 使用已知窗口句柄进行 GDI 绘图 为了在 C++ 中使用已知窗口句柄 (HWND) 进行 GDI (Graphics Device Interface) 绘图,可以按照以下方法实现。这涉及到获取设备上下文 (DC),创建绘图工具(如画笔、字体),以及执行实际的绘制操作。 #### 获取设备上下文 首先需要获得目标窗口的设备上下文 (HDC): ```cpp #include <windows.h> // 假设 hwnd 是已经存在的窗口句柄 HWND hwnd; PAINTSTRUCT ps; // BeginPaint 函数通常用于响应 WM_PAINT 消息时获取 DC HDC hdc = BeginPaint(hwnd, &ps); if (!hdc) { // 处理错误情况 } ``` 如果不在 `WM_PAINT` 消息处理程序中,则可使用 `GetDC` 或者 `GetWindowDC` 来取得整个客户区或整窗体的 DC[^1]。 #### 创建和选择绘图对象 接下来创建所需的绘图对象并将它们选入 DC: ```cpp HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0)); // 创建红色实线画笔 SelectObject(hdc, hPen); HBRUSH hBrush = CreateSolidBrush(RGB(0, 255, 0)); // 创建绿色填充刷子 SelectObject(hdc, hBrush); ``` #### 执行绘图操作 现在可以在指定区域内开始绘画了。例如,绘制矩形框: ```cpp Rectangle(hdc, 50, 50, 200, 150); // 左上角坐标为 (50, 50), 右下角坐标为 (200, 150) Ellipse(hdc, 300, 50, 450, 150); // 绘制椭圆 TextOut(hdc, 50, 200, L"Hello Windows!", 17); // 输出文字字符串 ``` 完成所有绘图工作之后记得释放资源并结束绘图过程: ```cpp DeleteObject(hPen); DeleteObject(hBrush); EndPaint(hwnd, &ps); // 如果是通过 BeginPaint 获得 HDC 的话 ReleaseDC(hwnd, hdc); // 若是用 GetDC/GetWindowDC 得来的则应调用此函数 ``` 上述代码片段展示了基本的 GDI 绘图流程,在实际应用中可能还需要考虑更多细节比如双缓冲技术防止闪烁等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值