線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1627
推到 Plurk!
推到 Facebook!

SetWindowRgn 在 Window 98 對 外在視窗失效 ?

答題得分者是:dllee
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-02 11:17:24 IP:218.16.xxx.xxx 未訂閱
我們通當會用 SetWindowRgn 來設定不同影狀視窗和中空效果等,如天使站長發表的 : http://delphi.ktop.com.tw/topic.php?TOPIC_ID=18906 但若 Handle 是其他軟件的 Handle (如 Notepad),在 Window 2K/XP 沒問題一樣成功,但在 98 卻一直不會進行並回報失敗。 請問有沒有辦法解決 ? 謝謝。
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-02 16:45:50 IP:61.231.xxx.xxx 未訂閱
//----------------------------------------------------------------------------//
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  HWND hwnd=FindWindow(Edit1->Text.c_str(),NULL);
  if(hwnd!=NULL)
  {
    HRGN rgn;
    rgn = CreateRectRgn(20,30,300,200); // 取一塊
    SetWindowRgn(hwnd,rgn,true);
  }
  else
  {
    ShowMessage("Windows '" Edit1->Text "' not found!");
  }
}
//----------------------------------------------------------------------------//    void __fastcall TForm1::Button2Click(TObject *Sender)
{
  HWND hwnd=FindWindow(Edit1->Text.c_str(),NULL);
  if(hwnd!=NULL)
  {
    SetWindowRgn(hwnd,NULL,true);       // 還原
  }
  else
  {
    ShowMessage("Windows '" Edit1->Text "' not found!");
  }
}
//----------------------------------------------------------------------------//
我在 XP 下,可以透過以上的 code 將別的應用程式的外形改變沒有問題。 以 notepad 為例,在 Edit1 中輸入 notepad 按下 Button1 ,如果您有執行 notepad 那它就變小了,再按下 Button2 就還原。 而 SetWindowRgn 及 FindWindow 都是 95,NT3.1 以上的 windows 都可以使用的 API,應該不會有問題才是。 我不會 Delphi ... 不過以上的 BCB code 蠻簡單的,都是叫用 API,應該不難看... 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-02 16:56:08 IP:218.16.xxx.xxx 未訂閱
唉,程式我一年前就寫了出來,但最近才發覺在 95/NT/2K/XP 都沒問題,連新安裝的 98 都沒問題,但只要 98 一 Window Update 後.. BOOM... 這功能便不能執行了.... 由於我做的 Tool 是給別人做 Flash Multimedia CD 的,肯定不少 End User 是用 98 的,所以若 98 不能生效即該功能不能用了 >.<
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-02 18:45:32 IP:61.231.xxx.xxx 未訂閱
引言: 唉,程式我一年前就寫了出來,但最近才發覺在 95/NT/2K/XP 都沒問題,連新安裝的 98 都沒問題,但只要 98 一 Window Update 後.. BOOM... 這功能便不能執行了.... 由於我做的 Tool 是給別人做 Flash Multimedia CD 的,肯定不少 End User 是用 98 的,所以若 98 不能生效即該功能不能用了 >.<
所以您的問題可能就是 Windows Update 出了問題。 Windows Update 真的好像是在 Update Bug!! 原本好好的 BCB 也因 Windows Update 而變得怪怪的 看來,沒事就不要 >沒空更新的網頁... href="http://big5.to/吃軟也吃硬">http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-02 18:54:47 IP:218.16.xxx.xxx 未訂閱
唉...最大問題是不可能要求客戶去要求它們的 end user 不 windows update, 更不能要求 update 的了重灌 windows。    我在網上找過資料,發理這問題應是 2000 年發生的,總之在98在自己 Process 裡 SetWIndowRgn 沒問題,但在別的 Process 就完全不行,可能在update 後的 user32.dll 加入了檢查 PID 的程式碼。但為甚麼只在 Window 98 就不得而知...    或許,有沒有將 外置程序 放進自己 Process 的辦法呢 
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-03 14:58:05 IP:203.204.xxx.xxx 未訂閱
引言: 唉...最大問題是不可能要求客戶去要求它們的 end user 不 windows update, 更不能要求 update 的了重灌 windows。 我在網上找過資料,發理這問題應是 2000 年發生的,總之在98在自己 Process 裡 SetWIndowRgn 沒問題,但在別的 Process 就完全不行,可能在update 後的 user32.dll 加入了檢查 PID 的程式碼。但為甚麼只在 Window 98 就不得而知... 或許,有沒有將 外置程序 放進自己 Process 的辦法呢 < face="Verdana, Arial, Helvetica"> 還有一個方法可以試試,那就是出機時,包含自己要用的「舊版」 user32.dll,您可以將它放在您自己應用程式的目錄,再用動態載入的方式載入這個 dll 並取得 SetWindowRgn ... 我是有看到部分的應用程式會附上一些系統的 dll,可能就是這個用途。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-03 15:16:30 IP:218.16.xxx.xxx 未訂閱
你的意思是否偵測到98時 : LoadLibrary 自帶的舊 User32.dll GetProcAddress 執行該 ProcAddress 丫 沒玩過這樣高深的東東...但似乎有時間時可以一試,最近極忙不可能試這樣深的東東了。 總算有點長遠可以去試的方向 但現在較急解決的是較簡單的隱藏 外部程式的 Border,我以前也是用 SetWindowRgn 做的,即在既不能用,有否 SendMessage 可以做到?簡單說就是設定成 bsNone 的樣子。 不過這是另一問題: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29873 這個 SetWindowRgn 的問題便先結案了。
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-03 15:29:20 IP:203.204.xxx.xxx 未訂閱
引言: 你的意思是否偵測到98時 : LoadLibrary 自帶的舊 User32.dll GetProcAddress 執行該 ProcAddress 丫
對的 不過... 我沒試過,但應該是可以試的方法。 <>沒空更新的網頁... href="http://big5.to/吃軟也吃硬">http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-03 19:19:14 IP:218.16.xxx.xxx 未訂閱
我看過了, Window Update 沒直接更改 user32.dll 應是其他的部份更改了引至,所以還是不行 >.< 我在 Borland NewsGroup 問,他們說是其他OS有 Bug 所以才可以修改外部程式的 window, Win98 這樣才是正確的
系統時間:2024-05-08 19:35:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!