C#求大神给看看,句柄没问题,可以SengMessage,getGetWindowText取不到值

C#求大神给看看,句柄没问题,可以SengMessage,为什么不能getGetWindowText取不到值

[DllImport("user32.dll", EntryPoint = "GetWindowText")]
public static extern int GetWindowText(IntPtr hwnd, string lpString, int cch);

    private void timer1_Tick(object sender, EventArgs e)
    {
        string s = "";
        int i = GetWindowText(curr_hWnd, s, 10);
        if (s != "")
        {
            this.timer1.Stop();
            MessageBox.Show(s);
        }
    }

1个回答

int WINAPI GetWindowText(
  _In_  HWND   hWnd,
  _Out_ LPTSTR lpString,
  _In_  int    nMaxCount
);

微软对GetWindowText的定义是这样的。在调用的时候,lpString是一个缓冲区,它是必须有长度的,而它的长度是nMaxCount,也即使告诉Windows,别写超过nMaxCount长的字符串到lpString里面去。
看你的调用方式,s="",也就是说0长度的字符串。然后调用的时候给了他一个10个长度,说是你的缓冲区最大长度。别说不给你数据,它不跳一个异常出来我已经觉得很惊讶了。
正确的用法是:先初始化你的s,给它一定的长度,比如说用255个空格来初始化它。然后去调用,调用的时候长度就填255.
另外,你的i是返回值,但是扔在一边不用。这个返回值是告诉你返回的字符串的长度(是字节数,不是Unicode的字符数)。虽然有'\0'作为字符串的结束符,但是遇到多字节的是有可能出问题的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
combobox用getwindowtext的方法取不到text,得用SendMessage才行
SendMessage(hchild, WM_GETTEXT,256, integer(@strCaption) );
在Javascript 中给label控件的 innerHTML 赋值,在后台获取不到 text值
<br /><script language="javascript" type="text/javascript"><br />    function qingkong()<br />var weight = document.getElementById("<%=lbl_Weight.ClientID%>").outerText;<br />            var higherScore = document.getElementById("<%= txt_HigherScore.Client
使用Spy++获取的句柄值
<br />//HWND hone=::FindWindow(NULL,_T("百度搜索_UPS响声 - Windows Internet Explorer"));<br /> <br />HWND   hone=(HWND)0x000102B2;//0x000102b2是从SPY++中的窗口句柄得到的,他是一个地址值,补还原后可以强制转换为句柄类型<br /> <br />bool b=::CloseWindow(hone);
利用WM_GETTEXT消息获取谷歌浏览器地址栏内容。
所有要用到的API [DllImport("user32.dll")] public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("User
根据spy++句柄给某程序控件赋值
根据spy++句柄获取某程序控件 使用SendMessage发送文本赋值到控件中
易语言读不出来mysql的数据的原因
为什么易语言读不出来mysql的数据本人刚开始学习易语言,希望能够把在学习过程中获得知识点或者一些难点搜集,整理分享给大家,也希望能够结交一下技术上的朋友,我现在技术不是很好,但是自己真的很喜欢技术,所以自己正在努力。我的QQ:2827260850。 下面是为什么易语言读不出来mysql数据的代码与原因: `.版本 2 .支持库 mysqlmysql句柄 = 连接MySql (“”, “”,
.net控件页面处用js赋值后台接收不到数据的解决方案
我的问题                                                                                                         我使用了  目的是点击文本框弹出一个js的日期控件。如图1 (图1) 选取日期后后台使用如下后台代码接收参数 String sEndDate = txtEndDat
spy++只能读取主窗口句柄而无法读取到子控件句柄的原因
看望DIRECTUI简介就明白了: DirectUI意为直接在父窗口上绘图(Paint on parent dc directly)。即子窗口不以窗口句柄的形式创建(windowless),只是逻辑上的窗口,绘制在父窗口之上。微软的“DirectUI”技术广泛的应用于Windows XP,Vista,Windows 7,如浏览器左侧的TaskPanel,控制面板导航界面,Media Player...
C# 根据句柄, 实现向另一应用程序填写数据实现登录
C#模拟鼠标键盘控制其他窗口 很多时候,编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口。比如,操作飞信定时发送短信、登陆旺旺、QQ 等。本程序用C#语言实现,根据句柄, 实现向另一应用程序填写数据实现登录。
c#通过SendMessage发送消息,改变其他程序的下拉框控件(ComboBox)的值
IntPtr mwh = (IntPtr)Convert.ToInt32(handle);                         //ComboBox的句柄int result = SendMessage(mwh, 0x014D, -1, selectStr);            //改变ComboBox的值,selectStr为预期的下拉框选项int mwh_p = GetWi
使用HWND获得EDIT句柄后GetWindowText的经验
GetWindowText获取数据有限制,也不是像上面说的不能获取其他程序里的内容.估计是特殊的例如加密和只读的不可以. char szText[255] = {0};用SendMessage(hwnd,WM_GETTEXT,MAX_PATH,(LPARAM)buf);
asp.net c# 在一般处理程序中不能获取Session值
解决方法: 1:头部引入 using System.Web.SessionState; 2:下来就可以集成上边命名空间底下的”IRequiresSessionState“接口了。 如: public class minus : IHttpHandler, IRequiresSessionState ok ,下了你就可以通过HTTPContext 的方式获取你的
关于C#中的Request.QueryString.get()获取不到值的问题
特么让我整整研究了一天,为何Request.QueryString对象中debug时显示有值,但是用Request.QueryString.get()时就是拿不到值,最终原因尽然是页面多写空格的原因 错误: 当然也有一点小收获,更加了解了Request.QueryString这个对象及其一些误区,参考如下文章:作者 文章: 关于request.querystring()的理解
MFC中通过SendMessage修改Edit控件的文本
通过Windows API可以方便地实现。 3步走: 1、 HWND   hWnd   =   ::FindWindow(NULL,"showPicture");
ASP.Net 关于前台JS给input赋值后,runat="server" 后台利用ID.Value还是获取不到的问题
hidden  获取不到,但是alert()出来有值! 获取到: 区别竟然在”Value“与”value“,一个晚上白白浪费了!!!!!!! 我不知道这是不是根本原因!
C#通过API获取接收数据窗体控件句柄,并向该句柄发送文本信息
将一组数据自动写到第三方的界面上,通过鼠标拖拽传值到数据接收界面,代替手工录入。
jquery根据id取不到textarea对象,无法给textarea赋值
小编定义了一个textarea控件,却无法根据id取到textarea对象并赋值。 经过实验,得出了原因。截图如下:                          之所以出现无法根据ID取得textarea的情况,是因为定义id时与class写在了一起。如果将id写在rows或cols的前面,或者写在class的后面,则都是可以通过ID取得textare控件的。
已知窗口的句柄,怎么发送消息使之…
pWnd->ShowWindow(SW_SHOWMAXIMIZED); m_pMainWnd-> ShowWindow(SW_SHOWMAXIMIZED); 即可。 ShowWindow(SW_SHOWMINIMIZED);//最小化 ShowWindow(SW_SHOWMAXIMIZED);//最大化 ShowWindow(SW_RESTORE);//还原 ------- PostMessag
Delphi获取句柄并发送消息!
Delphi获取句柄并发送消息查找另外一个窗口的句柄: handle := FindWindow(nil,PChar(窗口的标题));//查到窗体句柄查找子窗体:childHandle := FindWindowEx(handle,0,子窗体类,子窗体标题); 另外有个枚举子窗体的API,EnumChildWindows(主创体句柄,@回调函数,用户参数);用这个函数需要自己写一个
解决TextBox无法获得修改后的值
<br />如下代码所示,在Page_Load中给TextBox赋值后,无论后来输入什么值,点击Button1,Label1.Text都等于初始值“测试数据”,不能更新文本框的值!<br /> <br />private void Page_Load(object sender, System.EventArgs e)<br />    {<br />        TextBox1.Text = "测试数据";<br />    }<br /><br />    private void Button1_
JS给文本框赋值后,在页面后台取不到文本框值的解决方法
转自:http://www.cnblogs.com/qiaohd/archive/2012/03/23/2413660.html 开发一个asp.net的页面遇到了TextBox设置了ReadOnly属性,在js中赋值后,后台代码取不到值的情况,经过在网上查找,找到了一下几个处理办法。 收藏起来。 1、不设置ReadOnly,设置onfocus=this.blur() C#代码
ASP.NET 中TextBox设置ReadOnly或者Disable后获取不到值的解决办法
<br />设置为ReadOnly或者Disable的TextBox 控件,在cs文件中无法获取其值<br />以下为几种解决办法<br />1.在.cs代码中设置TextBox的属性 例如<br /> txtName.Attributes["readonly"] = "true";<br /><br /><br />2.不设置TextBox的ReadOnly为true,给该控件加上验证控件进行验证<br /><br /><br />3.在TextBox的HTML标签中加入ContentEditable="
C#取三个数的最大值、最小值、平均值、中间值
1、 class Program { static void Main(string[] args) { double a = Convert.ToDouble(Console.ReadLine()); double b = Convert.ToDouble(Console.ReadLine());
获取DLL的模块的句柄的简单方法
获取DLL的模块的句柄,在不确定DLL名称或者不能直接使用DllMain的参数时,可以使用以下伪代码来获取Dll的模块句柄:extern "C" IMAGE_DOS_HEADER __ImageBase;HMODULE hDll = reinterpret_cast(&__ImageBase);
PHPStorm中$_POST和$_FILES取不到值问题
今天晚上被这个问题一直困扰,研究了好久终于找到原因了。是端口号的问题。必须设置PHPStorm与Apache端口一致,才能使用。特此记录。 PHPStorm端口设置:
通过api获取句柄控制其他窗体
很多时候,编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口。比如,操作飞信定时发送短信等。我之前开发过飞信耗子,用的是对飞信协议进行抓包,然后分析协议,进而模拟协议的执行,开发出了客户端,与移动服务器进行通信,但是这有一些缺点。如果移动的服务器对接口进行变更,我所编写的客户端也要进行相应的升级。如果服务器的协议进行了更改,甚至个人编写的这种第三方客户端需要重写。而
C#winform webBrowser 实现抓句柄 想输入框中输入内容(笔记)
Win32ApiWrapper类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace projectfortab4 { public class Win32ApiWrap
如何得到句柄和句柄对应的内存
先来看些权威的片断: ... typedef unsigned int HANDLE; #define DECLARE_HANDLE(name) typedef UINT name DECLARE_HANDLE(HMODULE); DECLARE_HANDLE(HINSTANCE); DECLARE_HANDLE(HLOCAL); DECLARE_HANDLE(H
c#获取不到隐藏控件的值
     保存前将一些值保存在隐藏控件中,隐藏控件设置runat=server 但在后台用c#取不到隐藏控件的值,感到非常奇怪,检查很久才发现 在页面写隐藏控件的时候一不小心写到了runat=server的form外面了,马上将隐藏控件移到了form里面,值就能取到了。
Request.Params引起的获取不到参数值
今天很奇怪的发现了.net Request.Params获取参数失败,改成Request.QueryString就正常了。运行环境是.net4.0。今天的BUG来自于本人只是短浅的了解只用来接收参数而已,没发现原来使用起来还真不一样。先让我们了解一下request.params其实是一个集合,它依次包括request.querystring、request.form、request.cookies...
从子窗口中获取父窗口的句柄例子
HWND hTemp=::GetParent(this->GetSafeHwnd());//GetSafeHwnd()会返回当前窗口的句柄,GetParent(子句柄)这个函数将获得子句柄的父窗口的句柄 while(hTemp) { HWND hParent=hTemp; hTemp=::GetParent(hParent); if(!hTemp) { ::SendMessage(h
c#已知窗口句柄获取窗口标题的方法
c#已知窗口句柄获取窗口标题的方法,让你通过已知的窗口句柄获取窗口标题
获取网页句柄
#coding:utf-8 from selenium import webdriver from time import sleep ff=webdriver.Firefox() ff.implicitly_wait(10) ff.get(r"http://www.baidu.com") #获得百度搜索窗口句柄 handle1
HttpContext.Current.Request.Files后台取不到值的解决方法
上传文件的东东, 前台是3个INPUT: 在后台遍历 HttpFileCollection   files     =   HttpContext.Current.Request.Files; int   mm   =   file
C# string类型转换成 指针类型或者句柄
一般对于char* ,void*这种可以直接对应IntPtr,比如在C#中,我们经常用string类型,其转换为IntPtr再传给char*,void*等,转换方法为 string txt="test"; Marshal.StringToCoTaskMemAuto(txt);
ASP.NET(C#)中将TextBox控件的Readonly属性设置为True时后台直接取值取不到的解决方案
当TextBox设置了ReadOnly="true" 后,要是在前台为控件添加了值,后台是取不到的,值为“空”。经过尝试,发现可以通过如下的方式解决这个问题: 方法一:不设置ReadOnly属性,通过onfocus=this.blur()来模拟,如下:
在C#中怎样利用句柄发送消息
用C#调用Windows API向指定窗口发送 一、调用Windows API。  C#下调用Windows API方法如下:  1、引入命名空间:using System.Runtime.InteropServices;  2、引用需要使用的方法,格式:[DllImport("DLL文件")]方法的声明;  [DllImport("user32.dll")]private 
springMVC使用ModelMap存值时,Jsp页面取不到值
昨天需要同步获取数据时,在jsp页面一直获取不到数据,百度了好久也没找合适的办法,下午突然发现有一篇文章解决了我的问题;百度最多的就是在jsp页面添加&amp;lt;%@ page isELIgnored=&quot;false&quot; %&amp;gt; 或者在&amp;lt;%@ page contentType=&quot;text/html;charset=UTF-8&quot;  sELIgnored=&quot;false&quot; %&amp;gt; 不过我加没加都一...
在C#中利用句柄发送消息
用C#调用Windows API向指定窗口发送 一、调用Windows API。  C#下调用Windows API方法如下:  1、引入命名空间:using System.Runtime.InteropServices;  2、引用需要使用的方法,格式:[DllImport("DLL文件")]方法的声明;  [DllImport("user32.dll")]private
Request.QueryString取不到值的问题或者取值错误 或者有的取的到有的取不到的问题的解决.
 globalization   requestEncoding="gb2312"   responseEncoding="gb2312"  /> system.web>就是在行行前加一行如上的就行了. 如果还是不行,就把第一行,改成如下的样子. 非常管用,大家如有类似问题可以一试.xml version="1.0" encoding="gb2312" ?>
相关热词 c#二进制字符转字节 c# rc4 c#中md5加密 c# 新建mvc项目 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字