Artikel ini menjelaskan secara rinci bagaimana Delphi memperoleh pegangan dan mengirimkan pesan dalam bentuk contoh. Petunjuk penggunaan spesifiknya adalah sebagai berikut:
Temukan pegangan jendela lain:
pegangan := FindWindow(nil,PChar('Judul jendela'));//Temukan pegangan formulir
Temukan subformulir:
childHandle := FindWindowEx(handle,0,'subformulir kelas','subformulir judul');
Ada juga API untuk menghitung subformulir.
EnumChildWindows(pegangan badan utama, fungsi @callback, parameter pengguna);
Untuk menggunakan fungsi ini, Anda perlu menulis sendiri fungsi panggilan balik, seperti:
fungsi EnumChildProc(ahWND:HWND; param:LPARAM):boolean; stdcall;sendmessage(handle,message,wl,rl)
unit Unit1; antarmuka menggunakan Windows,Messages,Tlhelp32,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;ketik TForm1=class(TForm)procedure FormCreate(Sender: TObject); end; var Form1: prosedur TForm1;implementasi{ $R *.DFM} TForm1.FormCreate(Pengirim: TObject);var a,b:PANsiChar;h:HWND;beginh:= FindWindow(nil,'abc.txt - Notepad');h:= FindWindowEx(h,0,'edit', nil );SendMessage(h,WM_SETTEXT,255,Integer(PChar('Saya di sini untuk mengukur')));ShowMessage( IntToStr(h));akhir;
SendMessage(TreeView.Handle,TVM_SETBKCOLOR,0,RGB(255,0,0)); Mengatur warna latar belakang TV SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0); , 0,0); Angkat tombol kiri mouse SendMessage(Edit.Handle,WM_SETTEXT,255,Integer(PChar('abc'))); Berikan teks SendMessage(Edit.Handle,WM_Char,Wparam('Q'),2); Kirim Pesan( Tombol.Handle,BM_SETSTYLE,BS_RADIOBUTTON,1); Ubah gaya Tombol SendMessage(ComboBox.Handle,CB_SETDropPEDWIDTH,300,0);
WM_CUT, WM_COPY dan WM_PASTE potong, salin, tempel
Terapkan kombinasi tombol apa pun:
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0);keybd_event(ord('V') , MapVirtualKey(ord('V'), 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
Deskripsi SendMessageA: Memanggil fungsi jendela dari sebuah jendela untuk mengirim pesan ke jendela itu. Fungsi ini tidak kembali kecuali pesan diproses
SendMessage berisi 4 parameter:
1. jendela pegangan jendela 32-bit hwnd dapat berupa semua jenis objek layar, karena Win32 dapat mempertahankan pegangan untuk sebagian besar objek visual
2. wMsg adalah nilai konstan yang digunakan untuk membedakan pesan lain. Konstanta ini dapat berupa konstanta yang telah ditentukan sebelumnya di unit Windows atau konstanta yang disesuaikan.
3. wParam biasanya merupakan nilai konstan yang terkait dengan pesan, atau dapat berupa pegangan jendela atau kontrol
4. lParam biasanya berupa pointer yang menunjuk ke data di memori. Karena WParm, lParam, dan Pointer semuanya 32-bit, keduanya dapat dikonversi satu sama lain.
Penjelasan rinci tentang fungsi wMsg:
★WM_Create membuat jendela
★WM_DESTROY Dikirim ketika jendela hancur
★WM_MOVE Memindahkan jendela
★WM_SIZE Mengubah ukuran jendela
★WM_ACTIVATE Sebuah jendela diaktifkan atau dinonaktifkan
★WM_SETFOCUS Sebuah jendela mendapat fokus
★WM_KILLFOCUS Sebuah jendela kehilangan fokus
★WM_ENABLE mengubah jendela ke status Aktif
★WM_SETREDRAW Mengatur apakah jendela dapat digambar ulang
★WM_SETTEXT Aplikasi mengirimkan pesan ini untuk mengatur teks jendela
★WM_GETTEXT Aplikasi mengirimkan pesan ini untuk menyalin teks dari jendela yang sesuai ke buffer.
★WM_GETTEXTLENGTH Mendapatkan panjang teks yang terkait dengan jendela (tidak termasuk karakter nol)
★WM_PAINT meminta jendela untuk mengecat ulang dirinya sendiri
★WM_CLOSE mengirimkan sinyal ketika jendela atau aplikasi akan ditutup.
★WM_QUERYENDSESSION Pengguna memilih untuk mengakhiri kotak dialog atau program memanggil fungsi ExitWindows itu sendiri
★WM_QUIT digunakan untuk mengakhiri eksekusi program
★WM_QUERYOPEN Ketika jendela pengguna dikembalikan ke ukuran dan posisi sebelumnya, kirimkan pesan ini ke ikon
★WM_ERASEBKGND Ketika latar belakang jendela harus dihapus (misalnya, ketika ukuran jendela berubah)
★WM_SYSCOLORCHANGE Ketika warna sistem berubah, kirimkan pesan ini ke semua jendela tingkat atas
★Setelah pesan WM_QUERYENDSESSION, pesan ini dikirim ke aplikasi untuk memberitahukan apakah percakapan sudah selesai.
★WM_SHOWWINDOW Pesan ini dikirim ke jendela ini ketika jendela disembunyikan atau ditampilkan.
★WM_ACTIVATEAPP mengirimkan pesan ini ke aplikasi mana yang jendelanya aktif dan mana yang tidak aktif.
★WM_FONTCHANGE Pesan ini dikirim ke semua jendela tingkat atas ketika perpustakaan sumber daya font sistem berubah.
★WM_TIMECHANGE Kirim pesan ini ke semua jendela tingkat atas ketika waktu sistem berubah
★WM_CANCELMODE Kirim pesan ini untuk membatalkan mode yang sedang berlangsung (operasi)
★WM_SETCURSOR Jika mouse menyebabkan kursor bergerak di jendela
★WM_ENDSESSION Ketika proses sistem bermasalah dan input mouse tidak ditangkap, sebuah pesan dikirim ke jendela.
★WM_MOUSEACTIVATE mengirimkan pesan ini ke jendela saat ini ketika kursor berada di jendela tidak aktif dan pengguna menekan tombol mouse.
★WM_CHILDACTIVATE Kirim pesan ini ke jendela anak MDI ketika pengguna mengklik bilah judul jendela ini, atau ketika jendela diaktifkan, dipindahkan, atau diubah ukurannya
★WM_QUEUESYNC Pesan ini dikirim oleh program pelatihan berbasis komputer, dan pesan masukan pengguna dipisahkan oleh program kait WH_JOURNALPALYBACK
★WM_GETMINMAXINFO Pesan ini dikirim ke jendela ketika hendak mengubah ukuran atau posisi.
★WM_PAINTICON Dikirim ke jendela yang diperkecil saat ikonnya akan digambar ulang
★WM_ICONERASEBKGND Pesan ini dikirim ke jendela yang diperkecil hanya jika latar belakangnya harus digambar ulang sebelum menggambar ikon.
★WM_NEXTDLGCT★Kirim pesan ini ke program kotak dialog untuk mengubah posisi fokus
★WM_SPOOLERSTATUS Pesan ini dikeluarkan setiap kali pekerjaan ditambahkan atau dikurangi dari antrian manajemen pencetakan.
★WM_DRAWITEM Dikirim ketika tampilan visual tombol, kotak kombo, kotak daftar, menu berubah
★WM_MEASUREITEM Saat tombol, kotak kombo, kotak daftar, kontrol tampilan daftar, atau item menu dibuat
★WM_VKEYTOITEM Pesan ini memiliki gaya LBS_WANTKEYBOARDINPUT yang diberikan kepada pemiliknya sebagai respons terhadap pesan WM_KEYDOWN
★WM_CHARTOITEM Pesan ini dikirim oleh kotak daftar gaya LBS_WANTKEYBOARDINPUT kepada pemiliknya sebagai respons terhadap pesan WM_CHAR
★WM_SETFONT Saat menggambar teks, program mengirimkan pesan ini untuk mendapatkan warna yang akan digunakan oleh kontrol.
★WM_GETFONT Aplikasi mengirimkan pesan ini untuk mendapatkan font teks yang digambar oleh kontrol saat ini.
★WM_SETHOTKEY Aplikasi mengirimkan pesan ini untuk mengaitkan jendela dengan hotkey.
★WM_GETHOTKEY Aplikasi mengirimkan pesan ini untuk menentukan apakah hotkey dikaitkan dengan jendela
★WM_QUERYDRAGICON Pesan ini dikirim ke jendela yang diperkecil. Ketika jendela ini hendak diseret dan dilepas dan tidak ada ikon yang ditentukan di kelasnya, aplikasi dapat mengembalikan ikon atau pegangan kursor pengguna menyeret dan melepas ikon.
★WM_COMPAREITEM Kirim pesan ini untuk menentukan posisi relatif item yang baru ditambahkan di kotak kombo atau kotak daftar
★WM_COMPACTING menunjukkan bahwa memori sangat rendah.
★WM_WINDOWPOSCHANGING Kirim pesan ini ke fungsi setwindowpos atau fungsi manajemen jendela lainnya ketika ukuran dan posisi jendela akan diubah.
★WM_WINDOWPOSCHANGED Kirim pesan ini ke fungsi setwindowpos atau fungsi manajemen jendela lainnya ketika ukuran dan posisi jendela telah diubah.
★WM_POWER Pesan ini dikirim ketika sistem akan memasuki kondisi jeda.
★WM_COPYDATA Pesan ini dikirim ketika satu aplikasi meneruskan data ke aplikasi lain
★WM_CANCELJOURNA Ketika pengguna membatalkan status aktivasi log program, kirimkan pesan ini ke program
★WM_NOTIFY Ketika peristiwa suatu kontrol telah terjadi atau kontrol perlu mendapatkan beberapa informasi, pesan ini dikirim ke jendela induknya.
★WM_INPUTLANGCHANGEREQUEST Ketika pengguna memilih bahasa input, atau tombol pintas bahasa input berubah
★WM_INPUTLANGCHANGE Pesan ini dikirim ke jendela tingkat atas yang terpengaruh ketika adegan platform telah diubah.
★WM_TCARD Pesan ini dikirim ke aplikasi ketika program telah menginisialisasi rutinitas bantuan windows.
★WM_HELP Pesan ini menunjukkan bahwa pengguna menekan F1. Jika menu diaktifkan, pesan ini akan dikirim ke menu yang terkait dengan jendela ini. Jika tidak, pesan ini akan dikirim ke jendela dengan fokus pesan akan dikirim
★WM_USERCHANGED Pesan ini dikirim ke semua jendela setelah pengguna masuk atau keluar. Ketika pengguna masuk atau keluar, sistem memperbarui informasi pengaturan spesifik pengguna. Sistem mengirimkan pesan ini segera ketika pengguna memperbarui pengaturan.
★WM_NOTIFYFORMAT Kontrol publik, kontrol khusus, dan jendela induknya menggunakan pesan ini untuk menentukan apakah kontrol menggunakan struktur ANSI atau UNICODE.
function EnumChildWindowsProc(hwnd, lparam: Integer): Boolean; var buffer: array[0..255] dari char; mulai Hasil := GetClassName(hwnd,buffer,256); mulai SendMessage(hwnd,WM_GETTEXT,256,lparam); akhir; prosedur TForm1.Button1Click(Pengirim: TObject); var hwnd: Integer; buffer: array[0..255] dari char; Mulai hwnd := FindWindow('CabinetWClass',nil); (hwnd,@EnumChildWindowsProc,Longint(@buffer[0])); StrPas(akhir penyangga);