2012-05-22 70 views
1

大picuture:我試圖注入我自己的包裝探險家的拖放n下降。我的代碼被注入到資源管理器中,我嘗試用我自己的替換掉目標。掛鉤資源管理器拖放失敗

爲了做到這一點我做的:

  1. 找到所有IE窗口(使用EnumWindows的,並檢查每個窗口過程協會)。
  2. 對於我運行下述(什麼也不做)代碼中的每個窗口:

*下降目標= lpDT(*下降目標)GetProp(hwnds [I]中,L 「OleDropTargetInterface」); //獲得現有放置目標

HRESULT res1 = :: RevokeDragDrop(hwnds [i]); //撤銷現有放置目標

HRESULT res2 = :: RegisterDragDrop(hwnds [i],lpDT); //並重新註冊放置目標

現在,代碼不會更改放置目標。我只是取消註冊並重新註冊同一個目標。

在所有資源管理器窗口上運行後,我得到res1 ==「應用程序調用了一個接口,該接口被編組爲不同的線程。我發現每一個窗口。

如果我忽略錯誤(僅用於測試),並繼續進行替換,那麼當前瀏覽器將停止拖動桌面上的文件(僅用於更改圖標位置)。順便說一句,令人驚訝的是,在兩個不同文件夾之間拖動文件仍然有效。我的代碼是從一個資源管理器線程(注入資源管理器)運行。

有沒有辦法解決這個問題?

回答

0

GetProp返回一個指向放置目標的指針,而不關心編組(純指針)。正如我在this中指出的那樣,儘管我得到了一個指向放置目標的指針,但它並沒有真正封送給我的線程。 我可以告訴你,在指針上調用revokeDragDrop(即使它不是真的屬於我的線程)搞亂了放置目標,然後失敗。

由於我沒有辦法從持有它的其他線程獲取放置目標,因此我放棄了這一點並採取了替代路線。

相關問題