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

SendMessage 宣告 第3,4引數 int / IntPtr

尚未結案
rik
一般會員


發表:40
回覆:81
積分:24
註冊:2004-09-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-15 21:14:13 IP:59.105.xxx.xxx 未訂閱
在我之前擷取網路攝影機影像那篇 所得到程式 其SendMessage 宣告為 public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam); 最後兩個引數 種類為int 在msdn上收尋SendMessage 為 LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); public IntPtr WParam {get; set;} public IntPtr LParam{get; set;} 最後兩個引數 種類為IntPtr 問題: 何者正確/較好 如 SendMessage(mCapHwnd, WM_CAP_GET_FRAME, 0, 0); 如果使用IntPtr 類別 將無法用0 給值 那該如何更改呢? 但如果用int 如 SendMessage(mCapHwnd ,WM_CAP_FILE_SAVEAS ,X,Y); 在msdn查詢得知 WM_CAP_FILE_SAVEAS wParam = (WPARAM) 0; lParam = (LPARAM) (LPVOID) (LPSTR) (szName); wParam lParam 又該如何給值?
------
時與不時的撿起身旁的拼圖碎片

不懂的部分 半解的部分 就像一塊拼圖
留於腦中 等待拼出完美解答的一天

這就是我的思路 我的創作方法
而我也接受 這作法所帶來的"代價" - 時間
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-17 17:14:43 IP:61.229.xxx.xxx 未訂閱
我的想法: 再增加一個 SendMessage() 給 capFileSaveAs()
[DllImport("user32.dll",EntryPoint="SendMessage")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)]string fileName);
public static bool capFileSaveAs(int hwnd, string strFName)
{
  return 0!=SendMessage(hwnd, WM_CAP_FILE_SAVEAS, 0, strFName);
}
 
rik
一般會員


發表:40
回覆:81
積分:24
註冊:2004-09-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-17 22:17:33 IP:59.104.xxx.xxx 未訂閱
引言: 我的想法: 再增加一個 SendMessage() 給 capFileSaveAs()
[DllImport("user32.dll",EntryPoint="SendMessage")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)]string fileName);
public static bool capFileSaveAs(int hwnd, string strFName)
{
  return 0!=SendMessage(hwnd, WM_CAP_FILE_SAVEAS, 0, strFName);
}
 
使用 public static extern int SendMessage(int hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)]string fileName); 時 (1) 當我前置動作 需要作 SendMessage(mCapHwnd,WM_CAP_DRIVER_CONNECT ,0,0); //與驅動程式連結 SendMessage(mCapHwnd,WM_CAP_SET_PREVIEW ,0,0); SendMessage(mCapHwnd,WM_CAP_SET_SCALE ,0,0); SendMessage(mCapHwnd,WM_CAP_SET_PREVIEWRATE ,1000/30,0); //每秒影像變化張數 SendMessage(mCapHwnd,WM_CAP_SET_OVERLAY ,0,0); 0 (int) 將會不符合 而無法編譯過 有方法解決嗎? (2) 我找到的定義是 int uint IntPtr IntPtr 我會同意 int uint int int 是因為 取得的範例是這樣寫 而且可以編譯過 也可以執行一段時間 可以請你提供一下 如何使用 public static extern int SendMessage(int hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)]string fileName); 嗎0.0a" (因為不是只用capFileSaveAs就夠了= =") 測試 (1) 宣告1種 [DllImport("user32.dll",EntryPoint="SendMessage")] public static extern int SendMessage(int hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)]string fileName); public static bool capFileSaveAs(int hwnd, string strFName) { return 0!=SendMessage(hwnd, WM_CAP_FILE_SAVEAS, 0, strFName); } 然後執行 mCapHwnd = capCreateCaptureWindowA("WebCap1", 0, 0, 0, m_Width, m_Height, this.Handle.ToInt32(), 0); capFileSaveAs(mCapHwnd,@"C:\test.bmp"); 沒反應(就是沒生出test這張圖) 測試 (2) 同時宣告2種 [DllImport("user32.dll",EntryPoint="SendMessage")] public static extern int SendMessage(int hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)]string fileName); public static bool capFileSaveAs(int hwnd, string strFName) { return 0!=SendMessage(hwnd, WM_CAP_FILE_SAVEAS, 0, strFName); } [DllImport("user32", EntryPoint="SendMessage")] public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam); 先執行 mCapHwnd = capCreateCaptureWindowA("WebCap1", 0, 0, 0, m_Width, m_Height, this.Handle.ToInt32(), 0); SendMessage(mCapHwnd,WM_CAP_DRIVER_CONNECT ,0,0); //與驅動程式連結 SendMessage(mCapHwnd,WM_CAP_SET_PREVIEW ,0,0); SendMessage(mCapHwnd,WM_CAP_SET_SCALE ,0,0); SendMessage(mCapHwnd,WM_CAP_SET_PREVIEWRATE ,1000/30,0); //每秒影像變化張數 SendMessage(mCapHwnd,WM_CAP_SET_OVERLAY ,0,0); 然後執行 capFileSaveAs(mCapHwnd,@"C:\test.bmp"); 也沒反應(就是沒生出test這張圖) 發表人 - rik 於 2005/08/18 00:15:20
------
時與不時的撿起身旁的拼圖碎片

不懂的部分 半解的部分 就像一塊拼圖
留於腦中 等待拼出完美解答的一天

這就是我的思路 我的創作方法
而我也接受 這作法所帶來的"代價" - 時間
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-18 15:00:59 IP:61.229.xxx.xxx 未訂閱
再次抱歉,我沒有攝影機,完全無法測試,僅僅在旁邊搖旗吶喊,出出餿主意而已 >_< 我的想法比較接近 測試 (2) 的做法,可惜無法從 method 的回傳值來看看問題點在哪邊...
rik
一般會員


發表:40
回覆:81
積分:24
註冊:2004-09-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-18 18:05:56 IP:59.104.xxx.xxx 未訂閱
引言: 再次抱歉,我沒有攝影機,完全無法測試,僅僅在旁邊搖旗吶喊,出出餿主意而已 >_< 我的想法比較接近 測試 (2) 的做法,可惜無法從 method 的回傳值來看看問題點在哪邊...
沒關係^^ 我覺得這樣討論式的回答也不錯^^ 可以觸發想法 對我學習比較好@@" 至少因此我注意到可以同時宣告2種給值法0.0" (沒有從多載直接聯想到這) 有考慮買網路攝影機嗎? 現在不是1千有找0.0a"
------
時與不時的撿起身旁的拼圖碎片

不懂的部分 半解的部分 就像一塊拼圖
留於腦中 等待拼出完美解答的一天

這就是我的思路 我的創作方法
而我也接受 這作法所帶來的"代價" - 時間
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-19 15:30:06 IP:61.229.xxx.xxx 未訂閱
我是有興趣學習,不過沒有錢買 >_<|| 欠缺贊助 ^_^
系統時間:2024-05-12 10:27:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!