有关SetWindowLong函数的问题

gistl 2006-07-31 05:39:53
有一个软件的主窗体是对话的样式,标题栏上只有关闭按钮,启动后不在任务栏上显示。现在我想通过API函数SetWindowLong将其设置为在任务栏上可见,不知参数如何设置,相应常数如何定义?
...全文
609 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsftest 2006-08-04
  • 打赏
  • 举报
回复
一样的,只要你shell的时候注意一下参数就可以了。。。。。。。:
Dim s1 As Long
Dim t1 As Long
Dim pid As Long
pid = Shell("F:\Trancoor.exe", vbNormalNoFocus)
s1 = FindWindow("ThunderRT6FormDC", "坐标转换")
If s1 = 0 Then
MsgBox "错误"
Else
lWnd = GetWindowLong(s1, GWL_EXSTYLE)
lWnd = lWnd Or (WS_EX_APPWINDOW)
SetWindowLong s1, GWL_EXSTYLE, lWnd
AppActivate "坐标转换"
gistl 2006-08-04
  • 打赏
  • 举报
回复
不好意思,我是要在我自己写的程序中启动那个小软件,用shell启动的:
pid = Shell("d:\xxx.exe", 1)
然后再用上贴代码改变窗体样式,这样的话,用AppActivate激活是不起作用的。

如果手工事先单独启动那个小软件,则用上贴方法是有效的。
lsftest 2006-08-04
  • 打赏
  • 举报
回复
其实就是通知任务栏刷新。。。应该有比较正规的方法如发消息,通过ie接口之类,不过估计都不如上面的简单。。。就偷一下懒吧。。。。。。
gistl 2006-08-04
  • 打赏
  • 举报
回复
感谢lsftext教授,以前我也试过shell的各种参数,从0到6都试过,感觉0和4跟1没有什么区别,0是隐藏,4是没有焦点不激活,但每次打开后都被自动激活,也不能隐藏,所以认为0和4是不起作用的,不过之前没用过AppActivate,没想到与这个命令配合,参数4能发挥作用。也不知是为什么?
gistl 2006-08-03
  • 打赏
  • 举报
回复
已发到lsftest@163.com邮箱中
lsftest 2006-08-03
  • 打赏
  • 举报
回复
最简单的方法就是用appactivate激活它:
Private Sub Command1_Click()
Dim s1 As Long
Dim t1 As Long
s1 = FindWindow("ThunderRT6FormDC", "坐标转换")
If s1 = 0 Then
MsgBox "错误"
Else
lWnd = GetWindowLong(s1, GWL_EXSTYLE)
lWnd = lWnd Or (WS_EX_APPWINDOW)
SetWindowLong s1, GWL_EXSTYLE, lWnd
AppActivate "坐标转换"
End If
End Sub
gistl 2006-08-03
  • 打赏
  • 举报
回复
又发了一个附加程序,我是XPSP2系统,试试再不行的话,你用VB生成一个不在任务栏显示的对话框窗体程序,也是一样的。
  • 打赏
  • 举报
回复
程序发过来
sky0904@163.com
lsftest 2006-08-03
  • 打赏
  • 举报
回复
运行不了。。。。。。。。出来一个dos窗口然后就出错。。。。。。
cxxylce1 2006-08-03
  • 打赏
  • 举报
回复
应该设置 WS_EX_APPWINDOW,另外,ShowInTaskbar是运行时只读的,不可行.
lsftest 2006-08-02
  • 打赏
  • 举报
回复
A程序大吗???如果不大发过来我有时间帮你试试。。。。。。。
lsftest@163.com
gistl 2006-08-02
  • 打赏
  • 举报
回复
到此问题已经解决了一大半,还有一小半不知能否解决。
为了表述方便,设A为一个对话框式的单窗口可执行程序(没有源程序),需要自己写一个程序(称为B),先用shell启动A,然后用SetWindowLong更改A的窗体样式,使A能在任务栏上显示,方便切换。
现在的问题是:必须关闭或最小化B后,A才能在任务栏中显示,否则,A不会显示在任务栏中。如果先将A最小化,则A便会隐藏起来,再也找不到。
lsftest 2006-08-02
  • 打赏
  • 举报
回复
试试:
s1 = FindWindow("窗体名",vbNullString)
if s1=0 then
msgbox "错误"
else
lWnd = GetWindowLong(s1,GWL_EXSTYLE)
lWnd = lWnd not (WS_EX_TOOLWINDOW)
lWnd = lWnd or (WS_EX_APPWINDOW)
SetWindowLong s1, GWL_EXSTYLE, lWnd
end if
未经测试。。。。。。
gistl 2006-08-02
  • 打赏
  • 举报
回复
以上代码仍然不能让窗体在任务栏中出现,应该与WS_EX_APPWINDOW这个参数有关,麻烦aspower再帮忙试试。
一笑拔剑 2006-08-02
  • 打赏
  • 举报
回复
s1 = FindWindow(vbNullString, "窗体名")

lWnd = GetWindowLong(s1, GWL_STYLE)
lWnd = lWnd And not (WS_EX_TOOLWINDOW)
SetWindowLong s1, GWL_HWNDPARENT, WS_EX_TOOLWINDOW
gistl 2006-08-01
  • 打赏
  • 举报
回复
以上页面之前也看过,不过他讲的是在自已的程序中的方法,我现在是要改变已经起动的对话框窗体的属性。
gistl 2006-08-01
  • 打赏
  • 举报
回复
请问如何查看窗体有没有WS_EX_TOOLWINDOW的扩展风格,如何去掉?
lsftest 2006-08-01
  • 打赏
  • 举报
回复
http://dev.csdn.net/article/17/17482.shtm
lsftest 2006-07-31
  • 打赏
  • 举报
回复
用getwindowlong看看窗体有没有WS_EX_TOOLWINDOW的扩展风格,如果有就用setwindowlong去掉。。
gistl 2006-07-31
  • 打赏
  • 举报
回复
对一个已经启动的对话框窗体,可以用SetWindowLong修改最大化及最小化按钮等,修改ShowInTaskbar属性不知是否可行?
加载更多回复(2)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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