Tags:

ตามหัวข้อเลยครับ เช่น ใน Popup Menu ใน Windows Explorer มันมีเมนู Refresh อยู่ แบบว่า ผมอยากจะเพิ่มคำสั่งอะไรบางอย่างเข้าไปอีก หลังจากที่มันทำคำสั่งเดิม(Refresh) ไปแล้วอ่ะครับ มันจะทำได้ไหมครับ ถ้าผมใช้ C#

Get latest news from Blognone
By: soginal
AndroidIn Love
on 21 April 2012 - 23:17 #411136
soginal's picture

คงต้องใช้วิธี hook window เอาล่ะมั้งครั้ง แล้วก็คอยดัก event ของ window นั้น แต่การที่จะ hook ได้คุณต้องสร้าง dll (native dll นะครับ) ขึ้นมาเพื่อใช้สำหรับ hook

หรือไม่ก็สร้างเมนูใหม่ขึ้นมาเลย
ตาม link นี้จะเป็นการสร้าง Shell Extension เพื่อ Add menu เพิ่มเข้าไปนะครับ
http://blogs.msdn.com/b/codefx/archive/2010/09/14/writing-windows-shell-extension-with-net-framework-4-c-vb-net-part-1.aspx

แล้วคุณก็ใช้ function ของ winapi ที่ชื่อ SendMessage เพื่อส่งคำสั่ง refresh อีกที แล้วค่อยทำ process ที่คุณต้องการ

By: livencm
Windows
on 23 April 2012 - 09:04 #411386

ขอบคุณมากครับ

แล้วมันพอจะมีวิธีแบบว่า เทียบ Text จากเมนูเลยได้ไหมครับ..

By: soginal
AndroidIn Love
on 23 April 2012 - 11:44 #411412 Reply to:411386
soginal's picture

อ่าจะเอาแบบนั้นเลยเหรอครับ

ผมจำได้ว่ามีโปรแกรม dictionary ของไทยโปรแกรมนึงสามารถอ่านศัพท์จาก lable button menu ต่างๆบนหน้่าจอได้โดยการเอา mouse ไปชี้
เท่าที่ผมลองค้นหาดูมันก็คงใช้ function ใน winapi ชื่อ WindowFromPoint และ ChildWindowFromPoint ในการดึงค่า hwnd (window handler)

และขั้นตอนหลังจากนี้ ผมไม่รู้ครับ เพราะผมไม่เคยทำการดึง text ออกมาจาก popupmenu (- -!)

ผมเดาเอาว่าคุณควรใช้ function GetSystemMenu และ GetMenuItemInfo เพื่อดึงข้อมูลของ popupmenu ออกมา

หรืออาจจะใช้ EnumChildWindows เพื่อดึง child window ออกมาแล้วใช้ GetWindowText เพื่อดึง text ของmenu ออกมา (รึเปล่า)

แต่ยังไงก็ตามวิธีนี้คุณต้องดัก event mouse move เสมอ หากมีการใช้คีย์บอร์ดในการเลื่อน menu ล่ะก็อาจจะต้องใช้ function GetCursorPos (ผมไม่เคยใช้กับ menu นะไม่รู้ใช้ได้ไหม - -!)

By: livencm
Windows
on 24 April 2012 - 12:41 #411834 Reply to:411412

ขอบคุณมากๆอีกครั้งคร๊าบบบ

By: livencm
Windows
on 24 April 2012 - 12:48 #411839

แล้วจะเป็นไปได้ไหมครับ ถ้าเกิดผมอยากจะดู source code ของ context menu ต่างๆ ของ windows explorer มันจะมีให้ดูไหมครับเนี่ย แบบว่าอยากจะดึงค่าอะไรบางอย่างของมันมาใช้ซักหน่อยอ่ะครับ ^^