using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace Find
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("user32.dll ")]
public static extern IntPtr WindowFromPoint(Point Point);
[DllImport("user32.dll ")]
public static extern IntPtr SetWindowTextA(IntPtr a, string b);
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
IntPtr hWnd = WindowFromPoint(Cursor.Position); //获取鼠标指针处窗口的句柄
SetWindowTextA(hWnd, "AAA"); //将hWnd的文本设为AAA
}
}
}
我想用这段代码,将鼠标MousrUp时所在的其它窗口上的控件的标题改为AAA,但是控件的标题却不发生改变,请问问题是出在哪里了?
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace Find
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("user32.dll ")]
public static extern IntPtr WindowFromPoint(Point Point);
[DllImport("user32.dll ")]
public static extern IntPtr SetWindowTextA(IntPtr a, string b);
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
IntPtr hWnd = WindowFromPoint(Cursor.Position); //获取鼠标指针处窗口的句柄
SetWindowTextA(hWnd, "AAA"); //将hWnd的文本设为AAA
}
}
}
我想用这段代码,将鼠标MousrUp时所在的其它窗口上的控件的标题改为AAA,但是控件的标题却不发生改变,请问问题是出在哪里了?
我想完成的功能是能在我的程序里,更改歪歪的昵称。用我上面的代码,只是完成了将控件的显示文本变成了AAA,而自己的昵称还是原来的。纠结了,这是怎么回事呢?难道不能这样模拟更改昵称的操作?
函数功能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口是一个控件,则改变控件的文本内容。然而,SetWindowText函数不改变其他应用程序中的控件的文本内容。
函数原型:BOOL SetWindowText(HWND hwnd,LPCTSTR lpString);
参数:
hWnd:要改变文本内容的窗口或控件的句柄。
lpString:指向一个空结束的字符串的指针,该字符串将作为窗口或控件的新文本。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:如果目标窗口属于当前进程,SetWindowText函数会使WM_SETTEXT消息发送给指定的窗口或控件。然而,如果控件是以WS_CAPTION风格创建的列表框控件,SetWindowText函数将为控件设置文本,而不是为列表项设置文本。 以上是SetWindowText的介绍,在备注里有这么一句:然而,如果控件是以WS_CAPTION风格创建的列表框控件,SetWindowText函数将为控件设置文本,而不是为列表项设置文本。 我现在碰到的是不是就是这种情况?如果是的话,我要怎么样才能为列表项设置文本呢?
public static extern IntPtr SendMessage(IntPtr a, string b,int c,int d);SendMessage(hWnd, "AAA", 0, 0);用这个的话,就一点反应都没有了。
我不是拿来主意,但刚查网页没发现怎么用WM_SETTEXT呀。
自学C#,好多都不懂,谢谢
SendMessage(hWnd, WM_SETTEXT, 0, "AAA");如果是的话,第2个参数报“当前上下文中不存在的名称“WM_SETTEXT””,出现这个是不是和我的版本有关,我用的是framework 4.0。
新手勿笑勿喷,有说的风马牛的地方还请包涵。
啥意思 看不懂 求教!
引用windows api 就要加这个
比如我要引用 windows api里的sendmessage函数,就要在代码中加入如下代码:
[DllImport("user32.dll ")]
public static extern IntPtr SendMessage(IntPtr a, string b,int c,int d);user32.dll是包含sendmessage的库
这么写:
SetWindowTextA(this.Handle, "AAA");
this是当前窗口的form类,没有问题的。
你那么写不行是因为你的事件声明在picturebox上,获取的句柄是picturebox的句柄,所以不行的
显示文本语句后面加这个
目的是做歪歪的字幕软件。就是自己的程序显示一段歌词的同时,会自动改变歪歪的昵称为当前歌词。
pictureBox1_MouseUp事件是为了方便,临时使用的。运行我在0楼贴的代码,在pictureBox1上点下鼠标,在歪歪主窗口的昵称那栏上松开鼠标后,歪歪昵称没有改变,如果将歪歪主窗口隐藏再显示,会发现昵称控件的文本已变成“AAA”。但是这个“AAA”只是表明现象,此时点击昵称的话,“AAA”会自己还原为原来的昵称。查歪歪账号信息,昵称也是仍然没有改变。所以我才会想到可能是我在6楼说的情况。然后7楼说要使用SendMessage WM_SETTEXT。而直接使用WM_SETTEXT参数是不行的,要定义WM_SETTEXT常数,而我没有百度到关于WM_SETTEXT常数应设置为多少。也不知道能不能真正起到作用。
我是为这个软件才学的C#,真的很想把它作完。真心希望高手能指点迷津。
private const int WM_SETTEXT = 0x000C;但是还是没有解决我的问题呀。更改的“AAA”依然是表面,真正的属性没有改变。
控件的句柄是没错的,刚用spy++确定了一下。
我在用spy++确定句柄时发现了一件事。就是我在用程序更改了昵称后,用spy++搜索那个控件,它的标题也是变成了“AAA”的,这说明我的代码应该是可行的。至于为什么不起作用,应该是昵称这个控件比较特殊吧。难道要让我把程序做到伪装成歪歪软件,向服务器发送信息才行吗?网上的同类字幕软件应该不是这样做到的吧!纠了个结呀
然后用0楼的那程序SendMessage,结果textBoxA的Text会改变,并且buttonA相应的显示或隐藏。
我就是我想在YY上实现的,怎么应用到YY上就不起作用呢?