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

如何開啟『我的電腦』

答題得分者是:axsoft
hido
一般會員


發表:2
回覆:14
積分:3
註冊:2003-03-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-23 12:24:54 IP:163.28.xxx.xxx 未訂閱
各位先進好 我想利用以下的程式去開啟『我的電腦』的視窗 PChar PATH = "c:\\WINNT\\explorer.exe"; ShellExecute(Handle,"open",PATH,"我的電腦",NULL,SW_SHOWNORMAL); 但是執行結果似乎"我的電腦"是不合法的參數,不知道說我該怎麼去找到我的電腦的參數去執行『我的電腦』的開啟 如果把"我的電腦"改成NULL,會直接啟動『我的文件』,不知道說我該去哪裡得到相關資訊?謝謝
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-23 13:15:19 IP:61.218.xxx.xxx 未訂閱
hido您好:    試試
#define NO_WIN32_LEAN_AND_MEAN
#include < shlobj.hpp >    void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int folder;
  switch (comboBox1->ItemIndex)
  {
    case 0:
      folder = CSIDL_BITBUCKET;
      break;
    case 1:
      folder = CSIDL_CONTROLS;
      break;
    case 2:
      folder = CSIDL_DESKTOP;
      break;
    case 3:
      folder = CSIDL_DRIVES; //我的電腦
      break;
    case 4:
      folder = CSIDL_FONTS;
      break;
    case 5:
      folder = CSIDL_NETWORK;
      break;
    case 6:
      folder = CSIDL_PRINTERS;
      break;
    case 7:
      folder = CSIDL_PROGRAMS;
      break;
    case 8:
      folder = CSIDL_RECENT;
      break;
    case 9:
      folder = CSIDL_SENDTO;
      break;
    case 10:
      folder = CSIDL_STARTMENU;
      break;
    case 11:
      folder = CSIDL_STARTUP;
      break;
    case 12:
      folder = CSIDL_TEMPLATES;
      break;
    default:
      folder = -1;
      break;
  }
  if (folder >= 0)
  {
    LPITEMIDLIST pidl;
    if (SHGetSpecialFolderLocation(Handle,folder,&pidl) == NOERROR)
    {
      char buf[MAX_PATH];
      SHGetPathFromIDList(pidl,buf);
      Label1->Caption = buf;
    }
  }
}
聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/04/23 13:26:05
integrand
一般會員


發表:8
回覆:27
積分:17
註冊:2002-10-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-23 13:44:33 IP:218.163.xxx.xxx 未訂閱
引言: 各位先進好 我想利用以下的程式去開啟『我的電腦』的視窗 PChar PATH = "c:\\WINNT\\explorer.exe"; ShellExecute(Handle,"open",PATH,"我的電腦",NULL,SW_SHOWNORMAL); 但是執行結果似乎"我的電腦"是不合法的參數,不知道說我該怎麼去找到我的電腦的參數去執行『我的電腦』的開啟 如果把"我的電腦"改成NULL,會直接啟動『我的文件』,不知道說我該去哪裡得到相關資訊?謝謝
你可能想知道explorer的參數吧 那看看下面這個連結 http://www.cybraryn.com/support/resources/explorer.asp 我發現只要在參數的地方打個',' 就會開啟我的電腦 不知道為啥
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-23 14:05:25 IP:61.218.xxx.xxx 未訂閱
啊!會錯意! 用這個方法沒錯絕對可以開啟< class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { ShellExecute(NULL, "Open", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", NULL, NULL, SW_SHOWNORMAL); } 或者
    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  WinExec("explorer.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D} ",SW_SHOWMAXIMIZED);    }
聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/04/23 14:17:43
hido
一般會員


發表:2
回覆:14
積分:3
註冊:2003-03-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-23 14:05:58 IP:163.28.xxx.xxx 未訂閱
axsoft先進您好 我按照你說的方法作了,可是那些參數似乎未能定義,出現以下的錯誤碼 [C Error] Unit1.cpp(41): E2451 Undefined symbol 'CSIDL_DRIVES' [C Error] Unit1.cpp(51): E2451 Undefined symbol 'CSIDL_BITBUCKET' ................. [C Error] Unit1.cpp(94): E2451 Undefined symbol 'LPITEMIDLIST' [C Error] Unit1.cpp(94): E2379 Statement missing ; [C Error] Unit1.cpp(95): E2268 Call to undefined function 'SHGetSpecialFolderLocation' [C Error] Unit1.cpp(95): E2451 Undefined symbol 'pidl' [C Error] Unit1.cpp(98): E2268 Call to undefined function 'SHGetPathFromIDList' 不知道說我該INCLUDE什麼函式 再者,我發現我要是直接利用那些參數放到ShellExecute中一樣無法直接呼叫『我的電腦』啟動,我的目的是想要當如『我的電腦』的WINDOW被開啟時,能自動檢知『我的電腦』啟動,並於第二台電腦執行同樣的程式。所以我必須先知到如何開啟『我的電腦』的參數或路徑。謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-23 14:12:17 IP:140.135.xxx.xxx 未訂閱
hido您好:   我試過axsoft大哥的方式,的確是可行的喔~~~   可能是你程式有問題喔,比如說括號沒刮好之類的..   我的環境是BCB5.0 WINXP    順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
hido
一般會員


發表:2
回覆:14
積分:3
註冊:2003-03-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-23 14:40:12 IP:163.28.xxx.xxx 未訂閱
taishyang大大您好    不知道說您說的程式是axsoft大大說的ShellExecute程式還是更先前的SWITCH CASE那部分?如果是ShellExecute部分是OK,我現在差的就剩下說:當『我的電腦』執行時,我該怎麼自動偵測出"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"這個參數。 那至於SWITCH CASE部分我剛又試過一次一樣不行ㄝ!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-23 14:48:50 IP:140.135.xxx.xxx 未訂閱
hido您好:  我用的是  ShellExecute(NULL, "Open", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", NULL, NULL, SW_SHOWNORMAL); 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-23 14:51:17 IP:61.218.xxx.xxx 未訂閱
引言: taishyang大大您好 不知道說您說的程式是axsoft大大說的ShellExecute程式還是更先前的SWITCH CASE那部分?如果是ShellExecute部分是OK,我現在差的就剩下說:當『我的電腦』執行時,我該怎麼自動偵測出"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"這個參數。 那至於SWITCH CASE部分我剛又試過一次一樣不行ㄝ!! < face="Verdana, Arial, Helvetica"> 照你的錯誤訊息應該是沒有加入 #define NO_WIN32_LEAN_AND_MEAN #include < shlobj.hpp > 這兩行,"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"其實就是CSIDL_DRIVES的CLSID Number 我是在Windows XP BCB5 update1下試的! 這有幾篇相關的資訊您可以參考一下 http://bcbfans.363.net/bcb/cbuilder/english/vcl Controls and Classes/cb200006dc_f.asp.htm http://n76cd-01p05.ppp11.odn.ad.jp/old/a5300.html http://www.hidecnet.ne.jp/~sinzan/tips/win/win_tip24.htm 這個SpecialFolders給你參考看看 http://geoshell.sourceforge.net/GeoWiki/SpecialFolders
My Documents
explorer ::{450D8FBA-AD25-11D0-98A8-0800361B1103}    Network Neighborhood
explorer ::{208D2C60-3AEA-1069-A2D7-08002B30309D}    Recycle Bin
explorer ::{645FF040-5081-101B-9F08-00AA002F954E}    My Computer
explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}    Control Panel
explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}    Dial-Up Networking
explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{992CFFA0-F557-101A-88EC-00DD010CCC48}    Printers
explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{2227A280-3AEA-1069-A2DE-08002B30309D}    Scheduled Tasks
explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}    Fonts
explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D20EA4E1-3957-11d2-A40B-0C5020524152}        
聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/04/23 15:18:12
hido
一般會員


發表:2
回覆:14
積分:3
註冊:2003-03-18

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-23 15:13:03 IP:163.28.xxx.xxx 未訂閱
axsoft大大您好 我有加上那兩行阿!可是一樣不行說! 我是在WIN2000PRO以及BCB6.0下執行的 再請問說CSID Number要怎麼去找出來ㄌㄟ??假設我今天開啟了『我的電腦』我該怎麼去查知他就是CSIDL_DRIVES,"::{20D04FE0-3AEA-069-A2D8-08002B30309D}",有相關函式可以去查詢視窗的參數嗎?謝謝
hido
一般會員


發表:2
回覆:14
積分:3
註冊:2003-03-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-23 15:23:52 IP:163.28.xxx.xxx 未訂閱
各位大大好    關於#define NO_WIN32_LEAN_AND_MEAN的問題已解決了!! 原來這一串定義要加在#include 之前才可執行啦
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-04-23 15:31:51 IP:61.218.xxx.xxx 未訂閱
引言: axsoft大大您好 我有加上那兩行阿!可是一樣不行說! 我是在WIN2000PRO以及BCB6.0下執行的 再請問說CSID Number要怎麼去找出來ㄌㄟ??假設我今天開啟了『我的電腦』我該怎麼去查知他就是CSIDL_DRIVES,"::{20D04FE0-3AEA-069-A2D8-08002B30309D}",有相關函式可以去查詢視窗的參數嗎?謝謝
可以在Registry中"Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\"找到相關資訊,至於視窗部分你可以用FindWindow這一類的API來試試! 搜尋看看站內的文章有許多篇再討論Hook Window的資訊 <>網<>路志<>工聯盟---- href="http://www.vista.org.tw">http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-04-23 15:35:09 IP:61.218.xxx.xxx 未訂閱
恭喜你問題解決了!記得回來結案喔! <>網<>路志<>工聯盟---- href="http://www.vista.org.tw">http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
hido
一般會員


發表:2
回覆:14
積分:3
註冊:2003-03-18

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-04-23 16:12:38 IP:163.28.xxx.xxx 未訂閱
axsoft大大您好    有關於先前的說明漏貼了一小部分應該是要加在#include 之前才可執行 目前尚有一些問題 1.當我開啟任一視窗(如開啟『我的電腦』) 2.該如何由程式獲取CSIDL碼 3.在如何由CSIDL碼轉為CLSID Number給ShellExecute執行? 謝謝
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-04-23 16:46:42 IP:61.218.xxx.xxx 未訂閱
引言: axsoft大大您好 有關於先前的說明漏貼了一小部分應該是要加在#include 之前才可執行 目前尚有一些問題 1.當我開啟任一視窗(如開啟『我的電腦』) 2.該如何由程式獲取CSIDL碼 3.在如何由CSIDL碼轉為CLSID Number給ShellExecute執行? 謝謝
1. 何謂開啟任一視窗,不太懂您的意思,您一直沒說清楚您的用途,我只能用猜的...好累呦! >網<>路志<>工聯盟---- href="http://www.vista.org.tw">http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/04/23 16:49:09
hido
一般會員


發表:2
回覆:14
積分:3
註冊:2003-03-18

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-04-23 18:17:22 IP:163.28.xxx.xxx 未訂閱
呵呵..SORRY axsoft大大    其實我的目的是想要在第二台電腦啟動跟第一台電腦一樣的程式及畫面,所以我必須先知道第一台電腦出現畫面的檔名、路徑及參數才能重新執行。但是我又不可能欲先知道說那個程式會被開啟,所以只能用偵測的方式!不知道這樣寫可以清楚表達嗎?
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-04-23 19:08:57 IP:61.221.xxx.xxx 未訂閱
hido 你好    我實在看的霧沙沙 可否再敘述清楚寫一下  才看的懂    好像 太深了     原本以為a sir的第一次回應就好像ok了 診會好像問題越來越糢糊    < >< > 實在是 霧沙沙
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
hido
一般會員


發表:2
回覆:14
積分:3
註冊:2003-03-18

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-04-23 20:24:30 IP:163.28.xxx.xxx 未訂閱
jackkcg大大您好 其實axsoft大大回答的答案也是一種解決方法!只是不是全然我要的! 我的目的是要在另一台電腦上重新執行程式(就是兩台電腦要維持一樣的畫面) 我想要的作法為 1.抓取電腦螢幕隨機開啟視窗的資訊(例如抓取『我的電腦』的檔名、路徑及 開啟參數) 2.用SHELLEXECUTE重新執行程式,以『我的電腦』為例 ShellExecute(NULL, "Open", "::{20D04FE0-3AEA-1069-A2D8- 08002B30309D}", NULL, NULL, SW_SHOWNORMAL);可以重新開啟 3.我想要知道的是如何去擷取隨機開啟視窗的參數(如『我的電腦』的":: {20D04FE0-3AEA-1069-A2D8-08002B30309D}),否則我無法用SHELLEXECUTE 在別台電腦裡開啟一樣的視窗畫面。 不知道說這樣可以明瞭一點嗎? 對不起可能敘述的有點混亂,還是我先把這個主題結案了,在開一個新主題比較好?謝謝大家!!
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-04-23 20:47:49 IP:61.64.xxx.xxx 未訂閱
其實axsoft大大回答的答案也是一種解決方法!只是不是全然我要的! //這是你說明的不清楚 我的目的是要在另一台電腦上重新執行程式(就是兩台電腦要維持一樣的畫面) 我想要的作法為 1.抓取電腦螢幕隨機開啟視窗的資訊(例如抓取『我的電腦』的檔名、路徑及 開啟參數) //請查詢 遠端抓圖 範圍或桌面抓圖 2.用SHELLEXECUTE重新執行程式,以『我的電腦』為例 ShellExecute(NULL, "Open", "::{20D04FE0-3AEA-1069-A2D8- 08002B30309D}", NULL, NULL, SW_SHOWNORMAL);可以重新開啟 3.我想要知道的是如何去擷取隨機開啟視窗的參數(如『我的電腦』的":: {20D04FE0-3AEA-1069-A2D8-08002B30309D}),否則我無法用SHELLEXECUTE 在別台電腦裡開啟一樣的視窗畫面。 //請查尋 硬體資訊與軟體安裝偵測 //與重複執行的資料 不知道說這樣可以明瞭一點嗎? 對不起可能敘述的有點混亂,還是我先把這個主題結案了,在開一個新主題比較好?謝謝大家!! //不用結案 直接問重點 不過請問 a sir 因為我不會寫程式 哈哈 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-04-20 14:06:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!