设置环境变量的问题

lvlvlvlylyly 2012-10-08 03:24:32
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,LPARAM("Environment"), SMTO_ABORTIFHUNG, 5000, &MsgResult);

我在网上找到很多C#的代码,但是没有vb.net的,这条代码在vb里面是通不过的啊

LPARAM("Environment"),VB里面没有这种写法的,我试着把第四个参数改成string,运行是没问题,但是好象不起作用....
...全文
118 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvlvlvlylyly 2012-10-09
  • 打赏
  • 举报
回复
算了,不搞了,暂时就这样,让程序第一次启动2次算了,以后在安装包里再弄弄,.结贴..
devmiao 2012-10-08
  • 打赏
  • 举报
回复
将ByVal lParam As IntPtr定义成ByVal lParam As String
lvlvlvlylyly 2012-10-08
  • 打赏
  • 举报
回复
如果我不改的话,直接写
lret = SendMessageTimeout(HWND_BROADCAST, WM_WININICHANGE, 0, "Environment", SMTO_ABORTIFHUNG, 5000, lret)

程序就报错,说string转integer失败.
lvlvlvlylyly 2012-10-08
  • 打赏
  • 举报
回复
已经声明了的,但是写出来之后,LPARAM("Environment")这个地方底下有个波浪线,表示有错.


Public Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Integer, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As String, ByVal fuFlags As Integer, ByVal uTimeout As Integer, ByVal lpdwResult As Integer) As Integer

是这样的,我在我的程序里搞了一个oracle的精简版客户端,但是需要修改环境变量,我一开始用安装包,装好之后重启,才能起作用,虽然麻烦点,但是也可以用.

后来想再完善下,不重启,直接修改注册表之后环境变量就可以立即生效.查了些资料,发现要用这个api发一条广播,我试过了,确实是有用的,但是这句代码在我的程序里又确实有问题,为什么这么说呢

因为我发现,我的程序运行之后,第一次的时候,环境变量修改之后,实际上是没有立即生效的,但我把程序关闭一次,再打开,第二次的时候,它就真的起作用了!!(比起重启,注销,已经有进步了.)

所以我肯定这句代码是起作用的,问题是,这个广播好象在我的程序里面,并没有发给自己的程序起作用,我的程序必须要关闭一次...

我仔细查这句代码,老觉得不对头,为什么呢,你看那api,第四个参数是integer,但那个C+的代码,那种写法,vb.net里面是没有的呀,我用的时候,都直接把第四个参数改成了string.但是最后的效果就是必须要把程序关一次..



devmiao 2012-10-08
  • 打赏
  • 举报
回复
<DllImport("user32.dll", SetLastError:=True)> _
Public Shared Function SendMessageTimeout(ByVal hWnd As IntPtr,
ByVal msg As Integer,
ByVal wParam As IntPtr,
ByVal lParam As IntPtr,
ByVal flags As SendMessageTimeoutFlags,
ByVal timeout As Integer,
ByRef result As IntPtr) As IntPtr
End Function

Const HWND_BROADCAST As Integer = &HFFFF
Const WM_SETTINGCHANGE As Integer = &H1A

Public Enum SendMessageTimeoutFlags
SMTO_NORMAL = 0
SMTO_BLOCK = 1
SMTO_ABORTIFHUNG = 2
SMTO_NOTIMEOUTIFNOTHUNG = 8
End Enum

参考

http://stackoverflow.com/questions/9021105/vb-net-compatible-sendmessage-and-sendmessagetimeout-apis
bdmh 2012-10-08
  • 打赏
  • 举报
回复
SendMessageTimeout是一个api函数,不能直接使用,你需要引入后才可以
[DllImport],这个你搞.net的总该知道吧
足球中国 2012-10-08
  • 打赏
  • 举报
回复
看代码好象是vc的。

不象是c#的。

如果是c#的也就是个函数。
vb.net下面也有。
System.Environment .GetFolderPath (Environment.SpecialFolder )
这个c#,vb.net通用。
如果是vc的。看名字这个也可以用。

16,554

社区成员

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

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