WINAPI ile nasıl pencereye mesaj gönderilir?

alperkral

Femtopat
Katılım
20 Aralık 2021
Mesajlar
41
[CODE lang="c" title="message.c" highlight="21"]#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main()
{
HWND hwnd;
char window_name[256];
printf("Pencere adini giriniz: ");
gets(window_name);
if((hwnd = FindWindow(NULL, window_name)) == NULL)
{
fprintf(stderr, "Fail: %u", GetLastError());
return -1;
}
while(1)
{
char ch;
printf("\nGondermek istediginiz klavye tusuna basiniz: ");
ch = getch();
SendMessage(hwnd, WM_CHAR, ch, ch); /* Klavyeden o tusa basilmis gibi olmasi lazim. */
}
return 0;
}[/CODE]

Denediğim kod bu fakat işe yaramıyor.
 
Senin mesaj gönderdiğin pencerenin sınıf adına göre buluyor FindWindow fonksiyonu. Pencerenin başlığını girersen yüksek ihtimalle boş bir sınıfa mesajı yollarsın, anladığım kadarıyla öyle de oluyor.

IPC mekanizması olarak kullanılmasından ziyade program kendi sınıflarına mesaj yollayabilsin diye yapılmış bir fonksiyon FindWindow.
 
Senin mesaj gönderdiğin pencerenin sınıf adına göre buluyor FindWindow fonksiyonu. Pencerenin başlığını girersen yüksek ihtimalle boş bir sınıfa mesajı yollarsın, anladığım kadarıyla öyle de oluyor.

IPC mekanizması olarak kullanılmasından ziyade program kendi sınıflarına mesaj yollayabilsin diye yapılmış bir fonksiyon FindWindow.
İlk parametre ile verilirse sınıf adı, ikinci parametre olarak verilirse pencere ismime göre oluyor diye biliyorum. Kullanılmayana da NULL geçiriliyor sanarım.
 
İlk parametre ile verilirse sınıf adı, ikinci parametre olarak verilirse pencere ismime göre oluyor diye biliyorum. Kullanılmayana da NULL geçiriliyor sanarım.
Evet ama yine de yanlış yere gidiyor olabilir mesaj. Notepad'i düşünelim, metin kutusu girdisi için olan pencerenin bir başlığı mevcut olmadığı için yine boş olan pencereye gidecektir mesaj.
 
Hocam FindWindow'un bulduğu hwnd'de sorun yok sorun klavye mesajını gönderememde.
Bak dostum, bahsettiğim FindWindow'un handle bulması veya bulmaması değil; pencerenin içinde pencere oluşturman gerek Win32 uygulamalarında, textbox tarzı item'ları yerleştirdiğinde, ve her pencerenin de farklı bir mesaj kontrol fonksiyonu vardır bildiğin üzere. Bu mesaj kontrol fonksiyonları da sistemden bu mesajları çekerler, parent pencereden değil. Sen yanlış pencereye mesaj yolluyorsun derken kastettiğim buydu. Çünkü FindWindow fonksiyonu IPC (interprocess communication) amaçlı yapılmış bir fonksiyon değil; uygulamaların kendi pencereleri arasında bir iletişim sağlamak maksat.
 
Bak dostum, bahsettiğim FindWindow'un handle bulması veya bulmaması değil; pencerenin içinde pencere oluşturman gerek Win32 uygulamalarında, textbox tarzı item'ları yerleştirdiğinde, ve her pencerenin de farklı bir mesaj kontrol fonksiyonu vardır bildiğin üzere. Bu mesaj kontrol fonksiyonları da sistemden bu mesajları çekerler, parent pencereden değil. Sen yanlış pencereye mesaj yolluyorsun derken kastettiğim buydu. Çünkü FindWindow fonksiyonu IPC (interprocess communication) amaçlı yapılmış bir fonksiyon değil; uygulamaların kendi pencereleri arasında bir iletişim sağlamak maksat.
Pek hocam başka processlerin hwnd'sini nasıl alabilirim ve nasıl WM_CHAR mesajını gönderebilirim?
 

Technopat Haberler

Geri
Yukarı