PostMessage用法請教各位先進! |
答題得分者是:axsoft
|
ss0510
一般會員 發表:6 回覆:11 積分:3 註冊:2002-06-19 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: HWND Handle1=FindWindow(0,"小算盤"); if(Handle1!=NULL) { PostMessage(Handle1,WM_CHAR,VK_NUMPAD6,0) } 請問各位在以上程式裡傳送數字6到小算盤裡!但....小算盤卻沒動作? 為何會這樣啊? 還是我的方法錯誤! 感謝你的教導!改成這樣試試 < class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { HWND Handle1=FindWindow(0,"小算盤"); if(Handle1!=NULL) { PostMessage(Handle1,WM_KEYDOWN,VK_NUMPAD6,0); } } Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/05/06 09:24:17 |
ss0510
一般會員 發表:6 回覆:11 積分:3 註冊:2002-06-19 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: HWND Handle1=FindWindow(0,"未命名 - 記事本"); if(Handle1!=NULL) { ShowMessage("1"); //測試是否有進來用! PostMessage(Handle1,WM_KEYDOWN,VK_S,0); } 不好意思!版主!在請問一下! 換成以上時!BCB會說,VK_S未下定義! 我把WM_KEYDOWN 換成WM_CHAR也一樣也! 麻煩你幫幫忙~ >>< face="Verdana, Arial, Helvetica"> 在Winuser.h中並未定義VK_S,需自行定義 以下是各別的範圍給您參考!VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/05/06 16:18:00 |
ss0510
一般會員 發表:6 回覆:11 積分:3 註冊:2002-06-19 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 版主大大: 我有照你說的一樣,去WINUSER.H裡面去定義了! 但是還是無法傳數字或是A到Z的文字到記事本裡面去, 請問這是為何呢? 拜託!拜託! 幫幫忙啦! >>< face="Verdana, Arial, Helvetica"> 以上的方法是模擬小算盤Function Key,如果你要對記事本輸入文字需改用VOID keybd_event( BYTE bVk, // virtual-key code BYTE bScan, // hardware scan code DWORD dwFlags, // flags specifying various function options DWORD dwExtraInfo // additional data associated with keystroke );試試! Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/05/06 17:46:13 |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
引言: 我有照你說的一樣,去WINUSER.H裡面去定義了! 但是還是無法傳數字或是A到Z的文字到記事本裡面去, 請問這是為何呢? PS:真是奇怪!小算盤就可以!記事本不行?複製文魁一本API書的範例, 應該可以給你一點幫助.... ><>>> < class="code"> //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ComCtrls.hpp> #include <ToolWin.hpp> //執行 ShellExecute API函式-------------------------------------------------- #include <shellapi.h> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TToolBar *ToolBar1; TButton *Button1; TStaticText *StaticText1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif Unit1.cpp //--------------------------------------------------------------------------- //目的:開啟另一程式,並模擬鍵盤輸入多行字串 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //搜尋<記事本>有無開啟 HWND Npad = ::FindWindow(NULL, "未命名 - 記事本"); //若<記事本>在開啟中,即帶到最前面 if(::ShowWindow(Npad,SW_SHOWNORMAL)) { ::BringWindowToTop(Npad); } else //若沒開啟,則開啟<記事本> { //取得Window目錄位置 char WinDir[MAX_PATH]; ::GetWindowsDirectory(WinDir, MAX_PATH); AnsiString sysdir = AnsiString(WinDir) "\\Notepad.exe"; //開啟<記事本> ::ShellExecute(NULL,"open",sysdir.c_str(),NULL,NULL,SW_SHOWNORMAL); } //完全開啟<記事本>後,才送出特定文字 Sleep(100); int x=0; while(x<10) { for(int i = 'A'; i <= 'Z'; i ) { //從 a 至 z keybd_event((char)i, 0, 0, 0); keybd_event((char)i, 0, KEYEVENTF_KEYUP, 0); //從 ! 至 ) int c = x '0'; keybd_event(VK_SHIFT, 0, 0, 0); keybd_event((char)c, 0, 0, 0); keybd_event((char)c, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); } //每完成A至Z 一次循環,則換新一行 keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); x ; } } //--------------------------------------------------------------------------- |
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
這是C++ Builder & Windows API一書中的範例,可以買一本當參考書,挺不錯的喔! 以下程式碼歸文魁資訊股份公司所有
//--------------------------------------------------------------------------- //目的:開啟另一程式,並模擬鍵盤輸入多行字串 //--------------------------------------------------------------------------- #includeDelphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]--- |
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
|
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
引言: 換成以上時!BCB會說,VK_S未下定義! 我把WM_KEYDOWN 換成WM_CHAR也一樣也!請注意下面程式碼的 W 鍵是如何自行定義的... enjoy it!!!! //--------------------------------------------------------------------------- //目的:設定鍵盤組合鍵,即將滑鼠移至指定位置,並模擬按下滑鼠左鍵執行功能 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //將 VK_W 定義成 W 鍵值------------------------------------------------------ #define VK_W 0x57 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { //清除Memo1中文字 Memo1->Text = ""; //在Memo1中新增150行文字 char a[26]; for(int x=65;x<91;x ) a[x-65] = char(x); for(int i=1; i<151; i ) Memo1->Lines->Add("第 " AnsiString(i) " 行_ " AnsiString(a)); } //--------------------------------------------------------------------------- void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key) { //當組合鍵相等於Ctrl W 鍵是按下狀態 //則可進行相關功能改變 if(::GetKeyState(VK_CONTROL) && ::GetKeyState(VK_W)) { //將滑鼠移至Memo1的右下角ScrollBar位置 POINT p = { Memo1->Left Memo1->Width-10, Memo1->Top Memo1->Height-10}; p = ClientToScreen(p); ::SetCursorPos(p.x,p.y); //模擬按下滑鼠左鍵一次 ::mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 ); ::mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ); } } //--------------------------------------------------------------------------- |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
|
ss0510
一般會員 發表:6 回覆:11 積分:3 註冊:2002-06-19 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 呵~~~~~~ axsoft版主大大, 小弟手頭上正好翻著© "C++ Builder & Windows API範例辭典"範例... 順手就C & P 了.....您也是嗎? 再次聲明: 小弟所post程式碼『以上程式碼歸文魁資訊股份公司所有』 >>< face="Verdana, Arial, Helvetica"> 因為整本書有看完了!映象中有這類的範例,信手翻來就看見了! < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=9258866&CC=207074"> Delphi.Ktop風紀小隊---[ 發問前請先找找舊文章 ]--- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |