user32.dll SendMessage:以大写字符转换的字符串...但区分大小写的字符串

时间:2013-10-30 09:34:42

标签: c# winapi sendmessage user32

我在C#制作了一个程序,从电子身份证(比利时)获取数据信息,没有问题,但我需要将这些信息放在程序的注册表中。 ..那就是我遇到问题的地方......

我成功使用spy ++识别窗口和文本框(并通过FindWindowFindWindowEx方法选择它),但问题是当我发送带有{{1的字符串的字符串时在我的软件中包含大写和小写字符的我的字符串在另一个程序中完全以大写字符显示...我真的需要有大写小写字符和重音字符...我试图把Charset放在Unicode或Ansi中,它没有改变任何东西......有没有人能解决我的问题?非常感谢你的帮助!

以下是使用的代码:

SendMessage

...

[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string className, string lpszWindow);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
private static extern int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, string lParam);

[DllImport("user32.dll", EntryPoint = "SendMessageW", CharSet = CharSet.Unicode)]
static extern IntPtr SendMessageUnicode(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);

private const int WM_SETTEXT = 12;

Here是我在注册表上得到的:

编辑:

感谢您的回答......我使用了xMRi的方法,它完美地运作......

以防这里是用来做这个的代码(因为那里有很多不工作的代码):

IntPtr x = new IntPtr();
IntPtr parent = FindWindow(null, "Formulaire inscription lecteur");
IntPtr child = FindWindowEx(parent, x, "Edit", null);
int q = SendMessage(child, WM_SETTEXT, IntPtr.Zero, "TesT");
// same thing with this://SendMessageUnicode(child, WM_SETTEXT, IntPtr.Zero, "TeSt");

将数据放入另一个程序的唯一问题是“编辑”但链接到sysmonthcal32 ...我试图以不同的形式发送它,覆盖了readonly样式,......似乎没有任何工作..

所有其他“编辑”都填充了我的软件发送的字符串......

http://i.stack.imgur.com/dRaS8.png

有什么想法吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

另一个程序正在将您的文本转换为大写。从你的角度来看,你无能为力。您需要得到其他程序开发人员的帮助。

答案 1 :(得分:0)

使用Spy ++。查看目标窗口。我确信目标编辑控件的样式为ES_UPPERCASE!所以这告诉你角色转换的原因。

您可能会在使用SetWindowLong(GWL_STYLE)时破坏黑客并删除此样式。