Archief - [PROG]-[C++] PostMessage naar notepad

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

The Crazy Frog

Legacy Member
Hi all,

Onlangs ben ik begonnen met c++ op aanraden van een vriend.
Het bevalt mij wel, dus bennek begonnen met wat moeilijkere dingen.
Kheb de winprog.org tutorial gedaan enzo en nu bennek wat aan het experimenteren met PostMessage().
Ik probeer wat text in notepad te zetten, maar het lukt niet echt.
Kheb winspector gebruikt om de messages te bekijken en WM_DESTROY versturen lukt al, maar text in de editbox zetten lukt niet.
Hier is de code:

Code:
HWND hNotepad = FindWindow("Notepad", NULL);
if(hNotepad){
	//PostMessage(hNotepad, WM_DESTROY, NULL, NULL);
	HWND hEditBox = GetDlgItem(hNotepad, 15);
	PostMessage(hEditBox, WM_SYSKEYDOWN, 0x00000012, 0x00000001);
	PostMessage(hEditBox, WM_SYSKEYUP, 0x00000012, 0x00000001);
}else{
	MessageBox(hwnd, "Notepad not found, Open Notepad!", "Error", MB_OK);
}

Kheb al gegoogle't enzo en kheb het ook al aan die c++ vriend gevraagd, maar die weet het blijkbaar ook niet.
Verder gebruik ik MSVC++ 2003.

Kan er iemand mij vertellen wat ik verkeerd doe? Thx :help:

fretn

Legacy Member
moet je niet alle childwindows enumeraten om zo het tekstveld vast te krijgen ?

'k herinner me vaag van een stuk code om in de console van quake3 te schrijven, dat je eerst met findwindow() het console vensterke moest zoeken, en dan moest je nog met één of andere enum functie de childwindows (tekstvelden, buttons, ...) overlopen om zo het tekstveld te vinden

The Crazy Frog

Legacy Member
Maar als ge nen enum maakt en ge gebruikt da in een functie, dan verstuurt ie toch gewoon de waarde van die enum naar de functie.
Want enum's zijn afaik een beetje gelijk #define's.
Maar bon, kga nog keer goe zoeken :)

dJeez

Legacy Member
Kan je niet veel eenvoudiger werken door een geautomatiseerde copy/paste via het clipboard?

The Crazy Frog

Legacy Member
dJeez zei:
Kan je niet veel eenvoudiger werken door een geautomatiseerde copy/paste via het clipboard?
Eigelijk wel, maar der zijn 2 problemen:
1) Ik doe dit als c++ oefening om PostMessage() enzo te begrijpen. :doc:
2) Voor die copy/paste moet notepad gefocust zijn.

Kheb het al eens gevraagd in #winprog op EFNet, maar ik kreeg alleen flames naar mijne kop... :sad:
#Winprog zei:
(18:39:21) (+violusWRK) trying to learn postmessage by doing IPC is like learning to use a screwdriver by building a spaceship
(18:39:34) (+violusWRK) "OH LOL I GET IT, IT MAKES TEH SCREW GO IN!"

dJeez

Legacy Member
Om u ff te helpen (wel Delphi code, maar soit, je zal er je plan wel mee kunnen trekken zeker?) :
Code:
var
  wnd: HWND;
  i: Integer;
  s: string;
begin
  wnd := FindWindow('notepad', nil);
  if wnd <> 0 then
  begin
    wnd := FindWindowEx(wnd, 0, 'Edit', nil);
    s := 'Hello World!';
    for i := 1 to Length(s) do
      SendMessage(wnd, WM_CHAR, Word(s[i]), 0);
    PostMessage(wnd, WM_KEYDOWN, VK_RETURN, 0);
    PostMessage(wnd, WM_KEYDOWN, VK_SPACE, 0);
  end
  else ShowMessage('No Notepad instance found!');
end;

Die VK_xxx codes zijn trouwens respectievelijk 0x0d (VK_RETURN) en 0x20 (VK_SPACE).

Je moet dus maw nog de Edit control vragen aan Notepad, en daar dan de keys naar sturen.

The Crazy Frog

Legacy Member
Thx iedereen, mn programmaatje verstuurt nu al een key naar notepad.
Der is maar 1 probleem, tis de verkeerde key >.<.
Dus weet er iemand hoe ik nen char omzet naar unicode?

dJeez: kzou zeggen, kga u een repke geven, maar kan nie :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan