要录入点数据,用了句柄,可一执行就假死

jdczp 2016-09-20 10:48:08
事情是这样的,一个程序不能导入,只能手工录,于是就用了句柄,录入界面有两三个界面,单个界面我都弄好了,但是界面与界面跳转就假死了,实在不知道是什么原因了。

比如,录一些数据,就点确定,然后就弹出确定对话框,这是我的程序就假死了,也不继续执行点这个按扭了。

望大侠帮忙
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2016-09-21
  • 打赏
  • 举报
回复
具体的代码是什么,postmessage的么
  • 打赏
  • 举报
回复
SendMessage(hWnd1, WM_LBUTTONUP, (IntPtr)0, null); SendMessage会等待消息处理,所以会阻塞,导致你的程序假死 如果直接用PostMessage,你的程序不会假死了,但是对方可能还没来得及弹出窗 IntPtr hWnd7 = FindWindow(null, "提示");就找不到了,这里需要一个类似“自旋锁”的机制去找提示对方框的句柄 比如
PostMessage(hWnd1, WM_LBUTTONUP, (IntPtr)0, null);
IntPtr hWnd7 = IntPtr.Zero;
for(int i = 0; hWnd7== IntPtr.Zero && i< 10; i++)
{
      Thread.Sleep(200);
       hWnd7 = FindWindow(null, "提示");
}
或者用
IntPtr lpdwResult;
//等等消息处理或超时2秒
var result = SendMessageTimeout(hWnd1, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero,
0x0001 | 0x0002,    //SMTO_BLOCK(等待返回) | SMTO_ABORTIFHUNG (若目标窗口无响应则立即返回)
2000,
out lpdwResult;)
if(result != 0)
{
      IntPtr hWnd7 = FindWindow(null, "提示");
}

[DllImport("user32.dll", SetLastError = true)]                                                //发送消息后直到目标窗口处理完成或者超时后返回
public static extern int SendMessageTimeout(IntPtr hWnd, uint WM_CHAR, IntPtr wParam, IntPtr lParam, uint fuFlags, int uTimeout, out IntPtr lpdwResult);
  • 打赏
  • 举报
回复
SendMessage(hWnd1, WM_LBUTTONDOWN, (IntPtr)0, null); Thread.Sleep(1000); SendMessage(hWnd1, WM_LBUTTONUP, (IntPtr)0, null);
  • 打赏
  • 举报
回复
还有就是要确认下你的查找、提示句柄和sendmessage都是正确的!
  • 打赏
  • 举报
回复
引用 3 楼 jdczp 的回复:
IntPtr hWnd1 = FindWindowEx(hWnd, IntPtr.Zero, null, "查找"); SendMessage(hWnd1, WM_LBUTTONDOWN, (IntPtr)0, null); SendMessage(hWnd1, WM_LBUTTONUP, (IntPtr)0, null); 运行到这里提示对话框弹出来,我自己的程序就假死了 这时可以自己手动点是自己的程序又可以继续 IntPtr hWnd7 = FindWindow(null, "提示"); IntPtr hWnd8 = FindWindowEx(hWnd7, IntPtr.Zero, null, "是(&Y)"); SendMessage(hWnd8, WM_LBUTTONDOWN, (IntPtr)0, null); SendMessage(hWnd8, WM_LBUTTONUP, (IntPtr)0, null);
上下执行之间没有时间间隔,而程序是不会等你出现“提示”对话框再执行的,建议你在timer里执行:
private void button1_Click(object sender, EventArgs e)
        {
            //这里添加你执行弹出对话框的代码
            //×××××××

            time1.Start();//抓取句柄
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
			IntPtr hWnd=FindWindow(null,"***");//你的句柄?
			if(hWnd!=IntPtr.Zero)
			{
			    IntPtr hWnd1 = FindWindowEx(hWnd, IntPtr.Zero, null, "查找");
                SendMessage(hWnd1, WM_LBUTTONDOWN, (IntPtr)0, null);
                SendMessage(hWnd1, WM_LBUTTONUP, (IntPtr)0, null);
			}

            IntPtr hWnd7 = FindWindow(null, "提示");
            if (hWnd7!=IntPtr.Zero)
            {
                IntPtr hWnd8 = FindWindowEx(hWnd7, IntPtr.Zero, null, "是(&Y)");
                SendMessage(hWnd8, WM_LBUTTONDOWN, (IntPtr)0, null);
                SendMessage(hWnd8, WM_LBUTTONUP, (IntPtr)0, null);
                timer1.Stop();
            }
		}
jdczp 2016-09-21
  • 打赏
  • 举报
回复
IntPtr hWnd1 = FindWindowEx(hWnd, IntPtr.Zero, null, "查找"); SendMessage(hWnd1, WM_LBUTTONDOWN, (IntPtr)0, null); SendMessage(hWnd1, WM_LBUTTONUP, (IntPtr)0, null); 运行到这里提示对话框弹出来,我自己的程序就假死了 这时可以自己手动点是自己的程序又可以继续 IntPtr hWnd7 = FindWindow(null, "提示"); IntPtr hWnd8 = FindWindowEx(hWnd7, IntPtr.Zero, null, "是(&Y)"); SendMessage(hWnd8, WM_LBUTTONDOWN, (IntPtr)0, null); SendMessage(hWnd8, WM_LBUTTONUP, (IntPtr)0, null);
Justin-Liu 2016-09-21
  • 打赏
  • 举报
回复
处理的数据多吗?
标题付费自习室管理系统的设计与实现研究AI更换标题第1章引言介绍付费自习室管理系统的研究背景、意义、国内外发展现状及论文创新。1.1研究背景与意义阐述付费自习室兴起背景及管理系统的重要性。1.2国内外发展现状分析国内外付费自习室及其管理系统的发展情况。1.3论文研究方法及创新概述本文采用的研究方法及系统设计的创新之处。第2章相关理论总结和评述与付费自习室管理系统相关的现有理论。2.1管理信息系统理论介绍管理信息系统的基本概念、构成及作用。2.2用户需求分析理论阐述用户需求分析的方法和步骤。2.3系统设计理论介绍系统设计的原则、方法和流程。第3章付费自习室管理系统需求分析详细描述付费自习室管理系统的功能需求和非功能需求。3.1功能需求分析分析用户管理、座位预订、费用结算等核心功能需求。3.2非功能需求分析阐述系统性能、安全性、易用性等非功能需求。3.3用户调研与反馈介绍用户调研方法及收集到的用户反馈意见。第4章付费自习室管理系统设计详细介绍付费自习室管理系统的设计方案和实现过程。4.1系统架构设计给出系统的整体架构、模块划分及交互流程。4.2数据库设计设计数据库结构,包括表结构、字段定义及关系。4.3界面设计展示系统界面设计,包括布局、色彩搭配及交互元素。第5章付费自习室管理系统实现与测试阐述付费自习室管理系统的实现过程和测试结果。5.1系统实现技术介绍系统开发所采用的技术栈和工具。5.2系统测试方法阐述系统测试的方法、步骤及测试用例设计。5.3系统测试结果与分析展示系统测试结果,包括功能测试、性能测试等,并进行分析。第6章结论与展望总结本文的研究成果,并对未来研究方向进行展望。6.1研究结论概括付费自习室管理系统的设计成果及实施效果。6.2展望指出系统存在的不足及未来改进方向,提出后续研究建议。
标题宾馆客房管理系统的设计与实现研究AI更换标题第1章引言介绍宾馆客房管理系统的研究背景、研究意义、国内外研究现状、论文方法及创新。1.1研究背景与意义阐述宾馆客房管理系统对提升管理效率和服务质量的重要性。1.2国内外研究现状分析国内外宾馆客房管理系统的研究现状与发展趋势。1.3研究方法及创新概述本文采用的研究方法及系统设计的创新之处。第2章相关理论介绍宾馆客房管理系统设计涉及的相关理论和技术。2.1数据库管理理论阐述数据库设计的基本原理和管理方法。2.2软件开发理论介绍软件开发的基本流程和项目管理方法。2.3用户界面设计理论讨论用户界面设计原则和用户体验优化方法。第3章宾馆客房管理系统需求分析详细分析宾馆客房管理系统的功能需求和性能需求。3.1功能需求分析列举系统应具备的主要功能,如预订、入住、退房等。3.2性能需求分析分析系统在响应时间、并发处理等方面的性能要求。3.3用户需求分析从用户角度出发,分析用户对系统的期望和需求。第4章宾馆客房管理系统设计详细介绍系统的整体架构和各个模块的设计方案。4.1系统架构设计给出系统的整体架构图,包括前端、后端和数据库等部分。4.2数据库设计详细介绍数据库的设计方案,包括表结构、字段设置等。4.3模块设计分别介绍各个模块的设计思路和功能实现方法。第5章宾馆客房管理系统实现与测试介绍系统的实现过程和测试方法,验证系统的功能性和性能。5.1系统实现阐述系统的开发环境、开发工具和实现步骤。5.2系统测试介绍系统的测试方法、测试用例和测试结果。5.3性能优化根据测试结果,对系统进行性能优化和改进。第6章结论与展望总结本文的研究成果,并对未来研究方向进行展望。6.1研究结论概括本文的主要研究成果和系统的实际应用效果。6.2展望指出系统存在的不足之处和未来改进的方向。

111,118

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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