为什么记事本窗口不能透明处理

yunlovejia 2010-06-21 03:32:25

Dim sysFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.System)
Dim pInfo As New ProcessStartInfo()

pInfo.FileName = IO.Path.Combine(sysFolder, "Notepad.exe")
If Not IO.File.Exists(pInfo.FileName) Then
MsgBox("找不到‘" & pInfo.FileName & "’文件!", MsgBoxStyle.OkOnly)
Exit Sub
End If

Dim p As Process = Process.Start(pInfo) '运行该文件
p.WaitForInputIdle() '等待程序装载完成

SetWindowPos(p.MainWindowHandle.ToInt32, -1, 0, 0, 0, 0, 3) '窗口最前


Dim preStyle As Long = GetWindowLong(p.MainWindowHandle, GWL_EXSTYLE) '取得当前窗口属性
SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, preStyle And WS_EX_LAYERED) '加上一个透明属性

On Error Resume Next
SetLayeredWindowAttributes(p.MainWindowHandle, 0, 100, LWA_ALPHA)
p.WaitForExit() '等待进行程退出


上以代码运行后,记事本没有透明效果。
求高手指点一下。
...全文
251 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2010-06-29
  • 打赏
  • 举报
回复
命题就是错误的,哪来的答案…………


我用 VB6 试了,完全没问题。
看了楼主的代码,我倒觉得有点怪:

为什么 SetWindowPos() 时,窗体句柄用的是 p.MainWindowHandle.ToInt32
而后面的几个 API 中,窗体句柄却是 p.MainWindowHandle 呢?
你在调用 GetWindowLong() 时,怎么不检查是否执行成功呢?

还有一个明显的逻辑错误就是:‘加上一个透明属性’,肯定是用 Or 而不是用 And 啊。

subMain 2010-06-23
  • 打赏
  • 举报
回复
Mark
JOCKTO 2010-06-23
  • 打赏
  • 举报
回复
我也想试试。。。
yunlovejia 2010-06-22
  • 打赏
  • 举报
回复
SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, preStyle Or &H80)
SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, preStyle Or WS_EX_LAYERED)
两个都没有效果。
dylike 2010-06-21
  • 打赏
  • 举报
回复
GWL_EXSTYLE, preStyle or &80
兔子-顾问 2010-06-21
  • 打赏
  • 举报
回复
try

preStyle or WS_EX_LAYERED

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧