digitalmars.D.learn - Accessing LPARAM param from SendMessage acts weird.
- Mark Moorhen (25/25) Nov 04 2018 Another Windows challenge:
- John Chapman (10/35) Nov 04 2018 You need to allocate some memory to receive the string from
- Mark Moorhen (2/2) Nov 05 2018 Brilliant! Thanks John
Another Windows challenge:
I'm trying to get the title of the active window even if it is
from an external application. This is what I've come up with so
far:
<D>
import std.stdio;
import core.sys.windows.windows;
extern (Windows)
void main()
{
HWND foreground = GetForegroundWindow();
const(wchar) title;
int length = SendMessage(foreground, WM_GETTEXTLENGTH, 0, 0);
SendMessage(foreground, WM_GETTEXT, length,
LPARAM(title)); //LPARAM is a Long Pointer
writeln(length);
writeln(title);
}
</D>
Outputs :
27
´┐┐
So the lengt of the foreground windows title should be 27 chars
long, but the title is only 3 chars (and kinda funny ones too:-(
Anyone ideas?
Nov 04 2018
On Sunday, 4 November 2018 at 19:06:22 UTC, Mark Moorhen wrote:
Another Windows challenge:
I'm trying to get the title of the active window even if it is
from an external application. This is what I've come up with so
far:
<D>
import std.stdio;
import core.sys.windows.windows;
extern (Windows)
void main()
{
HWND foreground = GetForegroundWindow();
const(wchar) title;
int length = SendMessage(foreground, WM_GETTEXTLENGTH, 0, 0);
SendMessage(foreground, WM_GETTEXT, length,
LPARAM(title)); //LPARAM is a Long Pointer
writeln(length);
writeln(title);
}
</D>
Outputs :
27
´┐┐
So the lengt of the foreground windows title should be 27 chars
long, but the title is only 3 chars (and kinda funny ones too:-(
Anyone ideas?
You need to allocate some memory to receive the string from
WM_GETTEXT.
auto length = SendMessage(foreground, WM_GETTEXTLENGTH, 0, 0);
auto buffer = new wchar[length + 1]; // +1 for the trailing
null character
SendMessage(foreground, WM_GETTEXT, buffer.length,
cast(LPARAM)buffer.ptr);
auto title = cast(wstring)buffer[0 .. length];
writeln(title);
Nov 04 2018








Mark Moorhen <Mark Moorhen.com>