Iseng-iseng buka arsip kumpulan project2 lama, aku nemui trik menarik yg perlu aku share disini. Dibuat pake Delphi sekitar setaon lalu, (peb’ 06), trik sederhana ini bisa dicoba. Pertanyaan ato komentar dg senang hati diterima.

Didasari keinginan untuk sembunyi dari teman (dan ingin sembunyi dari orang2 yg mengganggu melalui Yahoo! Messenger), aku berpikir gimana caranya mengeset statusku agar keliatan idle. Ini maksudnya agar tetep keliatan online (dan ga’ sok sibuk) tapi juga ga harus untuk langsung membalas dari setiap YM yg masuk. Males juga klo tiba2 lagi fokus belajar ato ngerjain sesuatu trus ada saja hal2 sepele yg mesti langsung aku jawab.

Yahoo! Status Example
Menggunakan Delphi, aku pengen membuat program yg bisa mengontrol status YM. Dari riset barulah aku ketahui klo ternyata setting-setting dari YM disimpan dalam registry. Misal ketika aku mengubah nilai2 di HKEY_CURRENT_USER \Software\Yahoo\pager\profiles\[IDYahoo!]\Custom Msgs ternyata itu mengubah juga list di custom messages ku. Tetapi untuk mengaktifkan custom message yg diubah melalui registry itu masih harus dipilih/ click dari menu di YM sendiri. Pengaktifan itu bisa diakali dengan memanfaatkan Windows API. Akhirnya, aku membuat aplikasi berikut ini.

procedure TForm1.FormActivate(Sender: TObject);
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('\\Software\\Yahoo\\pager', False) then begin
      Edit1.Text := Reg.ReadString('Yahoo! User ID');
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey(
        '\\Software\\Yahoo\\pager\\profiles\\'+Edit1.Text+'\\Custom Msgs',
        False) then begin
       Reg.WriteString('5', Edit2.Text+chr($02)+chr($03));    // see *1
      Reg.WriteInteger('5_DND', 0);    // see *2
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
  PostMessage(FindWindow('YahooBuddyMain', nil), WM_COMMAND, 392, 0);// see *3
end;

Penjelasan

  1. Tambahkan dengan ASCII 2 + ASCII 3 setelah string message untuk membuatnya tampak idle.
  2. Beri nilai integer 1 jika menginginkan sekalian tampil icon busy, atau integer 0 jika tampil normal.
  3. Nilai 392 sepenuhnya didapat dari eksperimen. Untuk nilai-nilai laen liat referensi dibawah.

WPARAM Value
Nilai WM_COMMAND untuk YahooBuddyMain untuk ganti status, value WParam-nya adalah sebagai berikut:

====================
376 : Available[N]
---
377 : Be Right Back[B]
378 : Busy[B]
379 : Not at Home[B] - Hidden
380 : Not at My Desk[B]
381 : Not in the Office[B] - Hidden
382 : On the Phone[B]
383 : On Vacation[B] - Hidden
384 : Out To Lunch[B] - Hidden
385 : Stepped Out[B]
---
388 : custom_mesg_1
389 : custom_mesg_2
390 : custom_mesg_3
391 : custom_mesg_4
392 : custom_mesg_5
//penggunaan pada script-nya:
PostMessage(
    FindWindow('YahooBuddyMain', nil),
    WM_COMMAND,
    WParam(int), 0);