1个简单的vb问题,如何让msgbox被自动点击
是这样的,我现在有一个事件,这个事件引发msgbox,msgbox是最简单的那种,只有一个“确定”,我现在不想让人点击确定,而是让程序来做这件事事情,使得msgbox上面...
是这样的,我现在有一个事件,这个事件引发msgbox,msgbox是最简单的那种,只有一个“确定”,我现在不想让人点击确定,而是让程序来做这件事事情,使得msgbox上面的确定被点击,然后msgbox消失,继续下面的程序,请问如何做到啊?
1楼的,我知道要用API,可是如何用啊?给个例子吧,谢谢!再现等
2楼的,是这样的,我在写一个socket程序,总有问题,我在出问题的那个语句上设一个断点,然后一个一个执行就没问题,或者不设断电,加一个msgbox,手动点击确定也没问题。但是当我调api sleep的时候,不管sleep多久,还是会报错,让我很郁闷,msgbox是一种中断,还有别的方法能够实现这种中断效果么?
*******我已经找到了相关的API,msg问题解决了********
*******很感谢各位,尤其是vrhero,你说的很对,我也明白这样不是办法,但是因为马上交活了,想先能用了再说,我对socket了解不多,希望你能给我发一段你所说的方法的例子(VB),就是关于异步执行+CreateThread,最简单的就行,我的mail tinaahou@126.com,我把分数多加了40,只有这些分了******* 展开
1楼的,我知道要用API,可是如何用啊?给个例子吧,谢谢!再现等
2楼的,是这样的,我在写一个socket程序,总有问题,我在出问题的那个语句上设一个断点,然后一个一个执行就没问题,或者不设断电,加一个msgbox,手动点击确定也没问题。但是当我调api sleep的时候,不管sleep多久,还是会报错,让我很郁闷,msgbox是一种中断,还有别的方法能够实现这种中断效果么?
*******我已经找到了相关的API,msg问题解决了********
*******很感谢各位,尤其是vrhero,你说的很对,我也明白这样不是办法,但是因为马上交活了,想先能用了再说,我对socket了解不多,希望你能给我发一段你所说的方法的例子(VB),就是关于异步执行+CreateThread,最简单的就行,我的mail tinaahou@126.com,我把分数多加了40,只有这些分了******* 展开
3个回答
展开全部
可以做到,其实这不是一个简单的问题。我曾经用c做过。而且是处理可能是别的程序的MsgBox. 代码是:
HWND hpop, hbutton;
int nID;
hpop = FindWindow(NULL, "窗口标题"); //根据msgbox的标题寻找其窗口句柄。
if (hpop) { //如果找到了,
hbutton = FindWindowEx(hpop, NULL, "TButton", NULL); //再找类型为按钮的控件句柄。
nID = GetDlgCtrlID(hbutton); //肯定找的到,所以就不判断了,直接转换为id.
SendMessage(hpop, WM_COMMAND, MAKEWPARAM(nID, BN_CLICKED), (LPARAM)hbutton); //送他一个click.
}
FindWindowEx找类型为按钮("TButton"类型. 你VB中可能不一样,可能就是"Button")的控件句柄也可以根据按钮文字来找。
此段子程序应使用Timer每一秒执行一次,只要发现有这个msgbox, 就会给他一个click, 很好用的。
其中所有函数都是API. 如果理解了,转换成VB不会有困难。
同意这样处理Msgbox是治标不治本。在治本有困难时,治治标也未尝不可。
附:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'寻找窗口列表中第一个符合指定条件的顶级窗口
'lpClassName指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示任何类
'lpWindowName指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示任何窗口标题
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hSubWnd As Long, ByVal lpClassName As String, ByVal lpText As String) As Long
'在窗口列表中寻找与指定条件相符的第一个子窗口
'hWnd1在其中查找子的父窗口
'hSubWnd2从这个子窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索
'lpClassName类型名。或设为零表示任何类
'lpText 子窗口标题或文字。或设为零,表示任何窗口标题
HWND hpop, hbutton;
int nID;
hpop = FindWindow(NULL, "窗口标题"); //根据msgbox的标题寻找其窗口句柄。
if (hpop) { //如果找到了,
hbutton = FindWindowEx(hpop, NULL, "TButton", NULL); //再找类型为按钮的控件句柄。
nID = GetDlgCtrlID(hbutton); //肯定找的到,所以就不判断了,直接转换为id.
SendMessage(hpop, WM_COMMAND, MAKEWPARAM(nID, BN_CLICKED), (LPARAM)hbutton); //送他一个click.
}
FindWindowEx找类型为按钮("TButton"类型. 你VB中可能不一样,可能就是"Button")的控件句柄也可以根据按钮文字来找。
此段子程序应使用Timer每一秒执行一次,只要发现有这个msgbox, 就会给他一个click, 很好用的。
其中所有函数都是API. 如果理解了,转换成VB不会有困难。
同意这样处理Msgbox是治标不治本。在治本有困难时,治治标也未尝不可。
附:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'寻找窗口列表中第一个符合指定条件的顶级窗口
'lpClassName指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示任何类
'lpWindowName指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示任何窗口标题
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hSubWnd As Long, ByVal lpClassName As String, ByVal lpText As String) As Long
'在窗口列表中寻找与指定条件相符的第一个子窗口
'hWnd1在其中查找子的父窗口
'hSubWnd2从这个子窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索
'lpClassName类型名。或设为零表示任何类
'lpText 子窗口标题或文字。或设为零,表示任何窗口标题
展开全部
奇怪的想法,既然你不想用户干预为什么要用Msgbox?
最简单就是做个Form,加个Timer定时Unload
补充:
原来如此,你的问题是网络延时和同步执行的问题,加Msgbox是治标不治本因为你不知道网络延时有多久
解决的方法是改用多线程异步执行,调用API函数CreateThread创建一个后台线程进行socket操作,完成操作后通知主线程继续下一步
最简单就是做个Form,加个Timer定时Unload
补充:
原来如此,你的问题是网络延时和同步执行的问题,加Msgbox是治标不治本因为你不知道网络延时有多久
解决的方法是改用多线程异步执行,调用API函数CreateThread创建一个后台线程进行socket操作,完成操作后通知主线程继续下一步
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要用到windows api。哥哥,我不会。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询